Dart adalah bahasa pemrograman berorientasi Object. Dart mendukung fitur pemrograman berorientasi Object seperti class, interface, dan sebagainya. Class dalam konsep OOP adalah sebuah cetak biru untuk membuat object. Class mengenkapsulasi data untuk object.
Mendeklarasikan sebuah Class
Gunakan kata kunci class untuk mendeklarasikan class dalam Dart. Definisi class dimulai dengan kata kunci class diikuti oleh nama class; dan badan class diapit oleh sepasang kurung kurawal. Cara penulisan deklarasi class diberikan dalam contoh di bawah ini.
Cara Penulisan
class namaClass {
(fields)
(getters/setters)
(constructors)
(functions)
}
Kata kunci class diikuti dengan nama class. Aturan untuk nama class harus dipertimbangkan saat memberi nama class.
Definisi class dapat mencakup hal-hal berikut :
- Fields − Field adalah variabel apa pun yang dideklarasikan dalam class. Field mewakili data yang berkaitan dengan Object.
- Setters and Getters − Memungkinkan program menginisialisasi dan mengambil nilai dari field class. Getter / setter default langsung terdefinisi untuk setiap field dalam class tersebut. Namun, getter / setter default dapat diganti dengan secara eksplisit.
- Constructors − bertanggung jawab untuk mengalokasikan memori untuk Object class.
- Functions − Fungsi atau method mewakili tindakan yang dapat dilakukan terhadap Object yang dibuat dari class tertentu.
Komponen-komponen di atas bersama-sama disebut sebagai anggota data class.
Contoh deklarasi sebuah class
class Mobil {
// field
String mesin = "E1001";
// function
void disp() {
print(mesin);
}
}
Contoh di atas mendeklarasikan sebuah class bernama Mobil. Class tersebut memiliki sebuah variabel field bernama mesin. Fungsi disp() adalah fungsi sederhana yang mencetak nilai dari variabel mesin.
Membuat Instance dari Class
Untuk membuat sebuah instance dari class, gunakan kata kunci “new” yang diikuti dengan nama class. Berikut adalah cara penulisannya.
Cara Penulisan
var namaObject = new namaKelas([ arguments ])
- Kata kunci “new” berfungsi untuk membuat sebuah Object.
- Bagian sebelah kanan dari ekspresi tersebut memanggil constructor dari suatu class. Jika constructor memiliki parameter, maka nilai-nilai tersebut harus diberikan pada saat dipanggil.
Contoh
var obj = new Mobil("Mesin 1")
Mengakses Fungsi Dan Field
Fungsi dan Field dari sebuah class dapat diakses melalui Object yang dibuat dari class tersebut. Gunakan notasi titik (disebut sebagai period) dengan menambahkan tanda titik pada nama Object diikuti dengan nama fungsi atau field yang ingin diakses.
//mengakses sebuah field
obj.namaField
//mengakses sebuah fungsi
obj.namaFungsi()
Contoh
Perhatikan contoh berikut ini untuk memahami cara mengakses field dan fungsi :
void main() {
Mobil c= new Mobil();
c.disp();
}
class Mobil {
// field
String mesin = "E1001";
// fungsi
void disp() {
print(mesin);
}
}
Output dari kode di atas adalah sebagai berikut :
E1001
Constructors
Constructor adalah fungsi khusus dari class yang bertanggung jawab untuk menginisialisasi variabel-variabel dari class tersebut pada saat suatu Object dibuat. Dart mendefinisikan sebuah constructor dengan nama yang sama dengan nama class. Sebuah constructor adalah sebuah fungsi dan dapat diberikan parameter. Namun, berbeda dengan sebuah fungsi, constructor tidak dapat memiliki nilai kembalian. Jika Anda tidak mendeklarasikan sebuah constructor, sebuah default constructor tanpa paramater akan otomatis disediakan untuk Anda.
Cara Penulisan
namaClass (daftar_parameter) {
// isi constructor
}
Contoh
Berikut ini menunjukkan bagaimana cara menggunakan constructor :
void main() {
Mobil c = new Mobil('E1001');
}
class Mobil {
Mobil(String mesin) {
print(mesin);
}
}
Output dari kode di atas adalah sebagai berikut :
E1001
Named Constructors
Dart menyediakan named constructor untuk memungkinkan sebuah class mempunyai beberapa constructor. Cara penulisan dari named constructor adalah seperti yang diberikan di bawah ini :
Cara Penulisan
namaKelas.namaConstructor(param_list)
Contoh
Berikut contoh menunjukkan cara menggunakan named constructor :
void main() {
Mobil c1 = new Mobil.namedConst('E1001');
Mobil c2 = new Mobil();
}
class Mobil {
Mobil() {
print("Constructor non-parameter dipanggil");
}
Mobil.namedConst(String mesin) {
print("Mesinnya adalah : ${mesin}");
}
}
Output dari kode di atas adalah sebagai berikut :
Mesinnya adalah : E1001
Constructor non-parameter dipanggil
Kata Kunci this
Kata kunci this merujuk pada instance Object saat ini dari suatu class. Berikut adalah contoh pemakaian kata kunci this.
Contoh
Berikut ini menjelaskan bagaimana menggunakan kata kunci this dalam Dart
void main() {
Mobil c1 = new Mobil('E1001');
}
class Mobil {
String mesin;
Mobil(String mesin) {
this.mesin = mesin;
print("Mesinnya adalah : ${mesin}");
}
}
Output dari kode di atas adalah sebagai berikut :
Mesinnya adalah : E1001
Getters dan Setters
Getters dan Setters, juga disebut sebagai accessors dan mutators, memungkinkan program untuk menginisialisasi dan mengambil nilai dari setiap field di dalam class. Getter atau accessor didefinisikan menggunakan kata kunci get. Setter atau mutator didefinisikan menggunakan kata kunci set.
Getter/setter default selalu ada otomatis untuk setiap kelas. Namun, getter/setter default dapat diganti dengan mendefinisikan setter/getter baru secara eksplisit. Getter tidak memiliki parameter dan mengembalikan nilai, dan setter memiliki satu parameter dan tidak mengembalikan nilai.
Cara Penulisan Getter
Return_type get namaField
{
}
Cara Penulisan Setter
set namaField
{
}
Contoh
Contoh berikut menunjukkan bagaimana Anda dapat menggunakan getter dan setter dalam class Dart
class Murid {
String nama = '';
int umur = 0;
String get namaMurid {
return nama;
}
void set namaMurid(String nama) {
this.nama = nama;
}
void set umurMurid(int umur) {
if(umur<= 0) {
print("Umur harus lebih besar dari 5");
} else {
this.umur = umur;
}
}
int get umurMurid {
return umur;
}
}
void main() {
Murid s1 = new Murid();
s1.namaMurid = 'Asep';
s1.umurMurid = 0;
print(s1.namaMurid);
print(s1.umurMurid);
}
Output dari kode di atas adalah sebagai berikut :
Umur harus lebih besar dari 5
Asep
0
Class Inheritance
Dart mendukung konsep pewarisan (inheritance) yang merupakan kemampuan dari suatu program untuk membuat class baru dari sebuah class yang sudah ada. Class yang diwariskan untuk membuat class baru disebut sebagai super class (class induk). Class yang baru dibuat disebut sebagai sub class (class anak).
Sebuah class mewarisi dari class lain menggunakan kata kunci extends. Class anak (sub class) mewarisi semua properti dan fungsi kecuali constructor dari class induk (super class).
Cara Penulisan
class namaSubClass extends namaSuperClass
Catatan – Dart tidak mendukung multiple inheritance.
Contoh
Pada contoh berikut, kita mendeklarasikan class Shape. Class ini diperluas oleh class Circle. Karena terdapat hubungan pewarisan antara kedua class tersebut, class anak, yaitu kelas Circle, secara implisit mendapatkan akses ke anggota data class induknya.
void main() {
var obj = new Circle();
obj.cal_area();
}
class Shape {
void cal_area() {
print("memanggil cal_area yang didefinisikan dalam class Shape");
}
}
class Circle extends Shape {}
Output dari kode di atas adalah sebagai berikut :
memanggil cal_area yang didefinisikan dalam class Shape
Jenis-Jenis Inheritance
Inheritance dapat dibagi menjadi tiga jenis berikut :
- Single − Setiap class hanya dapat mewarisi dari satu super class.
- Multiple − Sebuah class dapat mewarisi dari beberapa super class. Namun, Dart tidak mendukung multiple inheritance.
- Multi-level − Sebuah class dapat mewarisi dari sub class lainnya.
Contoh
Berikut ini adalah contoh bagaimana inheritance multi-level bekerja :
void main() {
var obj = new Daun();
obj.str = "Halo";
print(obj.str);
}
class Akar {
String str;
}
class Anak extends Akar {}
class Daun extends Anak {}
//Class Daun secara tidak langsung mewarisi dari class Anak dan Akar berdasarkan konsep multi-level inheritance
Class Daun mewarisi semua field dan fungsi dari class Anak dan Akar. Outputnya adalah sebagai berikut :
Halo
Method Overriding
Methon overriding adalah mekanisme di mana sub class mendefinisikan ulang fungsi atau method pada super class.
Contoh
void main() {
Anak c = new Anak();
c.m1(12);
}
class Induk {
void m1(int a){ print("value dari a ${a}");}
}
class Anak extends Induk {
@override
void m1(int b) {
print("value dari b ${b}");
}
}
Output dari kode di atas adalah sebagai berikut :
value dari b 12
Jumlah dan jenis parameter fungsi harus sama saat melakukan override pada suatu fungsi. Jika terjadi ketidakcocokan pada jumlah parameter atau tipe datanya, Dart compiler akan menampilkan pesan kesalahan pada unchecked mode.
import 'dart:io';
void main() {
Anak c = new Anak();
c.m1(12);
}
class Induk {
void m1(int a){ print("value dari a ${a}");}
}
class Anak extends Induk {
@override
void m1(String b) {
print("value dari b ${b}");
}
}
Output dari kode di atas adalah sebagai berikut, untuk unchecked mode, tapi akan menampilkan kesalahan pada checked mode :
value dari b 12
Kata Kunci Static
Kata kunci static dapat diterapkan pada anggota data dari sebuah class, yaitu field dan fungsi / method. Variabel static mempertahankan nilainya sampai program selesai dieksekusi.
Contoh
class StaticMem {
static int num;
static disp() {
print("Value dari num adalah ${StaticMem.num}") ;
}
}
void main() {
StaticMem.num = 12;
// membuat variable static
StaticMem.disp();
// memanggil method static
}
Output dari kode di atas adalah sebagai berikut
Value dari num adalah 12
Kata Kunci super
Kata kunci super digunakan untuk merujuk pada super class langsung dari sebuah sub class. Kata kunci super dapat digunakan untuk merujuk pada anggota super class yang berupa variable, properti, atau method.
Contoh
void main() {
Anak c = new Anak();
c.m1(12);
}
class Induk {
String pesan = "variabel pesan dari kelas induk";
void m1(int a){ print("value dari a ${a}");}
}
class Anak extends Induk {
@override
void m1(int b) {
print("value dari b ${b}");
super.m1(13);
print("${super.pesan}") ;
}
}
Output dari kode di atas adalah sebagai berikut :
value dari b 12
value dari a 13
variabel pesan dari kelas induk
Tutorial sebelumnya : Dart Interface
Tutorial setelahnya : Dart OOP
Semua Tutorial Dart : Tutorial Dart