Dart
OOP
Object Oriented Programming
Class
• Class adalah prototype atau cetakan
untuk membuat Object
• Class berisikan deklarasi semua
properties dan functions yang dimiliki
oleh Object
• Setiap Object selalu dibuat dari Class
• Sebuah Class bisa membuat Object
tanpa batas
Object
• Object adalah hasil instansiasi dari
sebuah Class
• Untuk membuat Object kita bisa
menggunakan nama Class lalu diikuti
dengan kurung ()
Field
• Field/Propertied/Attributes adalah data yang
bisa kita sisipkan di dalam Object
• Sebelum memasukkan data di field, kita
harus mendeklarasikan data apa saja yang di
miliki Object tersebut di dalam deklarasi
Class-nya
• Memmbuat field sama seperti membuat
variable, namun ditempatkan di block Class
• Field wajib dimasukkan nilainya, kecuali field
yang nullable
Manipulasi field
• Field yang ada di Object, bisa kita
manipulasi. Tergantung final atau
bukan
• Jika final, kita tidak bisa merubah
data fieldnya. Namun jika tidak,
kita bisa merubah data fieldnya
• Untuk memanipulasi data field,
sama seperti cara pada variable
• Untuk mengakses field, kita butuh
kata kunci .(titik) setelah nama
Object dan diiluti nama fieldnya
Method
• Method adalah function yang
terdapat di dalam Class
• Sama seperti function biasanya, kita
juga bisa menambahkan return
value, parameter didalam method
yang ada didalam block Class
• Untuk mengakses method tersebut,
kita bisa menggunakan tanda .(titik)
dan diikuti dengan nama methodnya
Method
Expression
Body
• Saat membuat method hanya
menggunakan satu baris kode,
kita bisa gunakan expression
body
• Expression body mirip seperti
ketika membuat anonymous
function
Extension
Method
• Extension method adalah cara
menambahkan method
terhadap Class yang sudah ada,
tanpa harus mengubah Class
tersebut
• Hal ini kadang bermanfaat jika
misal Class-nya adalah milik
library orang lain
Constructor
• Constructor adalah method yang akan dipanggil
saat pertama kali Object di buat
• Kita bisa memberi parameter di constructor
• Nama Constructor harus sama dengan nama
Class, dan tidak membutuhkan kata kunci void
return value
• Ketika kita menambahkan Constructor di pada
Class, maka saat membuat Object baru, kita
wajib mengikuti parameter yang ada di
Constructor
This Keyword
• Saat kita membuat kode di dalam
block Constructor atau method
didalam Class, kita bisa menggunakan
kata kunci this untuk mengakses
Object saat ini
• This juga bisa digunakan untuk
mengakses field dan method milik
Object saat ini
• This juga bisa digunakan untuk
mengatasi masalah variable
shadowing
Initializing Formal
Parameter
• Kadang saat membuat Constructor, biasanya
kita membuat parameter yang hanya digunakan
untuk mengubah nilai yang ada di field
• Kita bisa menggunakan fitur Formal Parameter,
dimana pada parameter kita bisa langsung
sebutkan field mana yang akan diubah
• Formal Parameter hanya bisa digunakan di
Constructor, tidak bisa di gunakan di method
• Kita cukup ubah parameternya dengan
menggunakan this.namaFieldnya, tanpa perlu
menggunakan tipe data
Named Constructor
• Constructor hanya bisa di buat satu saja,
kita tidak bisa membuat beberapa
dengan nama yang sama
• Namun terdapat fitur Named
Constructor, yaitu Constructor dengan
nama yang berbeda
• UNtuk membuatnya kita bisa
menggunakan nama
Class.namaConstructor nya
• Named Constructor bisa lebih dari satu
Redirecting
Constructor
• Saat membuat Named Constructor, kita
bisa memanggil Default Constructor atau
melakukan Redirecting Constructor
• Cara membuat Redirecting Constructor
adalah dengan menambahkan : (titik
dua), lalu diikuti dengan memanggil
this.(parameter), dimana this() disini
dianggap mengakses Default Constructor
• Saat membuat Redirecting Constructor,
kita tidak bisa menambahkan body pada
Redirecting Constructor
Initializer List
• Initializer List merupakan
tempat dimana kita bisa
mengubah field pada Object,
sebelum block body Constructor
• Hal ini menjadi lebih mudah
dibanding mengubah field di
dalam block Constructor
Constant
Constructor
• Saat kita membuat Class yang
tidak pernah berubah datanya
(immutable data), ada baiknya
kita buat Constructor nya dalam
bentuk Constant
• Untuk membuat Constant
Constructor kita bisa gunakan
kata kunci const
• Keuntungan saat menggunakan
Constant Constuctor adalah ketika
kita membuat constant Object
secara otomatis Object yang sama
akan digunakan
Factory
Constructor
• Factory Constructor adalah sebuah
fitur dimana kita bisa membuat
Constructor untuk membuat Object
baru , namun logika cara pembuatan
barunya bisa kita sesuaikan dengan
yang kita inginkan
• Misal kita ingin mengembalikan
Object yang sama berkali-kali, kita
bisa menggunakan Factory
Constructor
• Untuk membuat Factory Constructor
kita bisa menggunakan kata kunci
factory sebelum pembuatan
Constructor nya
Cascade Notation
• Cascade Notation merupakan operator yang bisa
kita gunakan untuk memberikan beberapa
operasi pada Object yang sama
• Ada dua jenis Cascade Notation, yaitu ..(titik titik)
dan ?..(tanda tanya titik titik)
• .. digunakan untuk object yang tidak nullable ,
sedangkan ?.. digunakan untuk Object yang
nullable
Inheritance
• Inheritance atau pewarisan adalah kemampuan untuk
menurunkan sebuah Class ke Class lain , dalam artian kita
bisa membuat Parent dan Child class
• Class Child , hanya bisa punya satu class Parent , namun
satu clas Parent bisa punya banyak class Child
• Saat sebuah Class diturunkan, maka semua field dan
method yang ada di class Parent, secara otomatis akan
dimiliki oleh class Child
• Untuk melakukan pewarisan di class Child kita harus
menggunakan kata kunci extends lalu diikuti denga nama
class Parent nya
Super Keyword
• Kadang kita ingin mengakses method yang
terdapat di class parent yang sudah terlanjur
kita override di class child
• Untuk mengakses method milik class parent, kita
bisa menggunakan kata kunci super
• Sederhananya , super digunakan untuk
mengakses class parent
• Tidak hanya method, field milik parent class pun
bisa kita akses menggunakan kata kunci super
Super Constructor
• Tidak hanya untuk mengakses method atau field
yang ada di parent class, kata kunci super juga
bisa gunakan untuk mengakses constructor
• Namun syaratnya untuk mengakses parent class
constructor , kita harus mengaksesnya di dalam
class child constructor
• Memanggil super constructor hanya bisa
dilakukan dalam bentuk Redirecting Constructor
Polymorphism
• Polymorphism adalah kemampuan sebuah object
berubah bentuk menjadi bentuk lain
• Polymorphism erat hubungannya dengan
Inheritance
Type Check & Cast
• Saat menggunakan polimorfisme, kadang kita
ingin melakukan konversi tipe data ke tipe data
aslinya
• Namun agar aman, sebelum melakukan konversi,
pastikan kita melakukan type check(pengecekan
tipe data) dengan menggunakan kata kunci is
• Hasil operator is adalah boolean, true jika tipe
data sesuai, false jika tidak sesuai
• Import adalah kemampuan untuk menggunakan class,
function atau variable yang berada di file yang berbeda
Import • Import sangat cocok digunakan ketika kode program
kita sudah banyak dan ditempatkan di banyak file
Abstract Class
• Saat kita membuat class, kita bisa menjadikan
sebuah class sebagai abstract class
• Abstract class artinya, class tersebut tidak bisa
dibuat sebagai object secara langsung, hanya bisa
diturunkan
• Untuk membuat sebuah class menjadi abstract,
kita bisa menggunakan kata kunci abstract
sebelum kata kunci class
• Dengan demikian abstract class bisa kita gunakan
sebagai kontrak untuk class child
Abstract Method
• Saat kita membuat class, kita bisa membuat
abstract method juga di dalam class tersebut
• Saat kita membuat sebuah abstract method, kita
tidak bisa menambahkan block method untuk
method tersebut
• Artinya abstract method wajib di override di class
child
Access Modifier
• Secara default, saat kita membuat field atau
method dalam sebuah class, maka semua field
dan method tersebut bisa di akses oleh siapa
saja
• Kadang-kadang kita ingin menyembunyikan field
atau method
• Untuk menyembunyikan akses field atau
method, kita bisa menggunakan _(underscore)
diawal field atau method nya
• Secara otomatis field atau method tersebut
hanya bisa di akses dari file tersebut dan artinya
tidak bisa diakses dari luar file
Getter dan Setter
• Getter adalah function yang dibuat untuk
mengambil data field
• Setter adalah function untuk mengubah data
field
• Untuk Getter, kita bisa menggunakan kata kunci
get
• Untuk Setter, kita menggunakan kata kunci set
Mixin
• Mixin merupakan reusable code yang bisa digunakan di
class lain tanpa harus terkendala dengan pewarisan
• Dengan Mixin, kita bisa membuat kode yang sama pada
beberapa class dan bisa menambahkan lebih dari satu
mixin, sama seperti interface
• Untuk membuat mixin, kita bisa menggunakan kata kunci
mixin
• Untuk menggunakan mixin, kita bisa menggunakan kata
kunci with diikuti dengan Mixin nya
Membatasi Mixin
• Secara default, semua class bisa menggunakan mixin
• Namun jika kita ingin membatasi hanya class turunan
tertentu, kita bisa tambahkan kata kunci on, diikuti
dengan class yang kita batasi pada Mixin nya
ToString Method
• Method toString() merupakan method untuk
representasi String dari Object
• Contohnya, saat kita menggunakan function
print(object) , sebenarnya yang kita panggil adalah
print(object.toString())
• Kita bisa meng-override method toString() jika ingin
mengimplementasikan representasi data String dari
class yang kita buat
Equals Operator
• Untuk membandingkan dua buah object apakah
sama atau tidak, bisanya kita menggunakan operator
==
• Secara default operator == adalah milik class Object,
implementasinya jika kita menggunakan operator ==
milik class object adalah melakukan pengecekan
kesamaan object dari lokasi di memory
• Kadang-kadang kita ingin mengimplementasikan
logika untuk membandingkan object
• Untuk hal ini, kita bisa melakukan operator == yang
ada di class object
HashCode Getter
• HashCode Getter adalah representasi integer object kita, mirip
seperti toString yang merupakan representasi String
• HashCode sangat bermanfaat untuk membuat struktur data unique
seperti hashMap, HashSet dll, karena cukup menggunakan
hashCode method untuk mendapatkan identitas unique object kita
• Secara default hashCode akan mengembalikan nilai integer sesuai
data di memory, namun kita meng-override nya jika kita ingin
• Sebanyak apapun hashCode dipanggil, untuk object yang sama,
harus menghasilkan data integer yang sama
• Jika ada 2 object yang sama jika dibandingkan menggunakan
method equals, maka nilai hashCode nya juga harus sama
No Such Method
• NoSuchMethod merupakan sebuah
method yang terdapat di class object
yang bisa override untuk mendeteksi
atau bereaksi ketika sebuah method
yang tidak ada di panggil
• NoSuchMethod hanya bisa digunakan
ketika tipe objectnya adalah dynamic
atau sebuah abstract class
NoSuchMethod untuk
Abstract Class
• Salah satu penggunaan NoSuchMethod
yang biasanya digunakan adalah
sebagai implementasi Abstract Class
• Dengan menggunakan NoSuchMethod,
kita tidak perlu mengimplementasikan
method yang terdapat di abstract class
lagi
Typedef
• Typedef merupakan fitur dimana kita bisa
membuat alias untuk tipe data lainnya
• Ini cocok ketika misal terdapat class dengan
nama yang sama, sehingga kita bisa
menggunakan alias untuk nama lain atau
mempersingkat nama class yang panjang dengan
alias
Static
• Static merupakan sebuah kata kunci yang digunakan untuk
membuat field dan method yang bisa diakses tanpa harus
membuat object nya
• Field atau method static bisa diakses oleh method yang
tidak static, namun field atau method static tidak bisa
mengakses field atau method yang tidak static
• Biasanya static digunakan untuk membuat utility
• Untuk menggunakan static field atau method, kita bisa
langsung menggunakan nama class diikuti denga titik dan
static field atau method nya
Enum
• Enum merupakan fitur untuk membuat
tipe data yang sudah jelas nilainya
• Untuk membuat Enum kita bisa
menggunakan kata kunci enum
Exception
• Saat kita membuat aplikasi, kita tidak
akan terhindar dengan yang namanya
error
• Error dipresentasikan dengan istilah
exception, dan semua dipresentasikan
dalam bentuk class
• Kita bisa menggunakan exception
sendiri atau menggunakan yang sudah
disediakan
• Untuk membuat sebuah exception,
kita bisa menggunakan kata kunci
throw, diikuti dengan object exception
nya
Membuat Class
Exception
• Saat menggunakan class Exception yang
sudah tersedia, kita juga bisa membuat
class Exception sendiri
• Tidak ada kontrak dalam pembuatan class
exception, kita bisa membuat class biasa
• Namun sangat direkomendasikan jika
membuat class exception baru, kita
melakukan implements ke class Exception
Try Catch
• Saat kita memanggil sebuah method
yang bisa menyebabkan exception,
maka secara otomatis progam akan
terhenti
• Jika kita tidak ingin program berhenti,
kita perlu menangkap exception
tersebut dan melakukan sesuatu
ketika terjadi exception
• Untuk menangkap exception, kita bisa
menggunakan try-catch
Finally
• Dalam try-catch, kita bisa
menambahkan block finally
• Block finally adalah block dimana akan
selalu dieksekusi baik terjadi ecxeption
ataupun tidak
• Ini sangat cocok ketika ingin
melakukan sesuatu, tidak peduli
sukses ataupun gagal
Stack Trace
• Saat kita menangkap exception, object
exception tidak memiliki informasi
posisi atau lokasi terjadinya error
• Jika kita ingin mengetahui posisi atau
lokasi terjadinya error, kita bisa
menambahkan parameter kedua pada
catch
• Secara otomatis parameter kedua
tersebut adalah sebuah object
StackTrace
• Metadata merupakan fitur yang digunakan untuk menambah informasi
tambahan pada kode program yang kita buat
Metadata • Untuk menambahkan informasi tambahan ke dalam program kita, kita
bisa menggunakan Annotation yang dimulai dengan karakter @ lalu
diikuti dengan constant atau memanggil constant constructor
ANNOTATION KETERANG AN
Menandai bahwa kode tersebut
@Deprecated sudah tidak direkomendasikan
digunakan
Menandakan bahwa field atau
@override method tersebut merupakan
overriding dari parent nya
Membuat Annotation
• Memmbuat Annotation sangat
mudah, kita bisa membuat constant
atau bisa membuat class dengan
menggunakan Constant Constructor