OOP Bagian 2 Inheritance, Encapsulation & Polymorphism
Kuasai tiga pilar OOP yang bikin kode Dart kamu lebih rapi, reusable, dan profesional — dengan analogi dunia nyata yang mudah dipahami.
⏱️
Estimasi Baca
12 Menit
📶
Level
Menengah
📅
Tahun
2026
🎓
Seri
Dart From Zero to Zorro
Pernah nggak kamu nulis kode yang sama berulang kali, dan dalam hati bilang "ini pasti ada cara yang lebih elegan"? Nah, itu tandanya kamu udah siap belajar inheritance, encapsulation, dan polymorphism — tiga senjata rahasia OOP di Dart yang akan mengubah cara kamu menulis kode selamanya. Kalau di artikel sebelumnya kita udah kenalan sama Class dan Object, sekarang kita naik level: kita bahas inheritance polymorphism Dart yang jadi pondasi aplikasi Flutter skala besar. Artikel ini dibuat untuk kamu yang udah paham Class dasar dan siap melangkah lebih jauh. Siap? Kita mulai! 🚀
🧬 Inheritance di Dart — Mewarisi Supaya Tidak Mengulang
Inheritance (pewarisan) adalah mekanisme di mana sebuah class bisa "mewarisi" properti dan method dari class lain. Bayangkan kamu punya resep masakan keluarga turun-temurun — anak bisa memakai resep dasar orang tua, lalu menambah bumbu sendiri tanpa harus menulis ulang seluruh resep dari nol.
Dalam Dart, class yang mewarisi disebut subclass (child class), dan class yang diwarisi disebut superclass (parent class). Kata kunci yang digunakan adalah extends.
📐 Formula Inheritance
classSubClassextendsSuperClass{ ... }
SubClass mewarisi semua properti & method non-private dari SuperClass.
📋 Langkah-Langkah Membuat Inheritance di Dart
1
Buat Superclass (Parent)
Definisikan class dasar dengan properti dan method yang akan diwarisi. Ini adalah "template umum".
2
Buat Subclass dengan extends
Gunakan kata kunci extends untuk mewarisi. Subclass otomatis punya semua yang dimiliki superclass.
3
Gunakan super untuk akses Parent
Kata kunci super digunakan untuk memanggil constructor atau method milik superclass.
4
Override Method jika Perlu
Subclass bisa menimpa (override) method dari superclass menggunakan anotasi @override.
inheritance_dart.dart
classHewan {
String nama;
int umur;
Hewan(this.nama, this.umur);
voidbernapas() {
print('$nama sedang bernapas...');
}
}
// 🐕 Anjing mewarisi HewanclassAnjingextendsHewan {
String ras;
Anjing(String nama, int umur, this.ras)
: super(nama, umur); // panggil constructor parentvoidmenggonggong() {
print('$nama ($ras): Woof! Woof!');
}
}
voidmain() {
var doggo = Anjing('Max', 3, 'Golden Retriever');
doggo.bernapas(); // ✅ diwarisi dari Hewan
doggo.menggonggong(); // ✅ milik Anjing sendiri
}
// Output:// Max sedang bernapas...// Max (Golden Retriever): Woof! Woof!
💡 Tips — Kapan Pakai Inheritance?
Gunakan inheritance kalau hubungan antara dua class bisa diungkapkan dengan kalimat "A adalah B". Contoh: Anjing adalah Hewan ✅. Tapi kalau relasinya lebih seperti "A memiliki B", gunakan composition, bukan inheritance.
🔐 Encapsulation — Lindungi Data, Kontrol Akses
Encapsulation adalah konsep menyembunyikan detail internal class dari dunia luar, dan hanya mengekspos apa yang perlu diekspos. Analoginya seperti mesin ATM — kamu bisa tarik uang, cek saldo, transfer — tapi kamu nggak bisa (dan nggak perlu) tahu gimana mesin ATM memproses semua itu di dalamnya.
Di Dart, encapsulation diterapkan dengan menambahkan underscore (_) di depan nama properti atau method untuk membuatnya menjadi private — hanya bisa diakses dari dalam file yang sama. Akses dari luar dikontrol lewat getter dan setter.
🔥 Fakta Menarik
Di Dart, private itu per-file (library), bukan per-class! Berbeda dengan Java atau C# yang private-nya per-class. Jadi kalau dua class ada dalam satu file .dart yang sama, mereka bisa akses properti private satu sama lain.
encapsulation_dart.dart
classRekeningBank {
String pemilik;
double _saldo; // 🔒 private!RekeningBank(this.pemilik, this._saldo);
// Getter — hanya bacadoubleget saldo => _saldo;
// Method terkontrol untuk ubah saldovoiddeposit(double jumlah) {
if (jumlah > 0) {
_saldo += jumlah;
print('Deposit Rp${jumlah} berhasil. Saldo: Rp${_saldo}');
} else {
print('❌ Jumlah deposit harus positif!');
}
}
voidtarik(double jumlah) {
if (jumlah <= _saldo) {
_saldo -= jumlah;
print('Tarik Rp${jumlah} berhasil. Sisa: Rp${_saldo}');
} else {
print('❌ Saldo tidak cukup!');
}
}
}
voidmain() {
var rekening = RekeningBank('Budi', 500000);
print(rekening.saldo); // ✅ OK via getter// rekening._saldo = 999999; // ❌ Error! Private
rekening.deposit(200000);
rekening.tarik(800000); // ❌ Saldo tidak cukup
}
⚠️ Perhatian
Jangan langsung buat semua properti private hanya karena terdengar "lebih aman". Terlalu banyak getter/setter justru membuat kode verbose. Pertimbangkan mana data yang benar-benar perlu dilindungi dari modifikasi langsung.
🎭 Polymorphism — Satu Interface, Banyak Bentuk
Polymorphism berasal dari bahasa Yunani: poly (banyak) + morphe (bentuk). Dalam dunia inheritance polymorphism Dart, konsep ini berarti satu method yang sama bisa berperilaku berbeda tergantung object yang menggunakannya.
Analogi: tombol "play" di YouTube dan Spotify melakukan hal yang berbeda, tapi keduanya tetap dinamakan tombol "play". Inilah inti dari polymorphism — antarmuka yang sama, implementasi yang berbeda.
Di Dart, polymorphism dicapai melalui method overriding (menimpa method dari superclass) dan interface/abstract class.
polymorphism_dart.dart
// Abstract class = kontrak yang harus dipenuhiabstract classBentuk {
doublehitungLuas(); // wajib diimplementasivoidinfo() {
print('Luas: ${hitungLuas()}');
}
}
classLingkaranextendsBentuk {
double radius;
Lingkaran(this.radius);
@overridedoublehitungLuas() => 3.14 * radius * radius;
}
classPersegiextendsBentuk {
double sisi;
Persegi(this.sisi);
@overridedoublehitungLuas() => sisi * sisi;
}
voidmain() {
// 🎭 Polymorphism: satu tipe, banyak bentukList<Bentuk> daftarBentuk = [
Lingkaran(7),
Persegi(5),
Lingkaran(3),
];
for (var b in daftarBentuk) {
b.info(); // method yang SAMA, hasil BEDA!
}
}
// Output:// Luas: 153.86// Luas: 25.0// Luas: 28.26
⚡ Insight Penting
Polymorphism membuat kode kamu sangat extensible. Mau tambah bentuk baru seperti Segitiga atau Trapesium? Cukup buat class baru yang extends Bentuk, dan loop di main() nggak perlu diubah sama sekali. Ini yang disebut Open/Closed Principle — terbuka untuk ekstensi, tertutup untuk modifikasi.
📊 Perbandingan: Inheritance vs Encapsulation vs Polymorphism
🔍 Analisis Mendalam — Kapan Menggunakan Masing-masing?
Konsep
Tujuan Utama
Kata Kunci Dart
Analogi
Inheritance
Reuse kode dari parent class
extends, super
📜 Resep turun-temurun
Encapsulation
Lindungi data internal
_nama, get, set
🏧 Mesin ATM
Polymorphism
Satu interface, banyak perilaku
@override, abstract
▶️ Tombol Play
Gabungan ketiganya
Arsitektur kode yang scalable
semua di atas
🏢 Sistem perbankan
🚀 Studi Kasus — Gabungkan Ketiganya dalam Proyek Nyata
Sekarang saatnya kita gabungkan inheritance polymorphism Dart bersama encapsulation dalam satu contoh yang realistis: sistem pembayaran sederhana. Ini persis pola yang akan kamu temui saat membangun aplikasi Flutter sungguhan.
Di Flutter, kamu akan sering melihat pola ini. Widget adalah abstract class, dan semua widget seperti Text, Container, Row adalah subclass-nya. Method build() adalah contoh polymorphism yang kamu override setiap hari!
🎯 Kesimpulan
Di artikel ke-7 seri Dart From Zero to Zorro ini, kita sudah menyelami tiga pilar OOP yang krusial:
Inheritance — mewarisi properti & method dengan extends, menghemat kode duplikat
Encapsulation — melindungi data internal dengan underscore (_), getter, dan setter
Polymorphism — satu interface, banyak implementasi via @override dan abstract class
Menguasai inheritance polymorphism Dart bukan sekadar hafalan teori — ini adalah pola pikir yang akan mengubah cara kamu merancang solusi. Setiap kali kamu membuka proyek Flutter, kamu akan melihat ketiga konsep ini bekerja bersama-sama di balik layar.
💬 Punya pertanyaan atau bingung di bagian mana? Tulis di kolom komentar! Dan kalau artikel ini bermanfaat, share ke teman-teman yang lagi belajar Dart — siapa tahu jadi pahala ilmu! 🙏
Artikel ini adalah bagian ke-7 dari seri lengkap belajar Dart dari nol hingga mahir. Mulai dari sintaks dasar sampai membangun aplikasi Flutter, semua ada di sini!
saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux
No comments:
Post a Comment