Dart - 11. Inheritance & Abstract Class

Pewarisan (Inheritance)

Konsep pewarisan dalam pemrograman mirip dengan dunia nyata, dimana seseorang akan memiliki apapun yang diwariskan kepadanya, dalam pemrograman kita dapat melakukan pewarisan suatu kelas ke kelas lainnya, dengan demikian kita dapat mengembangkan kode dengan tujuan berbeda dari kelas yang sama, misalnya sebuah Pulpen adalah peralatan menulis,akan tetapi peralatan menulis tidak hanya pulpen, bisa saja pencil, spidol, dsb. Kelas awal biasanya disebut superclass dan kelas yang mendapat warisan disebut subclass, pewarisan pada pemrograman dart menggunakan keyword "extends". Perhatikan contoh berikut:

class PeralatanMenulis {
  int isi = 100;
  String warna = "hitam";
  
  void tulis(String text) {
    if(isi <= 0) {
      return;
    }
    
    print(text);
    isi--;
  }
}

Pada contoh tersebut kita membuat sebuah kelas PeralatanMenulis, dimana secara umum attribut dan metode dari kelas ini dimiliki semua alat tulis sperti pulpen, pencil, spidol dll, kemudian kita akan membuat sebuah kelas Pesil dengan melakukan pewarisan dari kelas PeralatanMenulis. perhatikan contoh berikut:

class Pensil extends PeralatanMenulis {
  int penghapus = 100;
  
  void hapus(String text) {
    if(penghapus <=0) {
      return;
    }
    
    print("Hapus $text");
    penghapus--;
  }
}

Jika kita melihat kelas Pensil, maka kelas tersebut hanya memiliki attribut penghapus dan metode hapus, akan tetapi kelas Pensil tersebut mendapat attribut warisan dari kelas PeralatanMenulis berupa isi, warna dan metode tulis, dengan demikian kita dapat menggunakan attribut dan metode tersebut pada kelas Pensil.

void main() {
  Pensil p1 = Pensil();
  p1.warna = "biru"; // atribut dari superclass
  p1.tulis('hello'); // atribut dari superclass
  print(p1.warna);
  print(p1.isi);
  
  p1.hapus("hello');
  print(p1.penghapus);
}

Berikut adalah diagram dari pewarisan tersebut:


Hal yang perlu diketahui adalah dasar awal dari semua kelas pada pemrograman dart adalah Object, lihat di https://api.dartlang.org/stable/2.4.0/dart-core/Object-class.html

Kelas Abstrak

Sebuah kelas abstrak adalah kelas yang tidak dapat dibuat objeknya (di instans), tujuan dari kelas abstrak adalah sebagai superclass (kelas awal) untuk kelas lainnya, misalnya jika A adalah kelas abstrak dan B mewarisinya maka kita tidak bisa menciptakan objek dari kelas A " A a = A() ", tetapi kita tetap bisa membuat objek kelas B (karena bukan kelas abstrak, hanya mewarisi attribut dan metode dari kelas abstrak) yaitu "B b = B()", untuk membuat sebuah kelas mejadi kelas abstrak digunakan keyword abstract.

abstract class Dasar {...}

Tidak seperti kelas pada umumnya, kelas abstrak tidak perlu menulis detail dari metodenya, cukup hanya nama metodenya saja, nantinya subclass dari kelas abstraklah yang akan membuat sendiri-sendiri detail implementasi dari metode tersebut. perhatikan contoh berikut:

abstract class BangunDatar {
  void info();
  double luas();
}

Perhatikan bahwa metode dari info dan luas tidak memiliki implementasi detail, nantinya detail implementasi dari metode ini akan dibuat pada subclassnya masing-masing. perhatikan contoh berikut:

class Segitiga extends BangunDatar {
  int alas;
  int tinggi;
  
  Segitiga(this.alas, this.tinggi);
  
  void info() {
    print("Segitiga");
  }
  
  double luas() {
    return (alas*tinggi)/2;
  }
}


class PersegiPanjang extends BangunDatar {
  int panjang;
  int lebar;
  
  PersegiPanjang(this.panjang, this.lebar);
  
  void info() {
    print("Persegi Panjang");
  }
  
  double luas() {
    return (panjang*lebar).toDouble(); // casting dari integer ke double
  }
}


void main() {
   Segitiga s3 = Segitiga(2,5);
   s3.info();
   print(s3.luas());
   
   PersegiPanjang pp = PersegiPanjang(5,2);
   pp.info();
   print(pp.luas());
}

Berikut adalah diagram pewarisannya:



Jika kita perhatikan, subclass dari BangunDatar wajib mengimplementasi metode info dan luas, jika tidak akan terjadi error (kesalahan), perhatikan contoh berikut:

class Persegi extends BangunDatar {
  int sisi;
  
  Persegi(this.sisi);
  
  void cetakLuas() {
    print(sisi*sisi);
  }
}

Pada contoh tersebut, jika program kita eksekusi akan menghasilkan error sebagai berikut:

abstrak.dart:37:7: Error: The non-abstract class 'Persegi' is missing implementations for these members:
 - BangunDatar.info
 - BangunDatar.luas
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class Persegi extends BangunDatar {
      ^^^^^^^
abstrak.dart:2:8: Context: 'BangunDatar.info' is defined here.
  void info();
       ^^^^
abstrak.dart:3:10: Context: 'BangunDatar.luas' is defined here.
  double luas();
         ^^^^

Dart - 11. Inheritance & Abstract Class Dart - 11. Inheritance & Abstract Class Reviewed by jc on July 03, 2019 Rating: 5

No comments:

Powered by Blogger.