SlideShare a Scribd company logo
Functional & Object Oriented
Programming
@aliefma_
https://www.linkedin.com/in/alief-abdillah/
Kotlin Basic
What is programming paradigm?
Questions
Before we started..
● Secara umum, paradigma pemrograman bisa diartikan sebagai
sebuah pendekatan dalam memecahkan masalah dengan
menggunakan bahasa pemrograman tertentu.
● suatu gaya, teknik, atau cara penulisan suatu program.
Programming Paradigm
Basic Programming Paradigm
● Structure Programming
● Functional Programming
● Object–Oriented Programming
Overview
Basic Programming Paradigm
● merupakan pemrograman yang berkomputasi dalam hal fungsi
matematis.
● biasanya akan menghindari terjadinya perubahan data.
● banyak menggunakan method yang banyak ditemukan di
matematika.
Functional Programming
Basic Programming Paradigm
fun printHello() {
println("Hello World")
}
In main functions:
printHello()
Functions
Functional Programming
fun printHello(name: String, age: Int){
return "Hello World, my $name, i’m $age old"
}
In main functions:
printHello("Alief", 19)
Parameter Function
Functional Programming
fun printHello(name: String, age: Int): String{
return "Hello World, my $name, i’m $age old"
}
In main functions:
Val sayHello = printHello("Alief", 19)
Returning Function
Functional Programming
fun printHello(): Unit {
println("Hello World")
}
is equivalent to:
fun printHello() {
println("Hello World")
}
Returning Function
Functional Programming
● Default Parameter
● Named arguments
Functions Argument/parameter
Functional Programming
● Parameter yang memiliki nilai awal/default
fun mamalia(name: String = “kucing”) {
println("$name adalah mamalia")
}
mamalia() => “kucing adalah mamalia”
mamalia(“paus”) => “paus adalah mamalia”
Default Parameter
Functional Programming
●Arguments dapat dimasukan ke dalam function dengan memanggil nama argumen itu sendiri
fun yourself(first: String, middle: String, last: String, age: Int) {
println("Hi there!,i’m $first $middle $last, i’m $age years
old")
}
yourself(first = “Alief”, middle = “Muhammad”, last = “Abdillah”, age = 19)
Named Argument
Functional Programming
Jelaskan apa itu parameter/argument?
Questions
Before we Continue..
● Function di kotlin adalah first-class citizens, artinya dianggap seperti tipe
data yang lainnya.
● Bisa disimpan di variable, array, bahkan bisa dikirim ke parameter function
itu sendiri
● Lambda expression secara sederhana adalah function yang tidak
memiliki nama
● Biasanya saat kita membuat function, kita akan selalu membuat
menggunakan kata kunci fun dan mendeklarasikan nama function nya
● Dengan lambda expression, kita bisa membuat function tanpa harus
mendeskripsikan function nya
Lambda Functions
Functional Programming
● deklarasi
val lambdaName: (String) → String = { value: String -> value.toUpperCase()}
● Eksekusi
val name = lambdaName(“alief”)
(String) → String = Tipe data variabel
value: String = Parameter
value.topUpperCase() = Isi fungsi
Lambda Functions
Functional Programming
fun toUpper(value: String): String = value.toUpperCase()
● Membuat Lambda
Val lambdaName: (String) → String = ::toUpper
● Eksekusi
val name = lambdaName(“alief”)
Method References
Functional Programming
●Higher-Order Function adalah function yang menggunakan function sebagai parameter
atau mengembalikan function
fun hello(value: String, transform: (String) -> String): String {
return “Hello ${transform(value)}”
}
Main:
val upperMethod = { value: String -> value.upperCase()}
println(hello(“alief”, upperMethod))
Higher Order Functions
Functional Programming
inline fun repeat(times: Int, action: (Int) -> Unit)
Main:
repeat(3) {
println("Hello")
}
Trailing Lambda
Functional Programming
Questions
Before we Continue..
Any Questions?
Break
5 Minutes…
Object-Oriented Programming
Basic Programming Paradigm
●OOP ini kode yang kita program akan dibungkus kedalam class - class dan
objek - objek, dan setiap objek memiliki method, dan atribut.
●bersifat reusable dapat digunakan kembali, sehingga dapat menghemat
tempat penyimpanannya.
●sangat bagus jika menggunakannya dalam masalah besar, karena dalam
OOP dapat memisahkan kode - kodenya dalam class yang fungsinya
berbeda - beda.
Class
Object-Oriented Programming
●Kelas adalah cetak biru untuk objek
●Kelas menentukan method/functions
yang beroperasi pada instance objek
yang dibuat
Class
Object-Oriented Programming
Class House
Data (Property/Atribut)
●House color (String)
●Number of windows (Int)
●Is for sale (Boolean)
Behavior (Method/Functions)
●updateColor()
●putOnSale()
Membuat Class dan Instansiasi Object
Object-Oriented Programming
class House {
var color: String = "white"
val numberOfWindows: Int = 2
val isForSale: Boolean = false
fun updateColor(newColor: String){
color = newColor
}
}
fun main() {
val myHouse = House()
println(myHouse)
}
Properties
Object-Oriented Programming
●Properties / Fields / Attributes adalah data yang bisa kita sisipkan di dalam Object
●Namun sebelum kita bisa memasukkan data di Properties, kita harus
mendeklarasikan data apa aja yang dimiliki object tersebut di dalam deklarasi class-
nya
●Membuat Properties sama seperti membuat variable, bisa val atau var
●Untuk mengakses properties, kita butuh kata kunci . (titik) setelah nama object dan
diikuti nama properties nya
●Properties dapat diganti nilai datanya asalkan properties tersebut merupakan var
Properties & Functions
Object-Oriented Programming
class Person {
var firstname: String = ""
var middleName: String? = null
var lastName: String = ""
fun showFullname(){
println("My Name is $firstname
$middleName $lastName")
}
}
fun main() {
val mySelf = Person()
mySelf.firstname = "Alief"
mySelf.middleName = "Muhammad"
mySelf.lastName = "Abdillah"
mySelf.showFullname()
}
Nilai atau elemen-elemen data yang dimiliki objek dalam kelas objek dan
merupakan ciri dari sebuah objek adalah…
a.Class
b.Object
c.Properties/Atribut
d.Function/Method
Questions
Before we continue..
Constructor
Object-Oriented Programming
●Di dalam class Kotlin, kita bisa membuat Constructors, Constructors mirip
seperti function yang akan dipanggil saat pertama kali Object dibuat.
●Mirip seperti di Function, kita bisa memberi parameter pada Constructors
●Kotlin mendukung deklarasi properties langsung di constructor
●Ini sangat berguna untuk mempersingkat saat kita ingin membuat properties,
dan mengisi datanya lewat constructor
Constructor
Object-Oriented Programming
class Person(first: String, middle:
String?, last: String) {
var firstname: String = first
var middleName: String? =
middle
var lastName: String = last
}
fun main() {
val mySelf = Person("Alief", "Muhammad","Abdillah
}
Properties Constructor
Object-Oriented Programming
class Person(val first: String, val middle: String?, val last:
String)
fun main() {
val mySelf = Person("Alief", "Muhammad","Abdillah")
}
Init Block
Object-Oriented Programming
●Initializer Block adalah blok kode yang akan dieksekusi ketika constructor
dipanggil
●Kita bisa memasukkan kode program di dalam initializer block
Init Block
Object-Oriented Programming
class Animal(val name: String, val weight:
Double, val age: Int){
init {
this.weight = if(weight < 0) 0.1 else weight
this.age = if(age < 0) 0 else age
this.name = name
}
}
fun main() {
val animal = Animal("Cat",-2.0, 5)
}
Manakah program yang menyebabkan error saat dijalankan?Jelaskan
alasannya!
Questions
Before we continue..
Inheritance
Object-Oriented Programming
●Inheritance atau pewarisan adalah kemampuan untuk menurunkan sebuah class
ke class lain
●Dalam artian, kita bisa membuat class Parent dan class Child
●Di Kotlin, tiap class Child, hanya bisa punya satu class Parent, namun satu class
Parent bisa punya banyak class Child
●Secara standar, di class yang dibuat di Kotlin adalah final (tidak bisa diwariskan),
agar bisa diwariskan, kita harus menggunakan kata kunci “open”
Inheritance
Object-Oriented Programming
●Class Parent
open class ParentClass {
}
●Class Child
class ChildClass : ParentClass {
}
Inheritance
Object-Oriented Programming
open class Animal(val name: String, val weight: Double, val isCarnivore:
Boolean){
open fun eat(){
println("$name sedang makan!")
}
}
Inheritance
Object-Oriented Programming
class Cat(pName: String, pWeight: Double,
pIsCarnivore: Boolean, val furColor: String, val
numberOfFeet: Int)
: Animal(pName, pWeight, pIsCarnivore) {
fun playWithHuman() {
println("$name bermain bersama Manusia !")
}
override fun eat(){
println("$name sedang memakan ikan !")
}
}
fun main(){
val myCat = Cat("Dicoding Miaw", 3.2, true, "Brown",
4)
myCat.playWithHuman()
myCat.eat()
}
Abstract Class
Object-Oriented Programming
●Saat kita membuat class, kita bisa menjadikan sebuah class sebagai abstract
●Abstract class artinya, class tersebut tidak bisa dibuat sebagai object, hanya
bisa diturunkan
●Properties dan Function yang ditandai dengan keyword abstract harus di
turunkan
●Tetapi abstract class masih bisa memiliki properties dan function yang bersifat
non-abstract
Abstract Class
Object-Oriented Programming
abstract class Food {
abstract val kcal : Int
abstract val name : String
fun consume() = println("I'm eating ${name}")
}
class Pizza() : Food() {
override val kcal = 600
override val name = "Pizza"
}
fun main() {
Pizza().consume() // "I'm eating Pizza"
}
Interface
Object-Oriented Programming
●Interfaces merupakan suatu konsep sifat umum yang nantinya digunakan oleh
suatu kelas agar dapat memiliki sifat tersebut.
●Interface hanya bisa diturunkan, dan biasanya Interface digunakan sebagai
kontrak untuk class - class turunannya
●Interface sangat mirip dengan abstract class, namun tanpa sebuah properti
deklarasi dan fungsi yang dideklarasikan tanpa isi.
●Kelas yang mengimplementasikan sebuah interface diharuskan melakukan
override seluruh properti dan fungsi sekaligus mendefinisikan isi fungsi yang
terdapat pada interfaces-nya.
Interface
Object-Oriented Programming
interface IFly {
fun fly()
val numberOfWings:
Int
}
class Bird(override val numberOfWings: Int) : IFly {
override fun fly() {
if(numberOfWings > 0)
println("Flying with $numberOfWings wings")
else
println("I'm Flying without wings")
}
}
Interface vs Abstract
Object-Oriented Programming
●Interfaces digunakan ketika ada 2 atau lebih class yang tidak memiliki
hubungan hirarki, tetapi class-class tersebut ingin memiliki method yang
sama,
●Abstract class digunakan di dalam inheritance (pewarisan class) untuk
'memaksakan' implementasi method yang sama bagi seluruh class yang
diturunkan dari abstract class.
Data Class
Object-Oriented Programming
●Kelas khusus yang ada hanya untuk menyimpan sekumpulan data
●Menghasilkan getter untuk setiap properti (dan juga setter untuk var)
●Data Class merupakan class yang secara otomatis akan membuatkan
function equals, hashCode, toString dan copy dari semua properties yang
terdapat di primary constructors yang dimiliki oleh data class
Data Class
Object-Oriented Programming
●Define the data class:
data class Player(val name: String, val score: Int)
●Use the data class:
val firstPlayer = Player("Lauren", 10)
println(firstPlayer)
=> Player(name=Lauren, score=10)
Object/Singleton
Object-Oriented Programming
●Terkadang Anda hanya ingin satu instance dari suatu kelas yang pernah
ada
●Diakses dengan NameOfObject.<fungsi atau variabel>
object Calculator {
fun add(n1: Int, n2: Int): Int {
return n1 + n2
}
}
println(Calculator.add(2,4))
Visibility Modifiers / Hak Akses
Object-Oriented Programming
●Public: Hak akses yang cakupannya paling luas. Anggota yang diberi
modifier ini dapat diakses dari manapun.
●Private: Hak akses yang cakupannya paling terbatas. Anggota yang
menerapkannya hanya dapat diakses pada scope yang sama.
●Protected: Hak akses yang cakupannya terbatas pada hirarki kelas.
Anggota hanya dapat diakses pada kelas turunannya atau kelas itu sendiri.
●Internal: Hak akses yang cakupannya terbatas pada satu modul. Anggota
yang menggunakannya tidak dapat diakses diluar dari modulnya tersebut.
Questions
Before we continue..
Codelab
Subtitle
Practice what you’ve learned by
completing the pathway:
Lesson 2: Functions
Lesson 3: Classes and objects

More Related Content

PDF
Analisis bab1 bab2
PPT
Penyederhanaan Karnaugh Map
PPT
4.matriks dan relasi
DOC
BAB 2 : KALIMAT BERKUANTOR
PPTX
PATH DAN SIRKUIT
DOC
Makalah array
PPTX
5 permutasi dan kombinasi
Analisis bab1 bab2
Penyederhanaan Karnaugh Map
4.matriks dan relasi
BAB 2 : KALIMAT BERKUANTOR
PATH DAN SIRKUIT
Makalah array
5 permutasi dan kombinasi

What's hot (20)

PDF
02.logika
PPTX
CFG dan PARSING - P 5 - Teknik Kompilasi
PPT
Matematika Diskrit part 2
PPT
Pertemuan 02 teori dasar himpunan
DOCX
Eliminasi gauss
PPTX
Transformasi Linear ( Aljabar Linear Elementer )
PPS
Fungsi Vektor ( Kalkulus 2 )
PDF
Tutorial Matlab
PDF
Basis dan Dimensi
DOC
Contoh store procedure dan function
PPTX
Teorema balzano weierstrass
PDF
Relasi rekursi (2) : Menentukan solusi relasi Rekursi Linier Homogen Berkoefi...
PPTX
Konsep dasar oop
DOCX
Contoh soal dan pembahasan subgrup
PDF
Soal uas imk bsi
PDF
Metoda numerik
DOCX
Matematika diskrit Aplikasi Graf / Graf
PDF
Relasi dan Hasil Kali Cartesius
DOCX
PDF
Relasi dan fungsi - matematika diskrit
02.logika
CFG dan PARSING - P 5 - Teknik Kompilasi
Matematika Diskrit part 2
Pertemuan 02 teori dasar himpunan
Eliminasi gauss
Transformasi Linear ( Aljabar Linear Elementer )
Fungsi Vektor ( Kalkulus 2 )
Tutorial Matlab
Basis dan Dimensi
Contoh store procedure dan function
Teorema balzano weierstrass
Relasi rekursi (2) : Menentukan solusi relasi Rekursi Linier Homogen Berkoefi...
Konsep dasar oop
Contoh soal dan pembahasan subgrup
Soal uas imk bsi
Metoda numerik
Matematika diskrit Aplikasi Graf / Graf
Relasi dan Hasil Kali Cartesius
Relasi dan fungsi - matematika diskrit
Ad

Similar to PPT Functional dan OOP Programming.pptx (20)

PPTX
Kelompok 4 [Apasih] - Week2 Learning Progress Review
PDF
Function pada PHP
PDF
JavaScript Standard Library.pdf
PPTX
PBO ( Pemograman berbasis Objek ).pptx
PPTX
Object-Oriented-Programming-New-OOP.pptx
PPTX
Object-Oriented-Programming-New-OOP.pptx
PDF
Algoritma & Pemograman - 02. Variabel dan Tipe Data
PPTX
Function dalam PHP
PPTX
Algoritma pemrograman 14
PPT
02. Struktur Dasar Php
PPTX
Dts x dicoding #3 memulai pemrograman kotlin
PPTX
materi Php lanjutan
PPTX
CCIT OOP Pertemuan 1
DOCX
modul algoritma Bab 5
DOCX
Dasar pemrograman C++
PDF
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
PPTX
[GDGoC BiOn] Learn Go by Playing: A Number Guessing Game
PPT
Javascript function
PPTX
INFORMATIKA Rumpun Bisnis dan Manajemen_Bab 5 Algoritme Pemrograman dan Prakt...
PDF
Modul PBO Bab-06 - Polimorfisme (Polymorphism)
Kelompok 4 [Apasih] - Week2 Learning Progress Review
Function pada PHP
JavaScript Standard Library.pdf
PBO ( Pemograman berbasis Objek ).pptx
Object-Oriented-Programming-New-OOP.pptx
Object-Oriented-Programming-New-OOP.pptx
Algoritma & Pemograman - 02. Variabel dan Tipe Data
Function dalam PHP
Algoritma pemrograman 14
02. Struktur Dasar Php
Dts x dicoding #3 memulai pemrograman kotlin
materi Php lanjutan
CCIT OOP Pertemuan 1
modul algoritma Bab 5
Dasar pemrograman C++
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
[GDGoC BiOn] Learn Go by Playing: A Number Guessing Game
Javascript function
INFORMATIKA Rumpun Bisnis dan Manajemen_Bab 5 Algoritme Pemrograman dan Prakt...
Modul PBO Bab-06 - Polimorfisme (Polymorphism)
Ad

Recently uploaded (20)

PDF
KASUS_INKUIRI_KOLABORATIF_KELAS_BAWAH-ISI-ARNI.pdf
PPTX
9ICP - Hubungan antara Pancasila dengan UUD 1945Bhinneka Tunggal Ika.pptx
DOCX
Modul Ajar Deep Learning PJOK Kelas 10 SMA Terbaru 2025
DOCX
Modul Ajar Deep Learning PKN Kelas 10 SMA Terbaru 2025
PPT
Teknologi-Pangan-Pertemuan-820728132309-.ppt
PDF
PPT IPS Geografi SMA Kelas X_Bab 1 Pengantar Geografi_May.pdf
DOCX
Modul Ajar Pembelajaran Mendalam Senbud Seni Musik Kelas XII Terbaru 2025
PDF
PPT Resources Seminar AITalks: AI dan Konseling GPT
PDF
Materi Seminar AITalks AI dan Suku Digital
DOCX
Modul Ajar Pembelajaran Mendalam Senbud Seni Teater Kelas 12 Terbaru 2025
DOCX
Modul Ajar Deep Learning PAI & BP Kelas 10 SMA Terbaru 2025
PPTX
Rancangan Kegiatan Kokurikuler SMP N 1 Karanggede
PPTX
Slide PPT Metode Ilmiah Kelas 7 SMP.pptx
PPTX
Bahan Tayang OJT Pembelajaran Mendalam KS
DOCX
Modul Ajar Pembelajaran Mendalam Senbud Seni Teater Kelas XII Terbaru 2025
DOCX
Modul Ajar Deep Learning PAI & BP Kelas 11 SMA Terbaru 2025
PDF
883668952-KP-4-Modul-2-Kerangka-Pembelajaran-Mendalam.pdf
PDF
Materi Seminar AITalks: AI dan Konseling GPT
PPTX
PENGIMBASAN PEMBELAJARAN MENDALAM (DEEP LEARNING)
DOCX
CONTOH RANCANGAN MODUL PROYEK KOKURIKULER SMA 1.docx
KASUS_INKUIRI_KOLABORATIF_KELAS_BAWAH-ISI-ARNI.pdf
9ICP - Hubungan antara Pancasila dengan UUD 1945Bhinneka Tunggal Ika.pptx
Modul Ajar Deep Learning PJOK Kelas 10 SMA Terbaru 2025
Modul Ajar Deep Learning PKN Kelas 10 SMA Terbaru 2025
Teknologi-Pangan-Pertemuan-820728132309-.ppt
PPT IPS Geografi SMA Kelas X_Bab 1 Pengantar Geografi_May.pdf
Modul Ajar Pembelajaran Mendalam Senbud Seni Musik Kelas XII Terbaru 2025
PPT Resources Seminar AITalks: AI dan Konseling GPT
Materi Seminar AITalks AI dan Suku Digital
Modul Ajar Pembelajaran Mendalam Senbud Seni Teater Kelas 12 Terbaru 2025
Modul Ajar Deep Learning PAI & BP Kelas 10 SMA Terbaru 2025
Rancangan Kegiatan Kokurikuler SMP N 1 Karanggede
Slide PPT Metode Ilmiah Kelas 7 SMP.pptx
Bahan Tayang OJT Pembelajaran Mendalam KS
Modul Ajar Pembelajaran Mendalam Senbud Seni Teater Kelas XII Terbaru 2025
Modul Ajar Deep Learning PAI & BP Kelas 11 SMA Terbaru 2025
883668952-KP-4-Modul-2-Kerangka-Pembelajaran-Mendalam.pdf
Materi Seminar AITalks: AI dan Konseling GPT
PENGIMBASAN PEMBELAJARAN MENDALAM (DEEP LEARNING)
CONTOH RANCANGAN MODUL PROYEK KOKURIKULER SMA 1.docx

PPT Functional dan OOP Programming.pptx

  • 1. Functional & Object Oriented Programming @aliefma_ https://www.linkedin.com/in/alief-abdillah/ Kotlin Basic
  • 2. What is programming paradigm? Questions Before we started..
  • 3. ● Secara umum, paradigma pemrograman bisa diartikan sebagai sebuah pendekatan dalam memecahkan masalah dengan menggunakan bahasa pemrograman tertentu. ● suatu gaya, teknik, atau cara penulisan suatu program. Programming Paradigm Basic Programming Paradigm
  • 4. ● Structure Programming ● Functional Programming ● Object–Oriented Programming Overview Basic Programming Paradigm
  • 5. ● merupakan pemrograman yang berkomputasi dalam hal fungsi matematis. ● biasanya akan menghindari terjadinya perubahan data. ● banyak menggunakan method yang banyak ditemukan di matematika. Functional Programming Basic Programming Paradigm
  • 6. fun printHello() { println("Hello World") } In main functions: printHello() Functions Functional Programming
  • 7. fun printHello(name: String, age: Int){ return "Hello World, my $name, i’m $age old" } In main functions: printHello("Alief", 19) Parameter Function Functional Programming
  • 8. fun printHello(name: String, age: Int): String{ return "Hello World, my $name, i’m $age old" } In main functions: Val sayHello = printHello("Alief", 19) Returning Function Functional Programming
  • 9. fun printHello(): Unit { println("Hello World") } is equivalent to: fun printHello() { println("Hello World") } Returning Function Functional Programming
  • 10. ● Default Parameter ● Named arguments Functions Argument/parameter Functional Programming
  • 11. ● Parameter yang memiliki nilai awal/default fun mamalia(name: String = “kucing”) { println("$name adalah mamalia") } mamalia() => “kucing adalah mamalia” mamalia(“paus”) => “paus adalah mamalia” Default Parameter Functional Programming
  • 12. ●Arguments dapat dimasukan ke dalam function dengan memanggil nama argumen itu sendiri fun yourself(first: String, middle: String, last: String, age: Int) { println("Hi there!,i’m $first $middle $last, i’m $age years old") } yourself(first = “Alief”, middle = “Muhammad”, last = “Abdillah”, age = 19) Named Argument Functional Programming
  • 13. Jelaskan apa itu parameter/argument? Questions Before we Continue..
  • 14. ● Function di kotlin adalah first-class citizens, artinya dianggap seperti tipe data yang lainnya. ● Bisa disimpan di variable, array, bahkan bisa dikirim ke parameter function itu sendiri ● Lambda expression secara sederhana adalah function yang tidak memiliki nama ● Biasanya saat kita membuat function, kita akan selalu membuat menggunakan kata kunci fun dan mendeklarasikan nama function nya ● Dengan lambda expression, kita bisa membuat function tanpa harus mendeskripsikan function nya Lambda Functions Functional Programming
  • 15. ● deklarasi val lambdaName: (String) → String = { value: String -> value.toUpperCase()} ● Eksekusi val name = lambdaName(“alief”) (String) → String = Tipe data variabel value: String = Parameter value.topUpperCase() = Isi fungsi Lambda Functions Functional Programming
  • 16. fun toUpper(value: String): String = value.toUpperCase() ● Membuat Lambda Val lambdaName: (String) → String = ::toUpper ● Eksekusi val name = lambdaName(“alief”) Method References Functional Programming
  • 17. ●Higher-Order Function adalah function yang menggunakan function sebagai parameter atau mengembalikan function fun hello(value: String, transform: (String) -> String): String { return “Hello ${transform(value)}” } Main: val upperMethod = { value: String -> value.upperCase()} println(hello(“alief”, upperMethod)) Higher Order Functions Functional Programming
  • 18. inline fun repeat(times: Int, action: (Int) -> Unit) Main: repeat(3) { println("Hello") } Trailing Lambda Functional Programming
  • 21. Object-Oriented Programming Basic Programming Paradigm ●OOP ini kode yang kita program akan dibungkus kedalam class - class dan objek - objek, dan setiap objek memiliki method, dan atribut. ●bersifat reusable dapat digunakan kembali, sehingga dapat menghemat tempat penyimpanannya. ●sangat bagus jika menggunakannya dalam masalah besar, karena dalam OOP dapat memisahkan kode - kodenya dalam class yang fungsinya berbeda - beda.
  • 22. Class Object-Oriented Programming ●Kelas adalah cetak biru untuk objek ●Kelas menentukan method/functions yang beroperasi pada instance objek yang dibuat
  • 23. Class Object-Oriented Programming Class House Data (Property/Atribut) ●House color (String) ●Number of windows (Int) ●Is for sale (Boolean) Behavior (Method/Functions) ●updateColor() ●putOnSale()
  • 24. Membuat Class dan Instansiasi Object Object-Oriented Programming class House { var color: String = "white" val numberOfWindows: Int = 2 val isForSale: Boolean = false fun updateColor(newColor: String){ color = newColor } } fun main() { val myHouse = House() println(myHouse) }
  • 25. Properties Object-Oriented Programming ●Properties / Fields / Attributes adalah data yang bisa kita sisipkan di dalam Object ●Namun sebelum kita bisa memasukkan data di Properties, kita harus mendeklarasikan data apa aja yang dimiliki object tersebut di dalam deklarasi class- nya ●Membuat Properties sama seperti membuat variable, bisa val atau var ●Untuk mengakses properties, kita butuh kata kunci . (titik) setelah nama object dan diikuti nama properties nya ●Properties dapat diganti nilai datanya asalkan properties tersebut merupakan var
  • 26. Properties & Functions Object-Oriented Programming class Person { var firstname: String = "" var middleName: String? = null var lastName: String = "" fun showFullname(){ println("My Name is $firstname $middleName $lastName") } } fun main() { val mySelf = Person() mySelf.firstname = "Alief" mySelf.middleName = "Muhammad" mySelf.lastName = "Abdillah" mySelf.showFullname() }
  • 27. Nilai atau elemen-elemen data yang dimiliki objek dalam kelas objek dan merupakan ciri dari sebuah objek adalah… a.Class b.Object c.Properties/Atribut d.Function/Method Questions Before we continue..
  • 28. Constructor Object-Oriented Programming ●Di dalam class Kotlin, kita bisa membuat Constructors, Constructors mirip seperti function yang akan dipanggil saat pertama kali Object dibuat. ●Mirip seperti di Function, kita bisa memberi parameter pada Constructors ●Kotlin mendukung deklarasi properties langsung di constructor ●Ini sangat berguna untuk mempersingkat saat kita ingin membuat properties, dan mengisi datanya lewat constructor
  • 29. Constructor Object-Oriented Programming class Person(first: String, middle: String?, last: String) { var firstname: String = first var middleName: String? = middle var lastName: String = last } fun main() { val mySelf = Person("Alief", "Muhammad","Abdillah }
  • 30. Properties Constructor Object-Oriented Programming class Person(val first: String, val middle: String?, val last: String) fun main() { val mySelf = Person("Alief", "Muhammad","Abdillah") }
  • 31. Init Block Object-Oriented Programming ●Initializer Block adalah blok kode yang akan dieksekusi ketika constructor dipanggil ●Kita bisa memasukkan kode program di dalam initializer block
  • 32. Init Block Object-Oriented Programming class Animal(val name: String, val weight: Double, val age: Int){ init { this.weight = if(weight < 0) 0.1 else weight this.age = if(age < 0) 0 else age this.name = name } } fun main() { val animal = Animal("Cat",-2.0, 5) }
  • 33. Manakah program yang menyebabkan error saat dijalankan?Jelaskan alasannya! Questions Before we continue..
  • 34. Inheritance Object-Oriented Programming ●Inheritance atau pewarisan adalah kemampuan untuk menurunkan sebuah class ke class lain ●Dalam artian, kita bisa membuat class Parent dan class Child ●Di Kotlin, tiap class Child, hanya bisa punya satu class Parent, namun satu class Parent bisa punya banyak class Child ●Secara standar, di class yang dibuat di Kotlin adalah final (tidak bisa diwariskan), agar bisa diwariskan, kita harus menggunakan kata kunci “open”
  • 35. Inheritance Object-Oriented Programming ●Class Parent open class ParentClass { } ●Class Child class ChildClass : ParentClass { }
  • 36. Inheritance Object-Oriented Programming open class Animal(val name: String, val weight: Double, val isCarnivore: Boolean){ open fun eat(){ println("$name sedang makan!") } }
  • 37. Inheritance Object-Oriented Programming class Cat(pName: String, pWeight: Double, pIsCarnivore: Boolean, val furColor: String, val numberOfFeet: Int) : Animal(pName, pWeight, pIsCarnivore) { fun playWithHuman() { println("$name bermain bersama Manusia !") } override fun eat(){ println("$name sedang memakan ikan !") } } fun main(){ val myCat = Cat("Dicoding Miaw", 3.2, true, "Brown", 4) myCat.playWithHuman() myCat.eat() }
  • 38. Abstract Class Object-Oriented Programming ●Saat kita membuat class, kita bisa menjadikan sebuah class sebagai abstract ●Abstract class artinya, class tersebut tidak bisa dibuat sebagai object, hanya bisa diturunkan ●Properties dan Function yang ditandai dengan keyword abstract harus di turunkan ●Tetapi abstract class masih bisa memiliki properties dan function yang bersifat non-abstract
  • 39. Abstract Class Object-Oriented Programming abstract class Food { abstract val kcal : Int abstract val name : String fun consume() = println("I'm eating ${name}") } class Pizza() : Food() { override val kcal = 600 override val name = "Pizza" } fun main() { Pizza().consume() // "I'm eating Pizza" }
  • 40. Interface Object-Oriented Programming ●Interfaces merupakan suatu konsep sifat umum yang nantinya digunakan oleh suatu kelas agar dapat memiliki sifat tersebut. ●Interface hanya bisa diturunkan, dan biasanya Interface digunakan sebagai kontrak untuk class - class turunannya ●Interface sangat mirip dengan abstract class, namun tanpa sebuah properti deklarasi dan fungsi yang dideklarasikan tanpa isi. ●Kelas yang mengimplementasikan sebuah interface diharuskan melakukan override seluruh properti dan fungsi sekaligus mendefinisikan isi fungsi yang terdapat pada interfaces-nya.
  • 41. Interface Object-Oriented Programming interface IFly { fun fly() val numberOfWings: Int } class Bird(override val numberOfWings: Int) : IFly { override fun fly() { if(numberOfWings > 0) println("Flying with $numberOfWings wings") else println("I'm Flying without wings") } }
  • 42. Interface vs Abstract Object-Oriented Programming ●Interfaces digunakan ketika ada 2 atau lebih class yang tidak memiliki hubungan hirarki, tetapi class-class tersebut ingin memiliki method yang sama, ●Abstract class digunakan di dalam inheritance (pewarisan class) untuk 'memaksakan' implementasi method yang sama bagi seluruh class yang diturunkan dari abstract class.
  • 43. Data Class Object-Oriented Programming ●Kelas khusus yang ada hanya untuk menyimpan sekumpulan data ●Menghasilkan getter untuk setiap properti (dan juga setter untuk var) ●Data Class merupakan class yang secara otomatis akan membuatkan function equals, hashCode, toString dan copy dari semua properties yang terdapat di primary constructors yang dimiliki oleh data class
  • 44. Data Class Object-Oriented Programming ●Define the data class: data class Player(val name: String, val score: Int) ●Use the data class: val firstPlayer = Player("Lauren", 10) println(firstPlayer) => Player(name=Lauren, score=10)
  • 45. Object/Singleton Object-Oriented Programming ●Terkadang Anda hanya ingin satu instance dari suatu kelas yang pernah ada ●Diakses dengan NameOfObject.<fungsi atau variabel> object Calculator { fun add(n1: Int, n2: Int): Int { return n1 + n2 } } println(Calculator.add(2,4))
  • 46. Visibility Modifiers / Hak Akses Object-Oriented Programming ●Public: Hak akses yang cakupannya paling luas. Anggota yang diberi modifier ini dapat diakses dari manapun. ●Private: Hak akses yang cakupannya paling terbatas. Anggota yang menerapkannya hanya dapat diakses pada scope yang sama. ●Protected: Hak akses yang cakupannya terbatas pada hirarki kelas. Anggota hanya dapat diakses pada kelas turunannya atau kelas itu sendiri. ●Internal: Hak akses yang cakupannya terbatas pada satu modul. Anggota yang menggunakannya tidak dapat diakses diluar dari modulnya tersebut.
  • 48. Codelab Subtitle Practice what you’ve learned by completing the pathway: Lesson 2: Functions Lesson 3: Classes and objects