Sabtu, 13 Juni 2020

Inheritance dan Polymorphism penjelasan beserta contohnya

Inheritance dan Polymorphism
penjelasan beserta contohnya

Inherentance

Pengertian Inheritance (Pewarisan) dalam OOP

Inheritance atau Pewarisan/Penurunan adalah konsep pemrograman dimana sebuah class dapat ‘menurunkan’ property dan method yang dimilikinya kepada class lain. Konsep inheritance digunakan untuk memanfaatkan fitur ‘code reuse’ untuk menghindari duplikasi kode program.

Konsep inheritance membuat sebuah struktur atau ‘hierarchy’ class dalam kode program. Class yang akan ‘diturunkan’ bisa disebut sebagai class induk (parent class), super class, atau base class. Sedangkan class yang ‘menerima penurunan’ bisa disebut sebagai class anak (child class), sub class, derived class atauheir class.

Tidak semua property dan method dari class induk akan diturunkan. Property dan method dengan hak akses private, tidak akan diturunkan kepada class anak. Hanya property dan method dengan hak akses protected dan public saja yang bisa diakses dari class anak.

<?php
// buat class induk:Smartphone
class Smartphone{
  
   public $merk;
   public $processor;
   public $memory;
  
   public function beli_Smartphone() {
     return "Beli Smartphone baru";
   }
}
  
// turunkan class Smartphone ke Android
class Android extends Smartphone {
  
   public function lihat_spec() {
     return "merk: $this->merk, processor: $this->processor,
     memory: $this->memory";
   }
}
  
// buat objek dari class Android (instansiasi)
$Android_baru = new Android();
  
// isi property objek
$Android_baru->merk = "Redmi 8";
$Android_baru->processor ="2.0 Ghz octa-core";
$Android_baru->memory = "4 GB dengan memori penyimpanan 64 GB";
  
//panggil method objek
echo $Android_baru->beli_Smartphone();
echo "<br />";
echo $Android_baru->lihat_spec();
?>

Dalam contoh kode diatas, saya membuat class Smartphone dengan beberapa property dan sebuah methodProperty class Smartphone belum berisi nilai apa-apa.

Dibawah class Smartphone, saya membuat class Android extends class Smartphone. Disini saya menurunkan class Smartphone kedalam class Android. Di dalam class Android, kita bisa mengakses seluruh property dan method apapun dari class  selama Smartphone memiliki hak akses public atau protected.

Untuk membuktikan hal tersebut, saya membuat objek $Android_baru dari class Android. Perhatikan bahwa kita bisa mengakses property $merk, $processor, dan$memory yang semuanya adalah milik class Smartphone, bukan class Android. Method beli_Smartphone() juga sukses diakses dari objek $Android baru. Inilah yang dimaksud dengan inheritance/penurunan class dalam OOP.

PHP tidak membatasi berapa banyak ‘penurunan objek’ yang bisa dilakukan, dalam contoh berikut, saya membuat 3 buah class yang saling ‘menurunkan’:

<?php
// buat class Smartphone
class Smartphone {
   protected function beli_Smartphone() {
     return "Beli Smartphone baru";
   }
}
  
// turunkan class Smartphone ke Android
class Android extends Smartphone {
   protected function beli_Android() {
     return "Beli Android baru";
   }
}
  
// turunkan class Android ke iphone
class iphone extends Android {
   protected function beli_iphone() {
     return "Beli iphone baru";
   }
  
   public function beli_semua(){
     $a = $this->beli_Smartphone();
     $b = $this->beli_Android();    
     $c = $this->beli_Iphone();
     return "$a <br /> $b <br /> $c";
   }
}
  
// buat objek dari class Android (instansiasi)
$gadget_baru = new iphone();
  
//panggil method objek
echo $gadget_baru->beli_semua();
  
// $gadget_baru->beli_Smartphone();
// Fatal error: Call to protected method Smartphone::beli_Smartphone()
?>

Dalam contoh diatas, saya membuat class Smartphone yang diturunkan kepada class Android, dan kemudian diturunkan lagi kepada class iphone. Dari dalam class iphone ini kemudian saya memanggil method dari class diatasnya.

Jika anda perhatikan, setiap method selain method beli_semua(), memiliki hak akses protected. Hak akses protected ini ‘menghalangi’ kode program lain untuk mengaksesnya, selain class turunan.

Pada baris terakhir, saya menyisipkan kode program untuk mencoba mengakses method beli_Smartphone() . Kode ini sengaja saya beri tanda komentar. Jika anda menghapus tanda komentar, PHP akan mengeluarkan error yang menyatakan kita tidak bisa mengakses method dengan hak akses protected:

1
2
3
4
<?
$gadget_baru->beli_Smartphone();
// Fatal error: Call to protected method Smartphone::beli_Smartphone()
?>

Inilah yang dimaksud dengan enkapsulasi dalam OOP. Membatasi method yang tidak boleh diakses akan membuat kode program menjadi lebih terstruktur.

Polymorphism

Pengertian dari Polymorphism (polimorfisme = banyak bentuk )adalah salah satu contoh  Konsep OOP, yang memiliki kemampuan  sebuah method ,dapat mempunyai nama sama ,namun dengan perilaku yang berbeda-beda. Kemampuan objek agar melakukan perilaku atau tindakan  yang secara konsep sama,  namun dengan cara yang berbeda-beda.

Kemampuan method sama namun dengan behavior,  atau perilaku berbeda-beda ,antara Super class dengan Sub class ini, disebut juga dengan method Overriding. Serta kemampuan method sama namun dengan paramater yang berbeda-beda ,ini juga bisa disebut method Overloading  Kedua tipe method tersebut , menganut konsep dari Polymorphism.

Berikut ini adalah contoh program yang memberikan gambaran konsep polymorphism. Perlu dipahami bahwa kelas Object adalah akar dari semua kelas Java dan menduduki puncak tertinggi dalam hierarkhi kelas. Program mendefinisikan kelas yang terkait bidang datar secara sederhana termasuk beberapa kelas turunan seperti kelas Nama dan Nim dan membatasi hanya pada penerapan method overriding.

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Nama file : Polimorphism.java
// Contoh penerapan konsep polimorphism
 
public class Polimorphism {
 
   public static void main(String[ ] args) {
 
      cetakObyek(new Nama());
      cetakObyek(new Nim());
      cetakObyek(new Semester());
      cetakObyek(new Object());
   }
    
   public static void cetakObyek(Object obyek) {
      System.out.println(obyek);
   }
 
} // Akhir kelas Polimorphism
 
class Nama extends Nim {
   public String toString() {
      return "Fitri yana";
   }
}
 
class Nim extends Semester {
   public String toString() {
      return "182355201032";
   }
}
 
class Semester extends Object {
   public String toString() {
      return "Semester 4";
   }
}


Tidak ada komentar:

Posting Komentar

 INSTALASI DROP & TEMPLATE