Object-oriented Programming dengan PHP

Jumat, 14 Desember 2012
Object-oriented Programming (disebut juga OOP/OO) sebetulnya bukan hal baru pada dunia pemrograman. OOP telah ada selama 2 dekade lebih. Bahasa C++ dan Java telah lama menggunakan OOP ini. OOP bukan merupakan suatu bahasa ataupun teknologi baru, tetapi hanya merupakan suatu paradigma/pendekatan untuk masalah yang akan dipecahkan. Selama bahasa pemrograman itu mendukung OOP, kita sudah bisa menggunakan OOP ini pada bahasa apapun yang kita kuasai.

OOP merupakan solusi yang tepat untuk aplikasi yang berskala besar. Alasannya yaitu OOP memungkinkan kode untuk digunakan kembali (reusable), aplikasi lebih mudah dipelihara, aplikasi memiliki tingkat ketergantungan antar modul yang rendah, dan tentunya aliran program lebih mudah dipahami karena pada OOP, elemen-elemen dalam program diibaratkan objek-objek pada dunia nyata.
Pada tutorial kali ini akan dibahas dasar-dasar OOP di dalam bahasa PHP. Versi PHP yang sudah mendukung OOP adalah PHP versi 5 ke atas, sedangkan versi 4 dan sebelumnya belum sepenuhnya mendukung OOP. Tutorial ini akan membahas dasar-dasar OOP sambil langsung mempraktekkan bagaimana OOP tersebut diimplementasikan di PHP.

Enkapsulasi

Didalam OOP, semua elemen program merupakan objek-objek yang saling berinteraksi satu sama lain. Dalam interaksinya, tiap objek mempunyai informasi yang bisa diakses oleh objek lain ataupun yang disembunyikan dari objek lain. Sebagai contoh, dalam dunia nyata, objek mobil memiliki steer, pedal, yang langsung berinteraksi dengan sopir. Tetapi sopir tidak secara langsung berinteraksi dengan mesin.
Sama halnya seperti objek-objek dalam OOP. Tiap objek memiliki informasi yang harus disembunyikan maupun yang tersedia untuk public (objek lainnya). Dalam OOP ini disebut enkapsulasi (encapsulation) yang merupakan salah satu konsep OOP yang sangat penting.

Class

Class adalah merupakan “blueprint” dari objek. Sedangkan objek adalah instance dari class. Sebagai contoh di dunia nyata, class seperti cetakan kue, dan objek adalah kuenya sendiri. Dari satu class bisa dibuat berapa pun objek yang diperlukan. Sebuah class dalam php diawali dengan keyword class diikuti dengan nama class. Pada contoh di bawah adalah deklarasi sebuah class dalam php dengan nama “artikel”.
// deklarasi class dalam php
class artikel {

   // di sini isi code dari class akan ditulis

}
Sebuah class biasanya memiliki ciri-ciri tertentu, seperti dalam dunia nyata mobil miliki warna, ukuran, jumlah ban, dll. Ciri-ciri ini disebut dengan attribute/property. Selain attribute, class juga memiliki operasi-operasi yang bisa dilakukan oleh class tersebut. Seperti pada mobil memiliki operasi maju, mundur, pindah gigi, dll. Operasi-operasi ini disebut dengan method.
Dalam program OOP pun sama halnya seperti di dunia nyata. Tiap class memiliki attribute dan method. Attribute dan method nya pun bisa satu ataupun sebanyak yang diperlukan. Contoh: class artikel, memiliki attribute: judul, nama_penulis, tanggal_terbit, kategori, dll. Artikel juga memiliki method terbitkan(), arsipkan(), hapus(), edit(), dll.
Berikut ini contoh class “artikel” dalam php dengan method dan attribute nya.
class artikel {

    // attribute
    public $tanggal_terbit; 

    // method
    function terbitkan() {   
        echo 'artikel berhasil diterbitkan ';
    }

}
Keterangan: Seperti kita lihat pada contoh di atas, attribute adalah variable biasa dan diawali dengan keyword public. Public merupakan access modifier (access modifier memerlukan pembahasan lanjut, yang berkaitan dengan encapsulation). Sedangkan method merupakan fungsi biasa yang memiki argumen ataupun tidak. Method juga bisa memiliki access modifier sama halnya seperti attribute.

Object

Objek adalah instance dari class, ini berarti class harus di-instantiate (dibuat objeknya) terlebih dahulu agar bisa digunakan dalam program (kecuali static class). Untuk membuat objek baru dalam PHP, digunakan keyword new.
Berikut adalah contoh pembuatan objek dalam php:
// deklarasi class
class artikel {

    public $tanggal_terbit;

    function terbitkan() {
        echo 'artikel berhasil diterbitkan ';
    }

} 

// instantiate objek baru
$artikel_a = new artikel();

// instantiate objek lainnya
$artikel_b = new artikel();
Keterangan: Pada contoh di atas, $artikel_a merupakan objek dari class artikel. Objek ini otomatis telah memiliki seluruh atribut dan method yang dimiliki oleh class nya, yaitu: attribute ‘tanggal_terbit’ dan method ‘terbitkan()’. Sama halnya juga dengan $artikel_b memiliki atribut dan method yang sama. Untuk mengakses suatu atribut/method dari objek, maka kita bisa menggunakan tanda -> (strip, lebih besar dari)
Contohnya:
// mengakses attribute
$artikel_a->tanggal_terbit
// mengakses method
$artikel_a->terbitkan()

Inheritance

Sebuah class dapat di-inherit (diwariskan) ke class turunannya, sehingga class turunannya memiliki attribute dan method yang sama dengan class induknya, plus bisa ditambah attribute dan method yang diperlukan. Ini berguna untuk menambah ciri dan fungsi khusus terhadap class turunan.
Class turunan disebut juga sub/derived/child class. Sedangkan class induk yang mewarisi disebut sebagai super/base/parent class. Sebagai contoh, class artikel bisa diwariskan menjadi class berita. Class artikel disebut parent class, dan class berita disebut child class. Dalam inheritance, keyword yang digunakan adalah extends. Berikut contoh inheritance dalam PHP:
// parent class
class artikel {

    public $tanggal_terbit;

    function terbitkan() { 
        echo 'artikel berhasil diterbitkan ';
    }

} 

// child class
class berita extends artikel {

    // attribute tambahan
    public $nama_wartawan; 
    public $nara_sumber;

    // method tambahan
    function cek_nara_sumber() {
        echo 'nara sumber berhasil dicek ';
    }

}
Keterangan: Pada contoh di atas, class berita yang merupakan child class akan otomatis memiliki atribut ‘$tanggal_terbit’ dan method ‘terbitkan()’ sebagai warisan dari parent classnya, yaitu class artikel. Sebagai tambahan, class berita memiliki atribut ‘$nama_wartawan’, ‘$nara_sumber’ dan method ‘cek_nara_sumber()’ yang didefinisikan tersendiri pada child class tersebut.

Polymorphism

Polymorphism bisa diartikan memiliki berbagai macam bentuk. Dalam istilah pemrograman, bisa diartikan method dengan nama yang sama tetapi memiliki karakteristik operasi yang berbeda-beda. Dalam OOP, ini berkaitan erat dengan overloading dan overriding.
Di dunia nyata polymorphism bisa diibaratkan dengan power on/off. Pada komputer, terdapat power on/off. pada HP juga terdapat power on/off. Pada televisi juga terdapat power on/off. Semua orang mengetahui fungsi dan cara menggunakannya, yaitu ditekan dan akan menghidup-matikan alat tersebut. Tetapi sebetulnya, cara kerja di dalamnya sangat berbeda antara alat satu dengan yang lainnya, meskipun memiliki nama yang sama (power).

Overloading

Dalam bahasa Java/C++, fasilitas untuk melakukan overloading telah disediakan. Tetapi dalam PHP, fasilitas tersebut belum tersedia. Namun overloading bisa juga diimplementasikan di PHP. Untuk melakukan overloading, dalam PHP bisa menggunakan magic method __call($name, $arguments). __call adalah fungsi khusus yang otomatis dijalankan apabila sebuah objek memanggil method yang tidak ada pada sebuah class. __call memiliki 2 argumen, yang pertama nama method yang dipanggil berupa string, dan yang kedua adalah argumen method berupa array.
Berikut contoh nya:
class artikel {

public function __call($name, $arguments) {

    // jika objek memanggil method dengan nama 'terbitkan_artikel' maka jalankan code di bawah
    if ($name == ‘terbitkan_artikel’) { 

        // jika tidak ada argumen, maka jalankan code ini
        if ($arguments[0] == ‘’) {
             echo 'artikel berhasil diterbitkan';
        }

        // jika ada argumen, maka jalankan code ini yang berbeda dengan di atas
        if ($arguments[0] != ‘’) {
             echo 'artikel berhasil diterbitkan dengan argumen';
        }
    }

}

}

// instantiate objek
$artikel_a = new artikel(); 

// memanggil method tanpa argumen
$artikel_a->terbitkan_artikel(); 

// memanggil method yang sama, tapi dengan argumen
$artikel_a->terbitkan_artikel('argumen_a', 'argumen_b'); 
Keterangan: Seperti pada contoh di atas, objek $artikel_a pertama memanggil method terbitkan_artikel() tanpa argumen, lalu yang kedua memanggil method yang sama tetapi dengan argumen. Method nya sama, tapi argumen nya berbeda, juga pada isi class nya akan menjalankan code yang berbeda pula. Inilah salah satu contoh polymorphism.

Overriding

Overriding dalam oop berkaitan erat dengan inherintance. Overriding adalah ‘memaksa’ suatu method pada child class agar bekerja dengan spesifikasi sendiri yang tidak sama dengan method di parent/super class nya.
Contoh:
// parent class
class artikel {

	public $tanggal_terbit;

	function terbitkan() {
	        echo 'artikel telah diterbitkan';		
	}
	function arsipkan() {
	        echo 'artikel telah diarsipkan';
	}	

}

// child class
class berita extends artikel {

    // method yang mengoverride method dari parent class nya
    function arsipkan() { 
        echo 'berita telah arsipkan';
    }

}

// instantiate 
$berita = new berita();

// akan memanggil method 'terbitkan()' yang diwariskan dari parent class nya
$berita->terbitkan();

// akan memanggil method arsipkan yang ada pada child class, 
// karena method 'arsipkan()' telah dioverride oleh child nya
$berita->arsipkan();
Demikian dasar OOP dan contoh pada bahasa PHP. Sebetulnya masih banyak konsep OOP yang belum tercakup dalam tulisan yang sederhana ini. Tetapi dengan ini diharapkan kita bisa mengenal dan memahami dasar / fundamental OOP yang sering digunakan dalam aplikasi-aplikasi dengan berbasis OOP dan kita bisa menerapkan OOP pada project kita selanjutnya sehingga bisa memanfaatkan fitur-fitur OOP dan kelebihannya. Mudah-mudahan tulisan ini bermanfaat bagi para pembaca sekalian. Wassalam.
Referensi:
  • Object-oriented Programming dengan PHP 5, Ir. M. Farid Azis, M. Kom
  • OOP Demystified, James Keogh & Mario Giannini
Source :  http://triswan.wordpress.com/2009/10/09/object-oriented-programming-dengan-php/#comment-483

Tidak ada komentar:

Posting Komentar