Khoerodin Developer, writer, and maker |

Developer, writer, and maker

Polymorphism dalam OOP PHP - Ep. 14

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 ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ