Skip to main content

Inheritance Dalam OOP Javascript (Parent Class & Child Class)

Dalam gambaran dunia nyata, banyak objek yang berbeda tetapi punya kesamaan atau kemiripan tertentu. 

Contohnya mobil dengan motor memiliki banyak kesamaan karena objek tersebut merupakan kendaraan. Mobil merupakan kendaraan darat begitu juga dengan motor. Mungkin yang membedakan objek tersebut adalah jumlah roda dan kapasitas penumpang yang dapat ditampung. 
Sama halnya pada OOP, beberapa objek yang berbeda bisa saja memiliki kesamaan dalam hal tertentu. Di situlah konsep inheritance atau pewarisan harus diterapkan. Pewarisan dapat mencegah kita melakukan perulangan kode. Untuk lebih memahaminya lihatlah contoh bagan pada sebuah kelas berikut:
2020031216412445298e8b960399d06bf16eab880badd8.png
Pada bagan di atas kita dapat lihat class CarMotorcyclePlane, dan Helicopter memiliki banyak properti yang sama seperti lisencePlatemanufacture, dan engineActive. Kemudian memiliki beberapa method yang sama seperti startEngines()info(), dan parking().
Jika kita ubah diagram class Car di atas menjadi sebuah kode maka kode tampak seperti ini:

  1. class Car {

  2.     constructor(licensePlate, manufacture, wheels) {

  3.         this.licensePlate = licensePlate;

  4.         this.manufacture = manufacture;

  5.         this.wheels = wheels;

  6.         this.engineActive = false;

  7.     }

  8.     

  9.     startEngines() {

  10.         console.log(`Mesin kendaraan ${this.licensePlate} dinyalakan!`);

  11.     }

  12.     

  13.     info() {

  14.         console.log(`Nomor Kendaraan: ${this.licensePlate}`);

  15.         console.log(`Manufacture: ${this.manufacture}`);

  16.         console.log(`Mesin: ${this.engineActive ? "Active": "Inactive"}`);

  17.     }

  18.     

  19.     droveOff() {

  20.         console.log(`Kendaraan ${this.licensePlate} melaju!`)

  21.     }

  22.     

  23.     openDoor() {

  24.         console.log(`Membuka pintu!`)

  25.     }

  26.     

  27.     parking() {

  28.         console.log(`Kendaraan ${this.licensePlate} parkir!`);

  29.     }

  30. }


Tidak ada masalah dengan kode tersebut, tetapi jika kita akan membuat kelas lainnya seperti MotorcyclePlane, dan Helicopter maka kita harus menuliskan properti dan method yang sama secara berulang. 
Dengan teknik inheritance, kita bisa mengelompokkan properti dan method yang sama. Caranya dengan membuat sebuah kelas baru yang nantinya akan diturunkan sifatnya pada class lain:
2020031216453692b650a5c0e0b6c77a74227d408e5757.png
Ketika class Vehicle telah dibuat, kelas lainnya dapat melakukan extends pada kelas tersebut untuk mewarisi sifatnya. Dalam pewarisan, class Vehicle dapat disebut sebagai super atau parent class. Kelas yang mewarisi sifat dari parent class disebut dengan child class.
Pada JavaScript jika kita ingin mewariskan sifat class, lakukan dengan keyword extends seperti berikut:

  1. class ChildClass extends ParentClass {

  2.     

  3. }


Sebagai contoh mari kita buat class Vehicle yang nantinya akan kita gunakan sebagai parent class.

  1. class Vehicle {

  2.     constructor(licensePlate, manufacture) {

  3.         this.licensePlate = licensePlate;

  4.         this.manufacture = manufacture;

  5.         this.engineActive = false;

  6.     }

  7.     

  8.     startEngines() {

  9.         console.log(`Mesin kendaraan ${this.licensePlate} dinyalakan!`);

  10.     }

  11.     

  12.     info() {

  13.         console.log(`Nomor Kendaraan: ${this.licensePlate}`);

  14.         console.log(`Manufacture: ${this.manufacture}`);

  15.         console.log(`Mesin: ${this.engineActive ? "Active": "Inactive"}`);

  16.     }

  17.     

  18.     parking() {

  19.         console.log(`Kendaraan ${this.licensePlate} parkir!`);

  20.     }

  21. }


Kemudian kita bisa membuat class Car sebagai child class dari Vehicle.

  1. class Car extends Vehicle {

  2.    constructor(licensePlate, manufacture, wheels) {

  3.        super(licensePlate, manufacture);

  4.        this.wheels = wheels;

  5.    }

  6.  

  7.    droveOff() {

  8.      console.log(`Kendaraan ${this.licensePlate} melaju!`);

  9.    }

  10.  

  11.    openDoor() {

  12.      console.log(`Membuka pintu!`);

  13.    }

  14. }


Dengan begitu selain properti dan method yang terdapat di dalamnya, class Car juga dapat mengakses seluruh properti dan method yang terdapat pada class Vehicle.

  1. class Vehicle {

  2.    constructor(licensePlate, manufacture) {

  3.        this.licensePlate = licensePlate;

  4.        this.manufacture = manufacture;

  5.        this.engineActive = false;

  6.    }

  7.   

  8.    startEngines() {

  9.        console.log(`Mesin kendaraan ${this.licensePlate} dinyalakan!`);

  10.    }

  11.   

  12.    info() {

  13.        console.log(`Nomor Kendaraan: ${this.licensePlate}`);

  14.        console.log(`Manufacture: ${this.manufacture}`);

  15.        console.log(`Mesin: ${this.engineActive ? "Active": "Inactive"}`);

  16.    }

  17.   

  18.    parking() {

  19.        console.log(`Kendaraan ${this.licensePlate} parkir!`);

  20.    }

  21. }

  22.  

  23. class Car extends Vehicle {

  24.    constructor(licensePlate, manufacture, wheels) {

  25.        super(licensePlate, manufacture);

  26.        this.wheels = wheels;

  27.    }

  28.  

  29.    droveOff() {

  30.      console.log(`Kendaraan ${this.licensePlate} melaju!`);

  31.    }

  32.  

  33.    openDoor() {

  34.      console.log(`Membuka pintu!`);

  35.    }

  36. }

  37.  

  38. const car = new Car("H121S", "Honda", 4);

  39. car.startEngines();

  40.  

  41. /* output:

  42. Mesin kendaraan H121S dinyalakan!

  43. */


Oiya pada constructor class Car, kita melihat penggunaan super(), apa itu maksudnya? Keyword super digunakan untuk mengakses properti dan method yang ada pada induk class ketika berada pada child class. Jadi super(lisencePlate, manufacture) di atas berarti kita mengakses constructor dari parent class dan mengirimkan lisencePlate, dan manufacture sebagai data yang dibutuhkan olehnya agar objek (instanceCar berhasil dibuat.
Penggunaan super sangat berguna ketika kita hendak menjalankan method overriding pada method parent. Contohnya kita akan melakukan method overriding pada method info() dengan menambahkan informasi jumlah roda pada mobil, maka kita dapat melakukannya dengan seperti ini:

  1. class Car extends Vehicle {

  2.    constructor(licensePlate, manufacture, wheels) {

  3.        super(licensePlate, manufacture);

  4.        this.wheels = wheels;

  5.    }

  6.  

  7.    droveOff() {

  8.      console.log(`Kendaraan ${this.licensePlate} melaju!`);

  9.    }

  10.  

  11.    openDoor() {

  12.      console.log(`Membuka pintu!`);

  13.    }

  14.  

  15.    /* overriding method info dari parent class */

  16.    info() {

  17.      super.info();

  18.      console.log(`Jumlah roda: ${this.wheels}`);

  19.    }

  20. }

  21.  

  22. const johnCar = new Car("H121S", "Honda", 4);

  23. johnCar.info();

  24.  

  25. /* output:

  26. Nomor Kendaraan: H121S

  27. Manufacture: Honda

  28. Mesin: Inactive

  29. Jumlah roda: 4

  30. */


Dalam melakukan pewarisan kelas, tidak ada tingkatan yang membatasinya. Maksudnya, kita dapat mewariskan sifat kelas A pada kelas B, lalu kelas B mewarisi sifatnya kembali pada kelas C dan selanjutnya. Sama halnya dengan Nenek kita mewarisi sifatnya kepada orang tua kita kemudian orang tua kita mewarisi sifatnya kepada kita. 
Sehingga jika dilihat dari bagan sebelumnya, class tersebut masih bisa dikelompokkan kembali menjadi seperti ini:
20200312165044bad7c7034d9d728224594a2fde9a7693.png

Comments

Popular posts from this blog

Contoh Menggunakan API Dan Fetch di dalam Web Sederhana

Apakah Anda sudah berhasil menerapkan Fetch dalam menampilkan data dari API TheSportDB? Jika belum, yuk kita lakukan bersama-sama! Pada dokumentasi API menyebutkan bahwa, untuk mendapatkan daftar klub olahraga kita dapat menggunakan target url:  https://www.thesportsdb.com/api/v1/json/1/searchteams.php?t=Arsenal Sebelum menuliskan langsung pada proyek dengan fetch, biasakan ketika hendak mengkonsumsi API biasakan untuk mencobanya menggunakan aplikasi Postman terlebih dahulu. Jika target url tersebut diakses melalui Postman dengan GET Request, maka akan menghasilkan response dengan struktur JSON yang tampak pada  tab Body . Pada response JSON yang dihasilkan menampung satu  key  dengan nama  teams  yang memiliki  value  berupa sebuah array. Di dalam array tersebut menampilkan banyak data terkait klub olahraga yang memiliki nama Arsenal. Kita dapat memanfaatkan key  strTeam  untuk mendapatkan nama klub,  strTeamBadge  untuk mendapatkan logo klub, dan  strDescriptionEN  untuk mendapatkan

Contoh Penggunaan Default Parameters Di Javascript

Dengan menggunakan default parameters, nilai pada parameter tidak akan menghasilkan  undefined  walaupun kita tidak memberikan nilai ketika fungsi tersebut dipanggil. Default parameter dapat digunakan pada regular function ataupun arrow function. Berikut contoh dari penggunaan default parameter: Regular Function function sayHello ( name = "Stranger" , greet = "Hello" ) {     console . log ( `${greet} ${name}!` ); }   sayHello ( "Dimas" ,   "Hai" ); sayHello ();   /* output: Hai Dimas! Hello Stranger! */ Arrow Function const sayHello = ( name = "Stranger" , greet = "Hello" ) => console . log ( `${greet} ${name}!` );     sayHello ( "Dimas" ,   "Hai" ); sayHello ();     /* output: Hai Dimas! Hello Stranger! */ Pada contoh di atas, kita menggunakan tanda assignment (=) untuk menetapkan parameter  name  dengan nilai default  “Stranger” , dan parameter greet dengan nilai default  “Hello” . Hal ini

Belajar Babel Loader Javascript ES6

Apa itu  babel  atau  babel.js ? Babel merupakan sebuah transpiler yang bertugas untuk mengubah sintaks JavaScript modern (ES6+) menjadi sintaks yang dapat didukung penuh oleh seluruh browser. JavaScript merupakan bahasa pemrograman yang berkembang sangat pesat. Komunitasnya besar, dan tiap tahun selalu terdapat versi yang baru.  Namun perkembangan yang pesat tadi ternyata membutuhkan waktu yang lama untuk diadaptasi oleh browser atau Node.js. Lalu jika kita ingin mencoba sintaks terbaru di JavaScript apakah kita perlu menunggu hingga seluruh browser berhasil mengadaptasi pembaharuan tersebut? Tentu tidak!  Dengan babel Anda dapat menuliskan sintaks JavaScript versi terbaru tanpa khawatir memikirkan dukungan pada browser. Karena babel akan mengubah sintaks yang kita tuliskan menjadi kode yang dapat diterima browser. Jika Anda penasaran bagaimana cara babel bekerja, babel menyediakan sebuah playground yang dapat kita manfaatkan untuk mengubah sintaks JavaScript modern (ES6+) menjadi sin