Pemrograman Berorientasi
Objek
Aryo Pinandito, ST, M.MT Fajar Pradana, S.ST, M.Eng Issa Arwani, S.Kom, M.Sc
1. PENDAHULUAN 1.1 Pengantar 1.2 Tujuan
2. PEMROGRAMAN BERORIENTASI OBJEK 2.1 Class dan Method 2.2 Constructor 2.3 Inheritance 2.4 Encapsulation
2.5 Abstract dan Interface 2.6 Polymorphism
1. PENDAHULUAN
1.1 Pengantar
Pada dasarnya, pemrograman berorientasi objek disusun berdasarkan sebuah konsep objek yang sangat sederhana, namun ketika diterapkan kedalam pemrograman dapat menjadi suatu elaborasi yang sangat rumit.
Pada pemrograman berorientasi objek (OOP), pendekatan pemrograman secara struktural disusun berdasarkan unit-unit konseptual yang berdasarkan jenis data dan fungsionalnya menjadi sebuah tipe data. Sehingga setiap objek dalam pemrograman berorientasi objek memiliki tipe datanya sendiri.
Efektivitas penerapan konsep pemrograman berorientasi objek pada pemrograman web saat ini masih menjadi perdebatan, karena pada dasarnya, pemrograman web adalah pemrograman yang sifatnya dijalankan dengan cepat lalu selesai. Resource-resource yang dibuat dengan menggunakan konsep pemrograman berorientasi objek akan disimpan dalam memory agar dapat digunakan secara berulang-ulang.
Sejauh mana pemrograman berorientasi objek diterapkan pada bahasa pemrograman PHP akan menentukan juga sejauh mana suatu permasalahan dapat diselesaikan dengan menggunakan konsep objek dengan PHP.
1.2 Tujuan
Tujuan pembelajaran pada bab ini adalah mahasiswa mengetahui, memahami, dan mampu mengimplementasikan konsep pemrograman berorientasi dengan bahasa pemrograman PHP dalam membuat aplikasi berbasis web. Elaborasi penerapan konsep OOP yang diharapkan mencakup, class dan method, inhertance, contsructor, encapsulation, abstract, interface, dan polymorphism.
2. PEMROGRAMAN BERORIENTASI OBJEK
2.1 Class dan Method
Sebuah class pada pemrograman berorientasi adalah sebuah definisi tipe data yang dibuat oleh programmer yang memasukkan fungsi-fungsi lokal sebuah objek beserta properti/atribut yang dimiliki objek tersebut. Class dapat dikatakan sebagai suatu template dari banyak instansiasi objek dengan jenis (class) tersebut.
Objek itu sendiri adalah instansiasi/perwujudan individu dengan struktur data yang didefinisikan dengan suatu class. Objek dapat dikatakan sebagai object instance, atau instance. Sebuah class dapat diinstansiasi menjadi banyak objek. Sekali mendefinisikan sebuah class dapat diinstansiasi menjadi banyak objek.
Variabel anggota adalah atribut, properti, atau instance variable yang menjadi komponen data dalam sebuah definisi class. Fungsi anggota atau dengan kata lain method. Suatu unit/fungsi fungsional yang dimiliki oleh class. Pada bahasa pemrograman PHP, instansiasi objek dilakukan dengan menggunakan keyword new dan operator yang digunakan untuk mengakses member variabel dan fungsi dari sebuah objek adalah operator panah (>).
Konsep pemrograman berorientasi objek yang dapat diterapkan pada bahasa pemrograman PHP antara lain:
Pewarisan tunggal (single inheritance), PHP memperbolehkan suatu kelas mewarisi properti dan method dari kelas lain yang sifatnya public dengan menggunakan klausa
extends.
PHP tidak memperbolehkan pewarisan dari banyak kelas seperti pada bahasa pemrogaman Java. Walaupun pada bahasa pmerograman PHP sebuah class dapat mengimplementasikan banyak antarmuka (interfaces).
Setiap kelas dapat memiliki sebuah fungsi constructor, yaitu sebuah fungsi yang secara otomatis dijalankan ketika kelas tersebut diinstansiasi ke dalam sebuah objek. Nama fungsi constructor dalam PHP adalah __construct(), walaupun PHP masih memperbolehkan penamaan fungsi yang menjadi constructor dengan nama yang sama dengan nama kelas, namun hal ini tidak disarankan.
PHP5 memiliki fungsi destructor yang dijalankan ketika suatu objek dihilangkan. Desctructor pada PHP diberi nama __destruct().
Selain itu, PHP juga menerapkan konsep encapsulation untuk kontrol akses terhadap member atribut atau method, polymorphism, dan namespaces. Khusus namespace baru diimplementasikan pada PHP versi 5.3.
Kode PHP berikut ini memperlihatkan definisi sebuah class dan bagaimana sebuah class dapat diinstansiasi menjadi beberapa objek:
<?php // filename: manusia.class.php
// definisi class manusia class manusia {
public $nama; // variabel / properti public function menyapa() { // method echo $this>nama . ' bilang Halo!'; }
// instansiasi objek $susan
// $susan adalah instansiasi dari kelas manusia $susan = new manusia;
// pemberian nilai pada atribut objek $susan>nama = 'Susan';
// pemanggilan method yang dimiliki oleh objek $susan>menyapa(); // output: "Susan bilang Halo!"
// instansiasi objek lain dengan class yang sama $joko = new manusia;
$joko>nama = 'Joko';
$joko>menyapa(); // output: "Joko bilang Halo!"
?>
2.2 Constructor
Seperti yang pernah dijelaskan sebelumnya, bahwa constructor adalah sebuah fungsi atau method yang secara otomatis dipanggil ketika sebuah class diinstansiasi menjadi sebuah objek. Constructor tidak memiliki tipe data yang menjadi return value-nya secara eksplisit. Constructor tidak dapat diwarisi, walaupun pada banyak bahasa pemrograman yang menerapkan konsep pemrograman berorientasi objek memiliki fitur yang digunakan untuk mengakses method constructor yang dimiliki oleh class parent-nya. PHP memiliki fitur untuk melakukan hal tersebut.
Constructor banyak dimanfaatkan untuk melakukan hal yang selalu dilakukan ketika suatu kelas diinstansiasi. Pada contoh pada class manusia berikut ketika diinstansiasi menjadi sebuah objek properti nama objek tersebut belum memiliki nilai, atau nilainya NULL.
<?php // filename: manusia.class.php
// definisi class manusia class manusia {
public $nama; // variabel / properti public function menyapa() { // method echo $this>nama . ' bilang Halo!'; }
}
?>
Agar method menyapa() tidak menampilkan properti yang kosong maka sebelum method menyapa() dipanggil, nilai properti $nama harus diisi dengan suatu nilai terlebih dahulu. Dengan memanfaatkan method constructor, maka properti nama dapat langsung diisikan dengan memberikan suatu nilai pada saat class tersebut diinstansiasi. Contoh penerapan method constructor pada class manusia diperlihatkan dalam kode PHP berikut:
<?php // filename: manusia.class.construct.php
public $nama; // atribut / properti nama manusia // method constructor untuk kelas manusia
public function __construct( $arg ) { $this>nama = $arg;
}
// method menyapa pada kelas manusia public function menyapa() {
echo $this>nama . ' bilang Halo!'; }
}
?>
Dapat diketahui bahwa pada method constructor kelas manusia menerima sebuah argumen untuk disimpan dalam atribut nama. Maka untuk menginstansiasi kelas manusia menjadi sebuah objek, sekaligus memberikan nilai terhadap atribut nama yang diberikan melalui method constructor dengan cara:
<?php // filename: manusia.construct.php
// menyertakan class manusia pada kode PHP ini include "manusia.class.construct.php";
// instansiasi dengan argumen untuk method constructor $susan = new manusia("Susan");
$susan>menyapa(); // output: Susan bilang Halo!
$joko = new manusia("Joko");
$joko>menyapa(); // output: Joko bilang Halo!
?>
Dengan method constructor, hal-hal yang sifatnya perlu dilakukan secara otomatis ketika sebuah kelas diinstansiasi menjadi objek dapat dimasukkan pada method constructor. Sehingga pada contoh tersebut di atas, pemberian nilai terhadap properti nama dapat disingkat dengan dilakukan secara langsung melalui method constructor pada saat instansiasi objek.
2.3 Inheritance
Suatu definisi kelas dapat mewarisi definisi kelas lainnya (parent class) melalui keyword
extends. Contoh syntax dari pewarisan pada bahasa pemrograman PHP adalah sebagai berikut:
<?php // filename inheritance.php
class ChildClass extends ParentClass { // definisi method dan properti kelas }
Dengan inheritance (pewarisan), kelas yang mewarisi secara otomatis memiliki seluruh member (method dan properti) dari kelas parent-nya. Method dan properti yang diwarisi memiliki fungsional yang sama dengan parent-nya. Sebagai tambahan, kelas child dapat menambahkan properti dan method diluar dari method dan properti yang dimiliki oleh parent class. Contoh penerapan inheritance pada bahasa pemrograman php adalah sebagai berikut:
<?php // file inheritance.manusia.php
// menyertakan file manusia.class.php tempat definisi kelas manusia berada include "manusia.class.php";
// definisi kelas mahasiswa yang mewarisi kelas manusia class mahasiswa extends manusia {
// definisi constructor
public function __construct($nama){ $this>nama = $nama;
}
// properti yang dimiliki oleh kelas manusia public $tugas = 'belajar';
}
// instansiasi kelas mahasiswa $susan = new mahasiswa('Susan');
echo $susan>menyapa()
. ' ketika sedang ' . $susan>tugas;
// Output: Susan bilang Halo! ketika sedang belajar
?>
Dari contoh tersebut di atas dapat diketahui bahwa properti nama diwarisi dari kelas manusia
dan dapat digunakan langsung oleh kelas yang mewarisinya (mahasiswa). Selain itu, kelas
mahasiswa juga memiliki properti $tugas yang tidak dimiliki oleh kelas parent, yaitu kelas
manusia.
2.4 Enkapsulasi
Enkapsulasi merupakan suatu metode untuk menyembunyikan representasi internal sebuah objek dari luar, sehingga tidak dapat digunakan secara langsung dari luar. Mekanisme enkapsulasi dengan metode abstraksi juga merupakan salah satu cara untuk melindungi properti dari luar.
Berikut ini adalah contoh enkapsulasi dengan menggunakan subclass dengan bahasa pemrograman PHP:
<?php // filename: enkapulasi.php
class pakaian {
class manusia {
// private properti baju yang menjadi objek kelas pakaian private $baju;
public function __construct() { $this>baju = new pakaian; $this>baju>warna = 'biru'; }
public function warnaBaju() { return $this>baju>warna; }
}
// instansiasi kelas manusia $susan = new manusia();
// mengakses properti warna dari method warnaBaju()
echo 'Susan memakai baju berwarna ' . $susan>warnaBaju();
Dari kode PHP tersebut di atas properti warna pada kelas pakaian dienkapsulasi dengan menggunakan method warnaBaju() pada kelas manusia. Sehingga properti warna pada kelas
pakaian hanya bisa dibaca nilainya melalui method warnaBaju(), namun tidak dapat diganti nilainya dari instance objek kelas manusia, dalam hal ini objek dari kelas manusia adalah
susan. Dalam contoh ini, properti warna pada kelas pakaian dienkapsulasi menjadi read-only melalui public method warnaBaju() pada kelas manusia.
2.4 Abstract dan Interface
Abstract
Abstract adalah sebuah kelas yang tidak dapat diinstansiasi menjadi sebuah objek. Kelas abstract agar dapat digunakan harus diwarisi terlebih dahulu. Method yang didefinisikan dalam kelas abstract dapat berupa method yang juga abstract dan method biasa (method yang ada implementasi/definisinya). Sebuah kelas dapat mewarisi sebuah kelas abstract. Contoh penggunaan kelas abstract adalah sebagai berikut:
<?php // filename: abstract.class.php
// definisi kelas abstract abstract class manusia {
public $nama; }
// kelas mahasiswa yang mewarisi kelas abstract class mahasiswa extends manusia{
// definisi constructor pada kelas mahasiswa public function __construct($nama){
$this>nama = $nama; }
}
// instansiasi kelas
$susan = new mahasiswa('Susan');
// akses properti yang dimiliki oleh kelas abstract echo 'Nama mahasiswa: ' . $susan>nama;
?>
Jika kelas abstract dicoba untuk diinstansiasi maka interpreter PHP akan menghasilkan pesan kesalahan.
Interface
Interface dapat didefinisikan dan dianalogikan sebagai sebuah kontrak. Dimana setiap kelas yang mengimplementasikan interface harus mengikuti definisi yang ditentukan dalam interface. Jika kelas yang mengimplementasikan interface tidak mengikuti aturan definisi yang sama persis dengan signature yang ditentukan dalam interface, interpreter PHP akan menghasilkan pesan kesalahan fatal (fatal-error). Semua method yang didefinisikan dalam interface harus bersifat public. Kelas-kelas yang dibuat dalam bahasa pemrograman PHP dapat mengimplementasikan lebih dari satu interface.
Contoh penggunaan interface dalam bahasa pemrograman PHP adalah sebagai berikut:
<?php // filename: interface.php
// definisi interface interface manusia {
// signature sebuah method
// memerlukan sebuah argumen lauk dengan nama method makan public function makan($lauk);
}
// class yang mengimplementasikan interface manusia class mahasiswa implements manusia {
public $nama;
public function __construct($nama){ $this>nama = $nama;
}
// implementasi method makan($lauk) yang dibuat
// harus sama persis dengan signature yang didefinisikan // dalam interface
public function makan($lauk){
echo $this>nama . ' makan ' . $lauk; }
}
Dari contoh penggunaan interface pada bahasa pemrograman PHP tersebut, dapat diketahui bahwa didefinisikan sebuah interface manusia yang memiliki method makan() dengan argumen $lauk. Dengan demikian seluruh kelas yang mengimplementasikan interface
manusia harus memiliki sebuah method dengan nama method makan() dan method tersebut memiliki sebuah argumen dengan nama $lauk. Jika signature dalam interface tidak diimplementasikan sesuai dengan signature yang didefinisikan dalam interface, maka interpreter PHP akan menghasilkan pesan kesalahan fatal.
Jika aturan dalam pendefinisian kelas harus dibuat dengan teratur dan ketat, maka penggunaan interface dalam mendefinisikan sangat dianjurkan untuk menjaga konsistensi penamaan method dan argumennya di semua kelas yang mengimplementasikan interface yang sama.
2.6 Polymorphism
Polymorphism adalah suatu teknik pemrograman dengan mengimplementasikan suatu interface yang sama untuk tipe data kelas yang berbeda. Sehingga sebuah objek yang merupakan instansiasi dari kelas dapat "berubah" tipe datanya sesuai dengan kelas yang didefinisikan dengan method dan properi yang sama. Sebagai contoh, pada kode PHP berikut:
<?php // filename: polymorphism.php
// definisi kontrak "binatang" interface class binatang {
// memiliki method bicara() public function bicara(); }
// class kucing yang mengimplementasikan interface binatang class kucing implements binatang {
// harus memiliki method bicara, sesuai kontrak interface public function bicara() {
echo "Meong..."; // definisi method bicara class kucing }
}
// class anjing yang mengimplementasikan interface binatang class anjing implements binatang {
// juga harus memiliki method bicara, sesuai kontrak interface public function bicara() {
echo "Guk... Guk..."; // dengan definisi yang berbeda dengan class kucing }
}
// contoh penggunaan polymorphism
$hewan = new kucing; // saat ini hewan adalah objek kucing $hewan>bicara(); // akan menghasilkan output "Meong..." $hewan = new anjing; // hewan berubah menjadi objek anjing
?>
REFERENSI
Suehring, Steve. 2009. PHP6 and MySQL 6 Bible. Wiley Publishing, Inc. USA
John C. Mitchell, Concepts in programming languages, Cambridge University Press, 2003 Wm. Paul Rogers, Encapsulation is not information hiding, JavaWorld.com, 05/18/01
PROPAGASI
A. Latihan dan Diskusi (Propagasi Vertikal dan Horizontal)
1. Buatlah kelas yang menganalogikan konsep objek kendaraan! Susunlah kelas tersebut sedemikian rupa sehingga pewarisan (inheritance) diantara kelas-kelas tersebut terlihat dalam penggunaannya!
B. Tugas (Evaluasi mandiri)
1. Jelaskan apa yang dimaksud dengan kelas, objek, properti, dan method! 2. Apa yang dimaksud dengan abstract dan interface?
3. Jelaskan mengenai inheritance, encapsulation, dan polymorphism! Berikan contoh programnya dengan mengambil contoh dalam kehidupan sehari-hari!