Object-Oriented PHP: Polymorphism

 



Polymorphism adalah gambaran pola dalam object-oriented programming di mana banyak class memiliki fungsi yang berbeda ketika menggunakan interface dan atau abstract class yang sama.

Masih bingung? ketika banyak class menggunakan interface dan atau abstract class yang sama tapi memiliki fungsi yang berbeda-beda itulah polymorphism.

Polymorphism jika diartikan secara bahasa maka poly berarti banyak dan morph berarti bentuk, jadi polymorphism berarti banyak bentuk.

Dalam polymorphism kita bisa menggunakan abstract class saja atau interface saja atau menggunakan keduanya.

Langsung saja kita perhatikan kode di bawah ini, ini adalah contoh polymorphism yang menggunakan abstract class dan interface.

// membuat interface Tanah
interface Tanah
{
    public function hitungLuas();
}

// membuat abstract class Bibit
abstract class Bibit
{
    abstract public function ditanami();
}

// extends Bibit dan implements Tanah
class Lingkaran extends Bibit implements Tanah
{
    private $jariJari;
    private $pi = 3.14;

    public function __construct($jariJari) {
        $this->jariJari = $jariJari;
    }

    // menghitung luas tanah berbentuk lingkaran
    // implements method dari interface tanah
    public function hitungLuas() {
        return $this->jariJari * $this->jariJari * $this->pi;
    }

    // tanah ditanami Kopi
    // extneds method dari abstract class Bibit
    public function ditanami() {
        return "ditanami Kopi";
    }
}

class PersegiPanjang extends Bibit implements Tanah {
    private $panjang;
    private $lebar;

    public function __construct($panjang, $lebar) {
        $this->panjang = $panjang;
        $this->lebar = $lebar;
    }

    // menghitung luas tanah berbentuk persegi panjang
    // implements method dari interface tanah
    public function hitungLuas() {
        return $this->panjang * $this->lebar;
    }

    // tanah ditanami Padi
    // extneds method dari abstract class Bibit
    public function ditanami() {
        return "ditanami Padi";
    }
}

$tanahAgus = new Lingkaran(3);
$tanahChandra = new PersegiPanjang(3,4);

echo "Tanah Agus seluas " . $tanahAgus->hitungLuas() . " m2 \n";
echo $tanahAgus->ditanami() . "\n \n";

echo "Tanah Chandra seluas " . $tanahChandra->hitungLuas() . " m2 \n";
echo $tanahChandra->ditanami() . "\n";

Kita perhatikan, dalam contoh di atas terdapat dua class yaitu class Lingkaran dan class PersegiPanjang. Dua class tersebut sama-sama turunan dari abstract class Bibit dan implementasi interface Tanah. Walaupun dari abstract class dan interface yang sama tapi class Lingkaran dan class PersegiPanjang memiliki fungsi yang berbeda.

class Lingkaran untuk menghitung luas tanah lingkaran dan ditanami kopi, sedangkan class PersegiPanjang untuk menghitung luas tanah persegi panjang dan ditanami padi.

Mudah kan? Bapak-ibunya sama tapi kok muka putra-putrinya berbeda-beda, mungkin bisa disebut juga polymorphism :hugging:

Sumber : https://khoerodin.id/object-oriented-php/polymorphism-dalam-oop-php/ 


Abstract Class dan Object Interfaces yang kita pelajari dalam 2 tutorial sebelum ini merupakan implementasi dari konsep pemrograman berbasis objek yang dinamakan Polimorfisme. Dalam tutorial OOP PHP kali ini, kita akan membahas pengertian polimorfisme dalam pemrograman objek PHP, disertai contoh penggunaannya.


Pengertian Polimorfisme

Dari segi bahasa, Polimorfisme (bahasa inggris: Polymorphism) berasal dari dua kata bahasa latin yakni poly dan morphPoly berarti banyak, dan morph berarti bentuk. Polimorfisme berarti banyak bentuk (wikipedia).

Di dalam pemrograman objek, polimorfisme adalah konsep dimana terdapat banyak class yang memiliki signature method yang sama. Implementasi dari method-method tersebut diserahkan kepada tiap class, akan tetapi cara pemanggilan method harus sama. Agar kita dapat ‘memaksakan’ signature method yang sama pada banyak class, class tersebut harus diturunkan dari sebuah abstract class atau object interface.

Sebagai contoh, berikut adalah kode PHP yang mengimplementasikan konsep polimorfisme:

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
37
38
39
40
41
42
43
<?php
// buat abstract class
abstract class komputer{
   // buat abstract method
   abstract public function booting_os();
}
  
class laptop extends komputer{
   public function booting_os(){
     return "Proses Booting Sistem Operasi Laptop";
   }
}
  
class pc extends komputer{
   public function booting_os(){
     return "Proses Booting Sistem Operasi PC";
   }
}
  
class chromebook extends komputer{
public function booting_os(){
     return "Proses Booting Sistem Operasi Chromebook";
   }
}
  
  
// buat objek dari class diatas
$laptop_baru = new laptop();
$pc_baru = new pc();
$chromebook_baru = new chromebook();
  
// buat fungsi untuk memproses objek
function booting_os_komputer($objek_komputer){
   return $objek_komputer->booting_os();
}
  
// jalankan fungsi
echo booting_os_komputer($laptop_baru);
echo "<br />";
echo booting_os_komputer($pc_baru);
echo "<br />";
echo booting_os_komputer($chromebook_baru);
?>

Contoh kode diatas cukup panjang, namun jika anda mengikuti tutorial OOP PHP sebelumnya (tentang abstract class), maka kode diatas akan bisa dipahami dengan baik.

Pada awal program, saya membuat abstract class komputer yang kemudian diturunkan kedalam 3 class lain, yakni: class laptop, class pc dan class chromebookAbstract class komputer memiliki abstract method booting_os(), yang harus diimplementasikan ulang pada tiap class yang diturunkan dari class komputer. Setelah pendefenisian class, saya membuat 3 objek dari masing-masing class.

Perhatikan bahwa setelah pembuatan objek dari masing-masing class, saya membuat fungsi booting_os_komputer(). Fungsi ini berperan untuk memanggil method-method dari setiap class.

Konsep polimorfisme dari contoh diatas adalah, fungsi booting_os_komputer() akan selalu berhasil dijalankan, selama argumen yang diberikan berasal dari class yang diturunkan dari class abstract komputer.


Peran Abstract Class dan Interface dalam Polimorfisme

Baik abstract class maupun interface bisa digunakan untuk membuat banyak class dengan method yang sama. Bahkan keduanya sering digunakan secara bersama-sama.

Berikut adalah revisi kode program kita sebelumnya dengan menggunakan abstract class dan interface:

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
// buat abstract class
abstract class komputer{
   // buat abstract method
   abstract public function booting_os();
}
  
interface mouse{
   public function double_klik();
}
  
class laptop extends komputer implements mouse{
   public function booting_os(){
     return "Proses Booting Sistem Operasi Laptop";
   }
   public function double_klik(){
     return "Double Klik Mouse Laptop";
   }
}
  
class pc extends komputer implements mouse{
   public function booting_os(){
     return "Proses Booting Sistem Operasi PC";
   }
   public function double_klik(){
     return "Double Klik Mouse PC";
   }
}
  
class chromebook extends komputer implements mouse{
   public function booting_os(){
     return "Proses Booting Sistem Operasi Chromebook";
   }
   public function double_klik(){
     return "Double Klik Mouse Chromebook";
   }
}
  
// buat objek dari class diatas
$laptop_baru = new laptop();
$pc_baru = new pc();
$chromebook_baru = new chromebook();
  
// buat fungsi untuk memproses objek
function booting_os_komputer($objek_komputer){
   return $objek_komputer->booting_os();
}
  
function double_klik_komputer($objek_komputer){
   return $objek_komputer->double_klik();
}
  
// jalankan fungsi
echo booting_os_komputer($laptop_baru);
echo "<br />";
echo double_klik_komputer($laptop_baru);
echo "<br />";
echo "<br />";
  
echo booting_os_komputer($pc_baru);
echo "<br />";
echo double_klik_komputer($pc_baru);
echo "<br />";
echo "<br />";
  
echo booting_os_komputer($chromebook_baru);
echo "<br />";
echo double_klik_komputer($chromebook_baru);
?>

Pada kode program diatas, saya membuat 1 abstract classkomputer, dan 1 interfacemouse. Keduanya kemudian di turunkan kepada 3 class: class laptop, class pc, dan class chromebook.

Selama sebuah class diturunkan dari abstract class komputer, dan menggunakan interface mouse, fungsi booting_os_komputer() dan fungsi double_klik_komputer() akan selalu berhasil di jalankan, terlepas dari apapun nama objek dan implementasi method yang digunakan.

Konsep polimorfisme yang kita bahas dalam tutorial ini bertujuan untuk membuat struktur pola dari class dan turunannya. Lebih jauh lagi, polimorfisme menekankan alur kode program yang terorganisir untuk mengurangi adanya perulangan kode program.


sumber : https://www.duniailkom.com/tutorial-belajar-oop-php-pengertian-polimorfisme-dalam-pemrograman-objek-php/

Tidak ada komentar:

Posting Komentar

Blogger Tricks

Blogger Themes