Wednesday, 7 August 2013

Memahami OOP dengan PHP

Pengertian Object Oriented Programming

Object Oriented Programming (OOP) adalah sebuah paradigma, cara berfikir untuk memecahkan masalah dalam pengembangan program/aplikasi. Dengan OOP, permasalahan akan dibentuk menjadi class-class yang di dalamnya terdapat method-method dan properti-properti yang membangun class tersebut.


Pengertian Class dan Object

Untuk memahami OOP kita harus paham terlebih dahulu apa berbedaan antara class dan object dan hubungan class dan object.

Class adalah kumpulan atas data, properties dan method dalam suatu unit untuk tujuan tertentu. Misal, saya membuat class Siswa, properties dan method di dalam class adalah semua yang berhubungan dengan siswa (dalam konteks pengembangan aplikasi).

Misal, method simpanSiswa, updateSiswa dan deleteSiswa lalu properties seperti nama_siswa, alamat_siswa.

Object adalah class yang telah di instansiasi, Jika class siswa akan digunakan, maka kita instansiasi class tersebut dan hasil instansiasi inilah yang disebut object.

Dari penjelasan di atas kita bisa ambil kesimpulan, bahwa class adalah blueprint dari sebuah object. Semua class properties dan class method yang ada dalam object adalah representasi dari class yang telah di definisikan.


Structure Class

Structure sebuah class sangat sederhana, sehingga sangat mudah membuat sebuah class, hanya dengan menuliskan syntax class di depan class name yang ingin dibuat lalu diikuti sepasang kurung kurawal "{ }", perhatikan code berikut:

Pemberian nama class, harus diawali dengan huruf atau underscore, lalu dapat diikuti dengan nomor, huruf atau underscore. Setelah itu diikuti dengan kurung kurawal "{ }", di dalam kurung kurawal ini kita bisa mendefinisikan class properties dan class method.

Setelah kita memiliki class, class ini dapat kita instansiasi dengan code seperti di bawah:

Kita juga bisa melihat structure dari class yang kita buat, dengan menggunakan fungsi var_dump().

Sekarang coba buat sebuah class seperti code di atas dan berinama test.php, lalu jalankan di browser. Jika berhasil akan terlihat tampilan seperti dibawah:

object(ClassSaya)#1 (0) { }

Bila hasil dari code yang ditulis sama dengan di atas, selamat berarti anda sudah membuat sebuah class. Karena dalam OOP class adalah ruh, maka kita harus paham betul tentang class dan sifat-sifatnya.


Mendefinisikan Class Properties

Mendefinisikan properties dalam class sama dengan mendefinisikan variable biasa. Kecuali sebuah properties terikat oleh object, kita harus memanggilnya dengan mendefinisikan object-nya terlebih dahulu.

Karena ada juga cara dimana properties bisa digunakan tanpa instansiasi, ini akan dibahas pada static class properties dan method di bawah.

Perhatikan cara membuat properties dalam class:

Dalam code di atas baris ke-4 kita mendefinisikan properties dengan menuliskan public. public berarti properties ini dapat diakses/digunakan dari dalam dan luar class (class lain).


Mendefinisikan Class Methods

Method adalah fungsi yang lebih spesifik dari sebuah class (biasa disebut function, karena membuatnya dengan menuliskan syntax function sebelum method name). Method ada yang mengembalikan nilai dan tidak mengembalikan nilai. Perbedaannya, method yang mengembalikan nilai menggunakan syntax return. Perhatikan code berikut:

Result dari code di atas:

Saya properti pertama!
Saya properti baru!

Penjelasan lebih lengkap bisa dibuka manual page PHP-nya.

Penjelasan dari code di atas adalah;

  1. ClassSaya memiliki satu properties dan dua method.
  2. Properties $prop1 bersifat public dan global (bisa digunakan semua method pada classSaya, dan dapat diakses dari luar class-nya).
  3. Method pertama setProperty adalah method yang tidak mengembalikan nilai dan memiliki satu parameter $newval. Proses yang terjadi di dalam method ini adalah, mengubah nilai $prop1 menjadi $newval (parameter).
  4. Method kedua getProperty adalah method yang mengembalikan nilai. Proses yang terjadi di dalam hanya mengembalikan nilai dari properties $prop1 yang telah mendapat nilai baru dari method setProperty.
  5. Instansiasi ClassSaya
  6. Memanggil method getProperty
  7. Memanggil method setProperty dan mengisikan value pada parameter yang dimiliki method setProperty.
  8. Memanggil method getProperty lagi yang nilai properties-nya sudah diubah.

Salah satu kelebihan dan kekuatan dari OOP adalah kita dapat membuat sebuah class yang dapat digunakan secara berulang-ulang. Sehingga kita terhindar dari penulisan code yang sama secara berulang-ulang atau yang biasa disebut DRY (don't repeat yourself).


Menggunakan Constructors dan Destructors

Method Constructors adalah method yang akan dijalankan pertamakali saat instansiasi class. Untuk lebih jelasnya perhatikan syntax berikut:

Output dari code di atas :

Ini adalah method __construct dari class "ClassSaya" !
Saya properti pertama!
penutup.

Pada contoh di atas terlihat bahwa method __construct dieksekusi diawal ketika instansiasi terjadi. Dalam kenyataan saat pengembangan aplikasi class method __construct sangatlah membantu kita. Memang belum terbayang untuk sekarang.

Pada class __construct terdapat syntax __class__, syntax ini berfungsi menampilkan nama class dimana syntax ini dideklasrasikan. Syntax ini disebut Magic constants selengkapnya bisa dibaca pada manual PHP.

Method selanjutnya adalah __destruct, methode ini juga sangat berguna ketika kita ingin melakukan sesuatu ketika class yang kita instansiasi telah selesai digunakan. Misal melakukan pemutusan connection ke database, atau membersihkan resourch yang telah digunakan.

Perhatikan code di bawah:

Output dari code di atas:

Ini adalah method __construct dari class "ClassSaya" !
Saya properti pertama!
penutup.
Ini adalah method __destruct dari class "ClassSaya" !

Terkadang kita berkeinginan untuk menghancurkan sebuah object/variable yang telah kita buat, untuk melakukan ini kita bisa memanfaatkan fungsi unset() yang dapat menghancurkan sebuah object secara explisit, untuk lebih jelasnya perhatikan code berikut:

hasil code:

Ini adalah method __construct dari class "ClassSaya".
Saya properti pertama!
Ini adalah method __destruct dari class "ClassSaya".
penutup.

Perhatikan perbedaan dari hasil code di atas, terlihat jika kita menggunakan fungsi unset() method __destruct dijalankan sebelum code terakhir dijalankan. Ini terjadi karena secara explisit fungsi unset() telah menghancurkan object, sehingga fungsi __destruct dijalankan sesaat sebelum object-nya hancur dan code terakhir dieksekusi.


Konversi ke String

Untuk menghindari error yang terjadi saat kita ingin menampilkan string dari ClassSaya, kita bisa menggunakan salah satu magic method yaitu __toString, untuk melihat perbedaannya perhatikan code berikut:

Perhatikan code baris ke-37, saya coba mengubah object menjadi string dengan langsung menampilkannya. Dengan code seperti ini hasil dari code adalah pesan error seperti di bawah:

Pada error dijelaskan jika object dari class ClassSaya tidak dapat langsung diubah menjadi string, tapi dengan magic method __toString error ini dapat dihindari, sehingga object tetap menampilkan string. Lihat code berikut yang sudah diubah:

Hasil code:

Ini adalah method __construct dari class "ClassSaya".
Using the toString method: Saya properti pertama!
Ini adalah method __destruct dari class "ClassSaya".
penutup.

Method __toString ini otomatis akan terbaca ketika kita instansiasi object.


Memahami Class Inheritance

Dalam OOP kita mengenal istilah inheritance yaitu penurunan/pewarisan sifat-sifat object, maksud dari ini adalah kita bisa membuat sebuah class yang semua properties dan method-nya bisa kita gunakan ketika kita membuat class baru dengan menggunakan sintax extends. Lihat code berikut:

Hasil dari code di atas:

Ini adalah method __construct dari class "ClassSaya".
Ini adalah method baru __construct dari class "ClassLain".
Saya properti pertama!
penutup.
Ini adalah method __destruct dari class "ClassSaya".

Perhatikan code di atas, terdapat dua class yang saling berhubungan, dimana hubungan itu terjadi dari class kedua yang menggunakan syntax extends yang berarti class kedua adalah inheritance dari class pertama, dalam class kedua hanya terdapat satu method, tapi dari hasil instansiasi class kedua kita bisa menggunakan method dari class pertama. Dan perhatikan hasil dari code di atas, terlihat bahwa class pertama juga dieksekusi ketika code melakukan instansiasi terhadap class kedua.

Dengan inheritance class menjadi hirarki, dan class di bawah dari hirarki ini akan selalu bisa menggunakan class method dan properties dari class di atasnya selama visibility public dan protected.


Menggunakan Visibility pada class Method dan Properties

NOTE: Visibility adalah feature baru dari PHP 5, jika kita menggunakan PHP 4 lihat halaman manual-nya untuk kemampuan PHP 4 dalam OOP.


Public Class Method dan Properties

PHP secara default akan memberikan visibility public kepada setiap class method atau properties yang tidak kita deklarasikan. Dengan mendeklarasikan public pada class method dan properties, berarti kita memberikan izin kepada code diluar class pemilik untuk dapat mengakses. Public berarti dua hal, dapat diakses dari dalam class itu sendiri dan luar class.

Seperti contoh code inheritance di atas, class method dan properties memiliki visibility public.


Protected Class Method dan Properties

Jika class method atau properties dideklarasikan protected maka dia hanya bisa diakses/gunakan oleh class itu sendiri dan class turunannya.

Perhatikan contoh code di bawah:

Hasil code-nya:

Ini adalah method __construct dari class "ClassSaya".
Saya properti pertama!
Ini adalah method __destruct dari class "ClassSaya".

Dari contoh code di atas class kedua yang merupakan class turunan dari class pertama, dapat memenggunakan method dengan visibility protected dari class pertama. Tapi jika method dengan visibility protected dipanggil dari luar class pertama dan class kedua code akan menampilkan error.

Jadi protected berarti hanya dapat diakses oleh class pemilik dan class yang menjadi turunan class pemiliknya.


Private Class Method dan Properties

Untuk visibility private memiliki arti bahwa class method dan properties hanya bisa digunakan oleh class yang membuatnya. Jadi class lain tidal dapat menggunakannya termasuk class turunan (yang menggunakan extends) dari class yang memiliki class method dan properties tersebut.

Menghasilkan error, yang menjelaskan bahwa class method yang diakses adalah private method.


Static Properties dan Method

Mendeklarasikan properties atau method dengan static akan membuat properties atau method dapat diakses tanpa instansiasi, dan keuntungan menggunakan static adalah nilai yang telah diberikan akan tetap tersimpan. Perhatikan code berikut:

Hasil dari code di atas:

Hasilnya : 1
Hasilnya : 2
Hasilnya : 3
Hasilnya : 4
Hasilnya : 5
Hasilnya : 6
Hasilnya : 7
Hasilnya : 8
Hasilnya : 9
Hasilnya : 10

Perhatikan cara mengakses class method atau properties yang dideklarasikan sebagai static yaitu dengan menggunakan titik dua ganda "::", berbeda dengan cara mengakses method yang tidak static.

Jika diperhatikan pada baris ke-37 contoh code di atas, ada syntax "self", ini sama dengan syntax "$this" jika mengakses yang bukan static, yang memiliki arti diri sendiri. Maksudnya adalah, jika kita mengakses properties dan method dari class lain kita harus instansiasi class yang dimaksud lalu menunjuk properties atau method yang ingin digunakan dengan menggunakan object hasil instansiasinya. Sama dengan maksud itu, "$this" dan "self" juga berarti object yang menunjuk properties atau method bedanya "self" dan "$this" digunakan di dalam class itu sendiri.


Comment dengan DonBlock

Sebenarnya donBlock tidak termasuk dalam OOP, tapi ini salah satu unsur pendukung untuk dokumentasi saat penulisan code. Penulisan donBlock sangat mudah dengan menggunakan garis miring "/" dan diikuti dengan tanda asterik "*" untuk pembuka dan ditutup dengan simbol yang sama, perhatikan contoh donBlock yang sederhana:

/** 
 * ini adalah contoh donBlock sederhana
 * keterangan tentang code didefinisikan disini
 */

Kelebihan dari donBlock adalah penggunaan Tag, dengan menuliskan symbol "@" diikuti dengan nama tag lalu value dari tag. Ada beberapa tag name yang paling umum dan sering digunakan. diantaranya:

  • @author, digunakan untuk menuliskan dan menjelaskan pembuat code. Biasanya format penulisannya name Sukma Saputra <swsaputra@email.com>
  • @copyright, tag ini berhubungan dengan waktu pembuatan/penulisan code dan pemegang copyright. Format penulisannya biasanya 2010 Copyright Holder.
  • @license, ini adalah tag yang memberitahukan license dari code. Seperti MIT, appache license atau free license dijelaskan disini. Biasanya dituliskan juga link license dari code. misal: http://www.php.net/license/3_01.txt PHP License 3.01
  • @var, adalah tag yang menjelaskan variable / properties yang ada dalam class. Penulisannya biasanya menjelaskan tipe data dari variable / properties tersebut dan fungsinya.
  • @param, tag ini digunakan untuk penjelasan method yang memiliki parameter, formatnya dengan menuliskan nama parameter, tipe data-nya dan keterangan.
  • @return, tag ini juga digunakan untuk menjelaskan method yang mengembalikan data, pada tag ini dituliskan tipe data dari data kembaliannya.

Dengan menuliskan donBlock seperti di atas akan sangat membantu orang lain yang meneruskan atau yang membutuhkan code kita.


Kesimpulan

Jika kita coba untuk membandingkan metode penulisan program antara OOP dan procedural tidak ada yang paling baik atau paling buruk diantara keduanya. Tapi ada beberapa keuntungan yang akan kita peroleh ketika kita menggunakan paradigma OOP. Diantaranya:

  • Mudah dalam penerapannya. Dengan membuat object, data yang ada di dalam tidak akan menjadi rancu. Karena jelas input dan output dari sebuah class. Sehingga akan mudah dalam penerapannya.
  • Memiliki organisasi code yang lebih baik, karena biasanya code dikelompokkan berdasarkan kesamaan module. Dan dengan inheritance akan terlihat jelas class-class yang memiliki hubungan dengan class induknya.
  • Mudah dikelola. Pengelolaan akan menjadi mudah karena code menjadi lebih modular, dan akan sangat mudah jika ingin melakukan perubahan karena kita hanya akan mengubah module yang memang ingin diubah tanpa mengganggu code lain yang tidak ada hubungannya.

Tutorial ini tidak dibuat khusus untuk programmer PHP, karena konsep OOP berlaku disemua jenis bahasa pemrograman modern. Dengan memahami konsep OOP ini akan memudahkan kita mempelajari bahasa pemrogramman lain yang mendukung atau bahkan mewajibkan kita paham konsep OOP seperti bahasa objective-c, C# dan java.

Apa yang penulis jelaskan di atas hanya pintu masuk dari konsep OOP karena masih banyak lagi yang harus dipamahi dari OOP, dan penulis menjelaskan semua berdasarkan pengalaman dan beberapa refrensi ebook. Bila setelah membaca ini kawan-kawan ingin mengajukan pertanyaan silakan tuliskan dalam kotak comment di bawah.

No comments:

Post a comment