Tutorial Belajar OOP PHP Part 17: Pengertian Polimorfisme dalam Pemrograman Objek 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 morph. Poly 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:

<?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 chromebook. Abstract 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:

<?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 class: komputer, dan 1 interface: mouse. 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.


eBook OOP PHP Uncover Duniailkom
Duniailkom telah menerbitkan buku yang secara detail membahas pemrograman object PHP. Mulai dari materi dasar OOP seperti class, object, property, hingga trait, namespace, autoloading dan exception. Di akhir buku juga terdapat studi kasus pembuatan library dan aplikasi CRUD. Penjelasan lebih lanjut bisa ke eBook OOP PHP Uncover Duniailkom.

100 Comments

  1. aemana
    22 Dec 14
    • Andre
      23 Dec 14
  2. muchamad
    27 Jan 15
    • Andre
      28 Jan 15
  3. john doe
    10 Feb 15
  4. Anonymous
    12 Feb 15
    • Andre
      13 Feb 15
      • Anonymous
        29 Jul 16
  5. hariawan
    15 Feb 15
    • Andre
      17 Feb 15
  6. yuki
    27 Feb 15
    • Andre
      01 Mar 15
  7. yuki
    27 Feb 15
    • Andre
      01 Mar 15
  8. dbaxxx
    10 Mar 15
    • Andre
      11 Mar 15
  9. ahmad
    28 Mar 15
    • Andre
      29 Mar 15
  10. ahmad fauzi
    03 Apr 15
  11. Dimas Septyanto
    22 Apr 15
  12. huiralb
    25 Apr 15
    • febriyant
      02 Jun 15
  13. Heendher
    03 Jun 15
    • Andre
      04 Jun 15
  14. putri
    06 Jun 15
  15. Edi
    14 Jul 15
    • Andre
      15 Jul 15
  16. arya novan
    29 Aug 15
    • Andre
      30 Aug 15
  17. Arum Tri S
    10 Sep 15
    • Andre
      11 Sep 15
  18. graziani
    10 Oct 15
    • Andre
      10 Oct 15
  19. Aku Belajar
    11 Oct 15
    • Andre
      11 Oct 15
  20. alpiopio
    20 Dec 15
    • Andre
      20 Dec 15
  21. azhar
    16 Jan 16
    • Andre
      18 Jan 16
  22. Vaivez66
    23 Jan 16
    • Andre
      23 Jan 16
  23. agung
    12 Apr 16
  24. ANGGA SAPUTRA
    16 May 16
    • Andre
      17 May 16
  25. mferdiyanzah
    28 Jun 16
    • Andre
      28 Jun 16
  26. Andri
    07 Jul 16
  27. Anonymous
    07 Jul 16
    • Andre
      09 Jul 16
      • Anonymous
        10 Jul 16
  28. adi darmiko
    14 Nov 16
  29. Rzdrmwn
    31 Dec 16
    • Andre
      01 Jan 17
  30. teroret
    09 Jan 17
    • Andre
      09 Jan 17
  31. jenal
    07 Feb 17
    • Andre
      07 Feb 17
  32. Devi
    27 Feb 17
    • Andre
      28 Feb 17
  33. Tama
    09 Mar 17
    • Andre
      09 Mar 17
  34. ilham
    02 Aug 17
  35. Teguh Dharmawan
    09 Aug 17
    • Andre
      10 Aug 17
  36. Sikubay
    04 Nov 17
    • Andre
      05 Nov 17
  37. majulahBangsaku
    01 Feb 18
    • Andre
      04 Feb 18
  38. Firmansyah Yanuar
    05 Feb 18
    • Firmansyah Yanuar
      05 Feb 18
      • Andre
        05 Feb 18
  39. Romi Ardiansya
    21 Feb 18
  40. Maru
    04 Mar 18
  41. Nuzul
    11 Mar 18
    • Andre
      14 Mar 18
  42. Epen
    21 May 18
    • Andre
      07 Aug 18
  43. Dani
    06 Aug 18
    • Andre
      07 Aug 18
      • Dani
        10 Aug 18
  44. Dede Syarifudin Hidayat
    24 Aug 18
    • Andre
      24 Aug 18
  45. Chandra
    16 Nov 18
    • Andre
      18 Nov 18
  46. Anonymous
    12 Sep 19
    • Andre
      14 Sep 19
  47. Utomo Zhafari
    17 Sep 19
    • Andre
      17 Sep 19
  48. Utomo Zhafari
    19 Sep 19
    • Andre
      19 Sep 19
      • Utomo Zhafari
        20 Sep 19
  49. Hilman Restu
    10 Oct 19
    • Andre
      10 Oct 19
  50. raflesngln
    11 Dec 19
    • Andre
      13 Dec 19
  51. Kicky Maulana
    26 Jan 20
  52. Panji
    25 Feb 20
    • Andre
      27 Feb 20

Add Comment