Tujuan Praktikum : Memberikan pemahaman kepada mahasiswa tentang konsep Object Oriented Programming. Memberikan pemahaman kepada mahasiswa tentang implementasi konsep OOP pada bahasa scripting PHP Memberikan pemahaman kepada mahasiswa tentang MVC (Model View Controller) Design Pattern Memberikan pemahaman kepada mahasiswa implementasi MVC dengan menggunakan PHP scripting
I. Dasar Teori OOP a. Class Class adalah sebuah blueprints untuk sebuah object, dengan kata lain bahwa class adalah cetakan dari object. Pada bahasa pemrograman, class merupakan sekelompok kode yang dituliskan untuk mendefinisikan properti dan metod yang ada pada sebuah object. Berikut adalah contoh script PHP untuk membuat class.
1 2 3 4 5 6 <?php Class Demo {
} ?>
Class didefinisikan dengan memuat properti dan metode, dimana properti adalah sebuah data yang menjelaskan tentang class dan metode adalah tingkah laku yang bisa dilakukan oleh object. Berikut adalah contoh kode sebuah class yang dilengkapi dengan properti dan metode. 1 2 3 4 5 6 7 8 9 10 11 <?php Class Demo { $nama; // properti
function sayHallo() //metode { echo Hallo $this->nama; } } ?>
b. Object Object adalah hasil instansiasi dari class, dan mengandung seluruh resource yang telah didefinisikan pada class. Berikut adalah cara meng-instansiasi object dari class yang sudah didefinisikan.
1 2 3 4 5 6 <?php
require_once(file-class.php); //file yang memuat class
$obj = new Demo(); //proses instansiasi object
7 ?>
Karena class merupakan cetakan atau blueprints dari object, maka object hasil instansiasi juga mempunyai resource seperti class. Berikut contoh kode memanggil properti dan metode.
1 2 3 4 5 6 7 8 9 10 <?php
require_once(file-class.php); //file yang memuat class
$obj = new Demo(); //proses instansiasi object
$obj->nama = Achmad Widhy; //mendefinisikan nilai properti echo $ojb->nama; // memanggil properti $obj->sayHallo(); // menjalankan metode ?>
Maka apabila dijalankan akan menghasilkan :
Hallo Achmad Widhy
c. Encapsulation Encapsulation adalah mekanisme membungkus sebuah data pada sebuah object. Dalam istilah lain yang sertingkali dilontarkan adalah Information Hiding. Pada PHP terdapat 3 modifier yang dapat diimplementasikan untuk melakukan pembungkusan data yaitu private, protected dan public. Modifier tersebut digunakan untuk mendefinisikan tingkat visibilitas sebuah data (properti) atau fungsi (metode) yang ada di dalam class.
Modifier Keterangan Public Untuk mendefinisikan data atau metode yang akan terlihat dari luar oleh siapapun dan dimanapun. Private Untuk mendefinisikan data atau metode agar hanya terlihat pada class/object itu sendiri. Protected Untuk mendefinisikan data atau metode untuk tidak terlihat dari luar (seperti private), tetapi akan dapat diakses oleh anak dari class tersebut.
Berikut adalah contoh kode implementasi dari encapsulasi.
function __construct($name, $age = 0) { if (!is_int($age)) { throw new Exception("Cannot assign non integer value to integer field, 'Age'"); }
$this->_age = $age; $this->_name = $name; }
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 public function setAge($age) { if (!is_int($age)) { throw new Exception("Cannot assign non integer value to integer field, 'Age'"); }
$this->_age = $age; }
public function yearsToRetire() { return 67 - $this->_age; } }
$person = new Person("Wes"); $person->setAge(31);
echo $person->yearsToRetire();
?>
Properti _name dan _age mempunyai modifier private, dimana tidak akan bisa dikases langsung. Properti tersebut akan bisa diakses jika kita mendefinisikan sebuah metode untuk mengakses properti tersebut yang memiliki modifier public.
d. Constructor dan Destructor PHP memungkinkan pengembanguntuk menyatakanmetodekonstruktor untuk sebuahclass.Classyangmemiliki metodekonstruktormemanggil metode inipada setiap objekyang baru dibentuk (diinstansiasi), sehingga sangat cocokuntukinisialisasibahwa objekmungkin perlusebelum digunakan. Berikut contoh kode konstruktor.
1 2 3 4 5 6 7 8 9 10 11 <?php
class Person { function __construct() { print "Konstruktor Person\n"; } }
$obj = new Person();
?>
PHP memperkenalkankonsepdestructorsama dengan yanglainbahasa berorientasi objek, seperti C++.Metodedestruktorakan dipanggilsegera setelahtidak ada referensilain untukobjek tertentu. Berikut contoh kode destruktor.
1 2 3 4 5 6 7 8 9 <?php
class Person { function __destruct() { print "Destruktor Person\n"; } }
$obj = new Person(); 10 11
?>
e. Inheritance Dalam pemrograman berorientasi objek(OOP), Inheritance (pewarisan)adalah cara untuk menggunakan kembali kode objek yang ada, atau untuk mendirikan subtype dari objek yang sudah ada, atau keduanya, tergantung pada dukungan bahasa pemrograman. Dalam warisanklasik dimana objek yang didefinisikan oleh class, class dapat mewarisi atribut dan perilaku dari class yang sudah ada yang disebut class atau super classes atau class induk atau class leluhur. Class baru yang dikenal sebagai class turunan atau subclass atau class anak. Hubungan class melalui warisan menimbulkan hirarki. Berikut contoh kasus inheritance.
Kode dari class diagram diatas adalah sebagai berikut. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <?php //Class hewan class hewan { protected $jml_kaki; protected $warna_kulit;
//Class burung class burung extends hewan { protected $sayap;
function berpindah() { echo "Saya terbang"; }
function makan() { echo "Saya makan dengan mematuk"; }
}
//Class monyet class monyet extends hewan {
}
?>
f. Final Keyword PHP memperkenalkan final keyword, dimana ini akan mencegah proses overriding method pada class anak (sub-class). Hal ini bisa kita terapkan pada metode dan class. Apabila metode kita berikan status final, maka metode tersebut tidak akan bisa dioverride, begitu juga pada class, apabila kita berikan status final pada deklarasi class maka class tersebut tidak bisa diperpanjang (diwariskan). Contoh kode menggunakan final keyword.
Final keyword pada metode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <?php class BaseClass { public function test() { echo "BaseClass::test() called\n"; }
final public function moreTesting() { echo "BaseClass::moreTesting() called\n"; } }
class ChildClass extends BaseClass { public function moreTesting() { echo "ChildClass::moreTesting() called\n"; } }
// Results in Fatal error: Cannot override final method BaseClass::moreT esting() ?> 21
Final keyword pada class 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?php final class BaseClass { public function test() { echo "BaseClass::test() called\n"; }
// Here it doesn't matter if you specify the function as final or not final public function moreTesting() { echo "BaseClass::moreTesting() called\n"; } }
class ChildClass extends BaseClass { } // Results in Fatal error: Class ChildClass may not inherit from final c lass (BaseClass) ?>
g. Class Abstraction PHP memperkenalkan abstract class dan abstract method. Class yang didefinisikan sebagai abstract tidak bisa diinstasiasi, dan class yang terdiri paling tidak satu method abstract harus didefinisikan sebagai abstract class. Class abstract hanya bisa mewariskan resources nya pada class anaknya. Setiap class yang mewarisi class abstract, wajib menuliskan seluruh method abstract yang dipunyai oleh parent class-nya (super class). Berikut contoh pendeklarasian class abstract.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <?php abstract class AbstractClass { // Force Extending class to define this method abstract protected function getValue(); abstract protected function prefixValue($prefix);
// Common method public function printOut() { print $this->getValue() . "\n"; } }
class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; }
public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } }
class ConcreteClass2 extends AbstractClass { public function getValue() { return "ConcreteClass2"; }
public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } 34 35 36 37 38 39 40 41 42 43 }
$class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."\n";
$class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') ."\n"; ?>
h. Object Interfaces Object Interface memungkinkan kita untuk membuat kode yang menentukan method mana yang akan diimplementasikan tanpa harus mendefinisikan bagaimana method tersebut akan bekerja (hanya nama method saja). Interface didefinisikan dengan Interface keyword, mirip dengan deklarasi class biasa, hanya saja definisi atau detail method tidak dituliskan. Seluruh method yang dideklarasikan pada interface harus memiliki modifier public. Untuk mengimplementasikan sebuah interface, kita dapat menggunakan implement keyword. Seluruh method yang ada pada interface harus diimplementasikan seluruhnya. Sebuah class bisa mengimplementasikan lebih dari satu interface. Catatan : - Class tidak bisa mengimplementasikan dua interface yang mempunyai nama method yang sama. - Interface bisa diwariskan seperti class menggunakan extends. - Class yang mengimplementasikan interface harus menggunakan method-method yang ada pada interface tersebut dengan nama dan spesifikasi yang sama persis. Berikut adalah contoh kode tentang object interfaces. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <?php interface a { public function foo(); }
interface b extends a { public function baz(Baz $baz); }
// This will work class c implements b { public function foo() { }
public function baz(Baz $baz) { } }
// This will not work and result in a fatal error class d implements b { public function foo() { }
public function baz(Foo $foo) { } 34 35 } ?>
II. Dasar Teori MVC (Model View Controller) MVC (Model View Controller) pattern adalah sebuah pattern yang banyak digunakan untuk membangun aplikasi web saat ini. MVC pattern terbagi menjadi 3 modul, Model, View dan Controller : - Model, berfungsi untuk mengontrol data, disini dilakukan proses pengambilan dan penyimpanan data sebuah sistem, biasanya data berasal dari database yang digunakan oleh sistem. - View, bertanggung jawab untuk mengatur tampilan dengan format yang spesifik. - Controller, bertanggung jawab untuk meng-handle model dan view layer untuk digabungkan menjadi satu. Controller berposisi di tengah, menghubungkan model dan view, dan sebagai tujuan utama user dalam melakukan request.
Berikut adalah gambaran MVC pattern :
Gambar 1. MVC Pattern Contoh sederhana penerapan MVC pada aplikasi Web dengan PHP, pertama yang kita lakukan adalah mendefinisikan model. 1. Model Model adalah layer yang bertanggung jawab untuk melakukan hubungan dengan database, untuk contoh kali ini tidak menggunakan database, asumsi kita adalah layer model telah berhasil mendapatkan data dari database. Untuk contoh kali ini kita mengambil topik tentang database buku. Karena kita menggunakan topik buku maka untuk tahap awal kita akan menuliskan kode untuk class book.
File book.php 1 2 3 4 5 6 7 8 9 10 11 <? class book {
public $judul; public $pengarang; public $penerbit; public $tahun;
public function getData() { return array( new book('Pemrograman PHP & MySql','Bayu Priyambadha','UB Press','2011'), new book('Pemrograman Framework MVC dengan PHP','Widhy','UB Press','2011'), new book('Membangun Aplikasi Web dengan PHP dan AJAX','Achmad Arwan','UB Press','2012'), new book('Kolaborasi PHP, MVC dan AJAX','Bayu Priyambadha','UB Press','2012') ); } }
?>
Model mempunyai method getData() yang menghasilkan output berupa array dengan isi adalah objek book.
2. View Untuk layer view, kita hanya akan mendefinisikan sebuah template html sebagai tempat untuk menampilkan data. Berikut adalah skrip html untuk layer view.
Kode php yang ada diantara tag html diatas berfungsi untuk menampilkan data yang dikirimkan oleh controller.
3. Controller Sebagai layer yang berfungsi sebagai play maker, controller harus mempunyai akses ke model dan view. Berikut adalah kode untuk controller.
Controller mempunyai method invoke, dimana di method tersebutlah proses penyatuan data dari model dan view digabungkan. Setelah ketiga layer selesai dibuat, maka tahap terakhir adalah membuat file index.php, dimana file ini adalah sebagai file penghubung yang diakses pertama kali user melakukan request. Berikut adalah file index.php. 1 2 3 4 5 6 7 <? include_once'controller.php';
$main_ctrl = new controller(); $main_ctrl->invoke(); ?>
Pada file index.php ini, controller diinstansiasi, dan method invoke dijalankan. Apabila berhasil akan menghasilkan seperti berikut :
Gambar 2. Tampilan Hasil
III. Materi Praktikum Latihan 1: Class dan Object + Modifier Tuliskan code dibawah ini, simpan dalam file Lat4_1.php! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?php //class mobil Class Mobil{ public $nama; public $merk;
//bagian main $ferari=new Mobil(); $ferari->nama="xxx"; $ferari->merk="aaa";
$ferari->getInfo(); ?> a. Bagaimanahasiltampilan di atas? b. Buatlahsebuah method overload getInfodengan parameter $a. Lalujalankandanamatiperubahan yang terjadi. c. Lalu simpulkan apa yang Anda peroleh dari Latihan 1!
Latihan 2: Tuliskan code dibawah ini, simpan dalam file Lat4_2a.php! 1 2 3 4 5 6 <?php Class mahasiswa{ public $nama; public $nim;
function cetak(){ echo $this->nama."<br/>".$this->nim."<br/><br/>"; }
function __destruct(){ echo "Kelas telah dihancurkan"; } }
?>
Tuliskan code dibawah ini, simpan dalam file Lat4_2b.php! 1 2 3 4 5 6 7 8 <?php
require_once("lat4_2a.php");
$mhs2=new mahasiswa("Pennyka","0910683073");
$mhs2->cetak(); ?> Modifikasilah latihan 4_2a dengan menambahkan 1 konstruktor lagi di lat 4_2a baris 11. Lalu jalankan. Bagaimana hasil tampilan di atas sebelum dan sesudah dimodifikasi? Lalu simpulkan apa yang Anda peroleh dari Latihan 2!
Latihan 3: Tuliskan code dibawah ini, simpan dalam file Lat4_3a.php! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <?php
class mahasiswa{ private $nama; private $nim;
function __construct(){}
function setNama($a){ $this->nama=$a; }
function setNim($b){ $this->nim=$b; }
function getNama(){ return $this->nama; }
function getNim(){ return $this->nim; }
function destruct(){} }
?>
Tuliskan code dibawah ini, simpan dalam file Lat4_3b.php! 1 2 <?php
?> a. Apakah program error? Jika error mengapahalitudapatterjadi? b. Rubahlah modifier dari variable namadannimmenjadi protected dan public. Laluamatiperubahan yang terjadi. c. Modifikasilah Lat4_3b sehingga dapat member dan mencetak isi dari nim dan nama dengan modifier private d. Simpulkanapa yang andaperolehdarilatihan 3!
Jawab: Latihan 4: Tuliskan code dibawah ini, simpan dalam file Lat4_4a.php! 1 2 3 4 5 6 7 8 <?php
require_once("lat4_3a.php");
class asisten extends mahasiswa { function __construct(){} }
Tuliskan code dibawah ini, simpan dalam file Lat4_4b.php! 1 2 3 4 5 6 7 <?php
require_once("lat4_4a.php");
$as = new asisten(); $as->setNama("tes"); echo $as->getNama(); Simpulkan apa yang Anda peroleh dari Latihan 4!
Latihan 5: Abstract Class Tuliskan code dibawah ini, simpan dalam file Lat4_5a.php! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <?php
abstract class mahasiswa { abstract protected function getTugasAkhir(); abstract protected function getProgram($postfix);
public function tugasAkhir() { print $this->getTugasAkhir() . "<br>"; } }
class sarjana extends mahasiswa { protected function getTugasAkhir() { return "Skripsi"; }
class magister extends mahasiswa { public function getTugasAkhir() { return "Tesis"; }
public function getProgram($postfix) { print "{$postfix} S2"; } }
Tuliskan code dibawah ini, simpan dalam file Lat4_5b.php! 1 2 3 4 5 6 7 8 9 10 11 <?php
require_once("lat4_5a.php");
$s = new sarjana; $s->getProgram('Mahasiswa') ."<br>"; $s->tugasAkhir();
$m = new magister; $m->getProgram('Mahasiswa') ."<br>"; $m->tugasAkhir();
a. Bagaimana hasil tampilan dari program di atas? b. Hapuslah kode baris 29 32 pada lat4_5a.php, lalu jalankan lat4_5b.php. Bagaimana hasil tampilan program di atas? Jelaskan mengapa hal tersebut terjadi? c. Simpulkan apa yang anda peroleh pada latihan 4?
Latihan 6: Tuliskankodeberikutpada lat4_6.php 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <?php interface a { public function foo(); }
interface b { public function bar(); }
interface c extends a, b { public function baz(); }
class d implements c { public function foo() { }
public function bar() { 25 26 27 28 29 30 31 }
public function baz() { } } ?>
a. Jelaskan maksud dari program di atas? b. Hapuslah kode baris 27 29, lalu jalankan lat4_6.php. Bagaimana tampilan program di atas? Jelaskan mengapa hal tersebut dapat terjadi? c. Dari contoh kode diatas, buatlah class baru dengan nama e yang mempunyai method foo dan bar. d. Simpulkan apa yang anda peroleh darilatihan 6!
Latihan 7: Tuliskan kode berikut pada lat4_7.php 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <?php class A
{
final public function disp(){
echo "Inside the final function";
}
}
class B extends A{
function disp(){
echo "Inside the final function";
}
}
$obj=new B();
$obj->disp();
?>
a. Bagaimana tampilan program di atas?Jelaskan mengapa hal tersebut terjadi? b. Modifikasi program di atas dengan menghapus kata final pada kode baris 5 dan menambahkan kata final pada baris 2. Bagaimana tampilan program di atas? Jelaskan mengapa hal tersebut terjadi? c. Simpulkan apa yang anda peroleh dari latihan 7! Latihan 8: Tuliskan kode berikut pada lat4_8.php 1 2 <?php
Latihan 9: Dari contoh kode MVC pada penjelasan diatas buatlah : 1. Model berhubungan langsung dengan database mysql dengan sepesifikasi sebagai berikut : a. Database : Library b. Table : book Username dan password menyesuaikan. 2. Buatlah view menjadi sebuah object, susun class view dimana fungsinya adalah mengambil file-file template yang sudah disediakan! 3. Tuliskan masing-masing kodenya, buatlah simulasinya!