Object-oriented Programming (OOP)". Apa itu Pemrograman Berorientasi Objek? Bagaimana implementasinya pada bahasa pemrograman PHP?" /> Dasar-Dasar Pemrograman Berorientasi Objek (Object-oriented Programming(OOP)) pada PHP

Dasar-Dasar Pemrograman Berorientasi Objek (Object-oriented Programming(OOP)) pada PHP

Dipublikasikan pada: 09 Jun 2022 11:13

Apa itu OOP?

Pemrograman berorientasi objek merupakan salah satu paradigma pemrograman yang banyak digunakan dalam pengembangan perangkat lunak. Dalam OOP kode program diimplementasikan dalam sebuah kelas yang memiliki atribut (field) dan fungsi atau prosedur (method). Dalam bahasa awam kelas dapat diibaratkan seperti sebuah cetakan kue. Sebuah cetakan kue dapat mencetak banyak kue (objek) yang memiliki beberapa atribut misalnya warna, bentuk dan ukuran. Objek kue juga memiliki beberapa fungsi misalnya dimakan dan ditulis nama. Sebuah objek juga dapat dibentuk dari beberapa objek lain misalnya objek kue ulang tahun dibentuk dari objek kue dan objek lilin. Ada banyak sekali bahasa pemrograman yang berorientasi obyek diantaranya; Java, C#, Python, PHP dan masih banyak lagi.

Dasar-dasar OOP.

  1. Abstraksi (Abstraction)

Dalam OOP abstraksi berarti menyembunyikan detail yang tidak perlu dari sebuah objek dan hanya menampilkan data-data yang diperlukan saja. Abstraksi dalam dunia nyata dapat diibaratkan seperti sebuah kipas angin, kita hanya perlu menekan tombol untuk menghidupkan, mengganti kecepatan dan mematikan. Kita tidak perlu tahu proses apa saja yang terjadi ketika kita menekan tombol tersebut.

Saat melakukan pemrograman Sebuah kelas bisa saja terdapat fungsi abstrak yang mana sebuah fungsi hanya dideklarasikan namanya tanpa implementasi yang konkrit. Kelas turunannyalah yang wajib mengimplementasikan fungsi abstrak tersebut. Implementasi dari fungsi abstrak pada setiap kelas dapat berbeda dengan kelas lain yang disebut polimorfisme (polymorphism).

Contoh kode abstraksi dalam PHP:

Kendaraan.php

<?php

// deklarasi kelas abstrak
abstract class Kendaraan
{
    // deklarasi fungsi abstrak dengan return value berjenis string
    abstract function getTagLine(): string;
    // deklarasi fungsi abstrak tanpa mewajibkan adanya return value
    abstract function klakson();
}

// Deklarasi kelas Vespa yang merupakan turunan dari kelas Kendaraan
class Vespa extends Kendaraan
{
    // implementasi fungsi abstrak
    function getTagLine(): string          
    {
        // implementasi fungsi mewajibkan return value berjenis string
        return "Bersama Vespa Membangun Dunia"; 
    }
    // implementasi fungsi abstrak
    function klakson()                      
    {
        echo "Tiin...Tiiin!!!";
    }
}

// Deklarasi kelas Angkot yang merupakan turunan dari kelas Kendaraan
class Angkot extends Kendaraan
{
    function getTagLine(): string
    {
        return "Ayo Masih Kosong!!. Kanan Tiga Kiri Dua.";
    }
    function klakson()
    {
        // implementasi fungsi abstrak dapat sepenuhnya berbeda dari implementasi kelas Vespa
        for ($i = 0; $i < 5; $i++) {        
            echo "Telolet..";
        }
    }
}

Main.php

<?php
require_once './Kendaraan.php';     // impor file Kendaraan.php
// instansiasi kelas Angkot
$angkot = new Angkot();
echo $angkot->getTagLine(), '<br>';
$angkot->klakson();
echo '<br><br>';

//instansiasi kelas Vespa
$vespa = new Vespa();
echo $vespa->getTagLine(), '<br>';
$vespa->klakson();

Saat file Main.php dijalankan akan menghasilkan hasil seperti gambar di bawah ini:

  1. Enkapsulasi (Encapsulation)

Konsep enkapsulasi merupakan sebuah konsep yang membuat atribut dan fungsi sebuah kelas tidak dapat dimodifikasi atau diakses secara sembarangan dari luar kelas. Enkapsulasi dikenal beberapa modifier diantaranya private, protected, public dan lain sebagainya tergantung bahasa pemrograman. Modifier private berarti suatu atribut atau fungsi hanya dapat diakses dari kelasnya. Modifier protected berarti suatu atribut atau fungsi hanya dari kelasnya dan kelas turunannya. Sedangkan modifier public berarti suatu atribut atau fungsi dapat diakses dari berbagai tempat. 

Untuk lebih jelasnya dapat dilihat pada kode di bawah ini:

Kendaraan.php

<?php

// deklarasi kelas abstrak
abstract class Kendaraan
{
    protected string $platNomor;      // modifier protected dapat diakses dari kelas kendaraan dan turunannya
    public string $warna;             // modifier public dapat diakses dari semua kelas dan file

    // fungsi __construct adalah fungsi yang digunakan untuk instansiasi objek
    function __construct(string $platNomor, string $warna)
    {
        // inisialisasi atribut
        $this->platNomor = $platNomor;
        $this->warna = $warna;
    }
    // deklarasi fungsi abstrak dengan return value berjenis string
    abstract function getTagLine(): string;
    // deklarasi fungsi abstrak tanpa mewajibkan adanya return value
    abstract function klakson();
}

// Deklarasi kelas Angkot yang merupakan turunan dari kelas Kendaraan
class Angkot extends Kendaraan
{
    private float $KmPerLiter = 12;  // modifier private hanya dapat diakses dari kelas Angkot    
    private string $nomorMesin;

    function __construct(string $nomorMesin, string $platNomor, string $warna)
    {
        // memanggil instansiasi dari kelas Kendaraan agar semua atribut terisi.
        parent::__construct($platNomor, $warna);
        $this->nomorMesin = $nomorMesin;
    }

    function isiBBM(float $volumeLiter)
    {
        echo "Angkot diisi bbm sebanyak $volumeLiter Liter dan akan habis setelah digunakan pada jarak " .
            $volumeLiter * $this->KmPerLiter . ' Km<br>'; // atribut KmPerLiter dapat diakses dari dalam kelas Angkot
    }

    // untuk mendapatkan data nomorMesin digunakan getter
    function getNomorMesin(): string
    {
        return $this->nomorMesin;
    }

    function printSemuaData()
    {
        echo "Jenis Kendaraan: Angkot" .
            "<br>Nomor Polisi: " . $this->platNomor .   // atribut protected dari kelas Kendaraan
            "<br>Warna: " . $this->warna .              // atribut public dari kelas Kendaraan
            "<br>Nomor Mesin" . $this->nomorMesin;      // atribut private dari kelas Angkot
    }

    function getTagLine(): string
    {
        return "Ayo Masih Kosong!!. Kanan Tiga Kiri Dua.";
    }
    function klakson()
    {
        // implementasi fungsi abstrak dapat sepenuhnya berbeda dari implementasi kelas Vespa
        for ($i = 0; $i < 5; $i++) {
            echo "Telolet..";
        }
        echo '<br>';
    }
}

 Main.php

<?php

require_once './Kendaraan.php';     // impor file Kendaraan.php

// instansiasi kelas Angkot
$angkot = new Angkot("1234567890", "ZZ 1234 YY", "Putih");
$angkot->isiBBM(10);
// baris kode di bawah error karena atribut platNomor adalah atribut kelas Kendaraan yang memiliki modifier protected
// echo $angkot->platNomor, '<br>';    
// baris kode di bawah error karena atribut nomorMesin adalah atribut kelas Angkot yang memiliki modifier private
// echo $angkot->nomorMesin, '<br>';

echo $angkot->warna, '<br>';   
echo $angkot->printSemuaData(); 

Saat file Main.php dijalankan akan menghasilkan hasil seperti gambar di bawah ini: 

  1. Polimorfisme (Polymorphism)

Pada dasarnya polimorfisme berarti suatu fungsi dengan nama yang sama dapat memiliki karakteristik yang berbeda. Pada contoh abstrak dapat dilihat bahwa fungsi klakson pada kelas Vespa dan kelas Angkot memiliki implementasi yang berbeda. Pada kelas Vespa fungsi klakson hanya menjalankan perintah echo sedangkan pada kelas Angkot menjalankan perulangan for dan perintah echo di dalamnya.

  1. Turunan (Inheritance)

Konsep turunan telah dicontohkan juga pada bagian-bagian sebelumnya. Konsep turunan adalah suatu konsep dalam OOP dimana suatu kelas dapat menurunkan atribut dan fungsi-fungsinya kepada kelas turunannya. Pada contoh sebelumnya kelas Kendaraan merupakan sebuah kelas parent sedangkan kelas Vespa dan kelas Angkot merupakan kelas child dari kelas Kendaraan. Seluruh atribut dan fungsi dengan modifier selain private diturunkan dari kelas Kendaraan ke kelas Angkot dan Vespa.

Konsep turunan tidak terbatas pada dua kelas saja, kelas child juga dapat diturunkan pada kelas lain. Semakin ke bawah suatu kelas dalam tangga keturunan maka kelas tersebut seharusnya akan lebih spesifik.