Ananfauzi's Blog

May 4, 2013

Pemograman Berorientasi Objek dengan PHP (Part 1)

Filed under: Pemograman PHP — Tags: , , — ananfauzi @ 7:03 am

Setelah kita memahami konsep dari paradigma pemograman berorientasi objek. Pada kesempatan ini, kita akan mencoba melihat ‘the real thing‘ of objek oriented programming. PHP akan coba digunakan untuk menyelam lebih dalam. Terlepas dari kontroversi, apakah PHP dapat dikelompokan sebagai bahasa yang berorientasi objek? Tidak ada salahnya toh, untuk mencoba menulis skrip PHP dari sudut pandang yang berbeda. šŸ˜›

Ketika menulis sebuah program dengan sudut pandang objek oriented, kita memandang penyelesaian masalah sebagai hasil interaksi/eksekusi objek yang terlibat. Contoh permasalahan, bagaimana mencetak kalimat “Hello World…” dilayar?

Dari sudut pandang prosedural, permasalahan tersebut dapat diselesaikan dengan memberi instruksi pencetakkan string ke layar. Sehingga, kode program yang dituliskan adalah

<?php //Berikan perintah untuk mencetak string 
echo "Hello World..."; 
?>

Apabila kita melihat dari sudut object oriented, permasalahan tersebut merupakan hasil aksi suatu objek (kita beri nama ObjekA) yang melakukan aksi pencetakkan string ke layar. Sehingga, kode program yang dituliskan adalah

<?php 
//Buat class untuk objek yang dimaksud
class ObjekA{
      function cetakString(){
           echo "Hello World..";
      } 
} 
$objekA = new ObjekA(); //instansiasi (bentuk) objek dari kelas yang telah dibuat 
$objekA->cetakString(); //perintahkan objek tersebut untuk mencetak string
?>

Kode yang object oriented terlihat lebih panjang. Apakah berarti menulis program secara object oriented itu lebih rumit (sulit)? šŸ˜€

Kode objek oriented yang dituliskan sebagai contoh tersebut, memang lebih panjang dari yang prosedural. Hal ini dikarenakan, pada sudut pandang object oriented kita membentuk sebuah abstraksi (membayangkan) satu atau lebih objek melakukan penyelesaian masalah. Setelah itu, baru dituliskan kode programnya dalam kaidah object oriented.

Mungkin terlihat sulit, namun hal ini akan sangat berguna ketika kita membangun aplikasi dalam skala besar dan kompleks. Hal ini terbukti dengan meningkatnya trend penggunaan bahasa pemograman berorientasi objek belakangan ini.

Sekarang kita akan coba membuat beberapa hal, yang menjadi konsep object oriented programming. — with php off course šŸ˜‰ —

  1. Class (Kelas)
    Class merupakan wadah yang menyimpan semua komponen yang mendefinisikan suatu objek. Komponen-komponen yang mendefinsikan tingkah laku suatu objek dan hal apa saja yang dapat diterapkan padanya, disimpan pada class. Oleh karena itu, class juga sering didefinisikan sebagai blue print objek.

    Pada PHP, sebuah class dibuat dengan menggunakan kata kunci class. Contoh,

    <?php 
    class ClassA{
    
    } 
    ?>
    

    ClassA yang dibuat pada contoh tersebut, merupakan class dengan struktur minimum. Tidak ada hal yang dapat dilakukan oleh objek yang diinstansiasi (dibentuk) dari class tersebut. Agar suatu objek dapat melakukan sesuatu, maka pada class asalnya perlu ditambahkan properti (atribut) dan aksi method. Properti adalah variabel yang menyatakan nilai suatu komponen objek, sedangkan method merupakan fungsi yang merepresentasikan kelakuan objek. Contoh, kita akan membuat class dengan nama Kalkulator

    <?php 
    class Kalkulator{
         //Membuat properti yang diperlukan
         var $hasil;
         
         //Membuat method yang diperlukan
         function tambah($x, $y){
              $this->hasil = $x + $y;
         }
    
         function kurang($x, $y){
              $this->hasil = $x - $y;
         }
    
         function kali($x, $y){
              $this->hasil = $x * $y;
         }
    
         function bagi($x, $y){
              $this->hasil = $x / $y;
         }
    
         function cetak(){
              echo "Nilai variabel hasil = ".$this->hasil."<br />";
         }
    }
    
    $x = 6;
    $y = 3;
    //Membuat objek dari class Kalkulator
    $kalkulator = new Kalkulator();
    
    //Melakukan operasi penjumlahan, menggunakan method tambah yang terdapat pada objek
    echo "Operasi Penjumlahan ".$x." + ".$y."<br />";
    $kalkulator->tambah($x, $y);
    //Mencetak hasil penjumlahan yang telah dilakukan
    $kalkulator->cetak();
    
    //Melakukan operasi pengurangan, menggunakan method kurang yang terdapat pada objek
    echo "Operasi Pengurangan ".$x." - ".$y."<br />";
    $kalkulator->kurang($x, $y);
    //Mencetak hasil pengurangan yang telah dilakukan
    $kalkulator->cetak();
    
    //Melakukan operasi perkalian, menggunakan method kali yang terdapat pada objek
    echo "Operasi Perkalian ".$x." * ".$y."<br />";
    $kalkulator->kali($x, $y);
    //Mencetak hasil perkalian yang telah dilakukan
    $kalkulator->cetak();
    
    //Melakukan operasi pembagian, menggunakan method bagi yang terdapat pada objek
    echo "Operasi Pembagian ".$x." / ".$y."<br />";
    $kalkulator->bagi($x, $y);
    //Mencetak hasil pembagian yang telah dilakukan
    $kalkulator->cetak();
    ?>
    

    Penjelasan:
    Pada class Kalkulator tersebut, terdapat properti $hasil yang belum diisikan nilai tertentu. Class Kalkulator tersebut, juga memiliki method tambah, kurang, kali, bagi yang berfungsi mengisikan nilai pada properti $hasil. Proses pengisian nilai dilakukan melalui operasi aritmatika sederhana, terhadap 2 parameter yang menjadi masukan method-method tersebut. class Kalkulator juga memiliki method cetak, untuk mencetak nilai yang terkandung didalam properti $hasil.

    Apabila kita perhatikan didalam method tambah, kurang, kali, maupun bagi terdapat keyword $this. Keyword ini berfungsi untuk merefrensikan variabel yang berada didalam suatu method kepada variabel yang menjadi properti pada kelas yang sama.

    PHP juga mengenal adanya konstruktor, yaitu method khusus yang akan dijalankan begitu sebuah objek terbentuk dari suatu kelas. Ada dua cara untuk membuat konstruktor di PHP. Pertama dengan membuat method yang diberi nama __construct(), sedangkan cara kedua dengan membuat method yang memiliki nama sama dengan class-nya. Perhatikan contoh berikut ini,

    • Cara pertama,
      <?php
      class Mobil{
           var $warna;
           var $merk;
           var $tipe;
           
           //membuat method konstruktor
           function __construct(){
                $this->warna = "Hitam";
                $this->merk = "Toyota";
                $this->tipe = "Sedan";     
           }
      
           function gantiWarna($warna){
                /*keyword $this mereferensikan ke variabel warna yang menjadi properti class (global)
                keyword ini yang menjadi penanda bagi intepreter PHP. Mana variabel warna yg menjadi
                parameter masukan method (local), dan yang menjadi properti class (global). */
                $this->warna = $warna;
           }
      
           function gantiMerk($merk){
                $this->merk = $merk;
           }
      
           function gantiTipe($tipe){
                $this->tipe = $tipe;
           }
      
           function perlihatkanMobil(){
                echo "Mobil ".$this->tipe."<br />";
                echo "Mobil ini bermerk ".$this->merk.", berwarna ".$this->warna."<br /><br />";
           }
      }
      
      //Menbuat objek dari class
      $mobil = new Mobil();
      echo "Mobil Pertama Saya <br />";
      $mobil->perlihatkanMobil();
      
      //Mengganti nilai properti, menggunakan method yang telah dibuat
      $mobil->gantiTipe("Balap");
      $mobil->gantiMerk("Ferrari");
      $mobil->gantiWarna("Merah");
      //Cetak perubahan
      echo "Mobil Kedua Saya <br />";
      $mobil->perlihatkanMobil();
      ?>
      
    • Cara Kedua,
      relatif sama dengan cara pertama. Kita hanya mengganti nama dari method __construct(), dengan nama yang sama dengan class. Check this out.. šŸ˜‰

      <?php
      class Mobil2{
           var $warna;
           var $merk;
           var $tipe;
           
           //Sesuaikan dengan nama class
           function Mobil2(){
                $this->warna = "Hitam";
                $this->merk = "Toyota";
                $this->tipe = "Sedan";     
           }
      
           function gantiWarna($warna){
                /*keyword $this mereferensikan ke variabel warna yang menjadi properti class (global)
                keyword ini yang menjadi penanda bagi intepreter PHP. Mana variabel warna yg menjadi
                parameter masukan method (local), dan yang menjadi properti class (global). */
                $this->warna = $warna;
           }
      
           function gantiMerk($merk){
                $this->merk = $merk;
           }
      
           function gantiTipe($tipe){
                $this->tipe = $tipe;
           }
      
           function perlihatkanMobil(){
                echo "Mobil ".$this->tipe."<br />";
                echo "Mobil ini bermerk ".$this->merk.", berwarna ".$this->warna."<br /><br />";
           }
      }
      
      //Menbuat objek dari class
      $mobil2 = new Mobil2();
      echo "Mobil Pertama Saya <br />";
      $mobil2->perlihatkanMobil();
      
      //Mengganti nilai properti, menggunakan method yang telah dibuat
      $mobil2->gantiTipe("Balap");
      $mobil2->gantiMerk("Ferrari");
      $mobil2->gantiWarna("Merah");
      //Cetak perubahan
      echo "Mobil Kedua Saya <br />";
      $mobil2->perlihatkanMobil();
      ?>
      

    Cara pertama dan kedua akan memberikan keluaran yang sama.

  2. Object (objek)
    Pada contoh sebelumnya, secara tidak langsung kita sudah banyak membuat, dan menggunakan objek. Berkut ini adalah beberapa penggalan skrip PHP, yang sudah kita buat sebelumnya.

    <?php
    ...
    $objekA = new ObjekA();
    $objekA->cetakString();
    ?>
    
    <?php
    ...
    $kalkulator = new Kalkulator();
    ...
    $kalkulator->cetak();
    ...
    ?>
    
    <?php
    ...
    $mobil = new Mobil();
    $mobil->perlihatkanMobil();
    ...
    ?>
    

    $objekA, $kalkulator, and $mobil that’s all is object. Untuk membuat objek dari suatu kelas, kita gunakan perintah new. Dengan bentuk umum sebagai berikut
    $nama_object = new NamaClass().
    Oleh karena itu, objek juga disebut sebagai instansiasi (bentukan) dari class

    Pola perilaku sebuah objek mengacu kepada properti dan method yang berada pada class asalnya. Objek sendiri merupakan element yang dibuat, dimanipulasi, dan dihancurkan ketika eksekusi program berlangsung. Class hanyalah semacam template statik untuk membuat objek.

    Hal yang menarik dari paradigma berorientasi objek ini adalah, dari sebuah class kita dapat membuat satu atau lebih objek. Dimana kta bisa melakukan memberi perlakuan yang berbeda untuk tiap-tiap objek. Check this out… šŸ˜‰

    <?php
    class MobilBalap{
         var $pengemudi;
         var $jarak;
         var $waktu;
         var $kecepatan;
         var $percepatan;
    
         function __construct($pengemudi, $jarak, $waktu, $kecepatan, $percepatan){
              $this->pengemudi = $pengemudi; 
              $this->jarak = $jarak;
              $this->waktu = $waktu;
              $this->kecepatan = $kecepatan;
              $this->percepatan = $percepatan;
         }
    
         function hitungJarak($waktu){
              $this->waktu = $waktu;
              //Rumus GLBB Fisika
              $this->jarak = ($this->jarak) + ($this->kecepatan * $this->waktu) + (0.5 * $this->percepatan * $this->waktu * $this->waktu);
         }
    
         function posisiPengemudi (){
              echo $this->pengemudi." menempuh jarak ".$this->jarak." meter, pada detik ke ".$this->waktu."<br />";
         }
    }
    
    //Bentuk dua buah objek, dari class MobilBalap
    $mobil1 = new MobilBalap("Michael Schumacher", 0, 0, 40, 5);
    $mobil2 = new MobilBalap("Kimi Raikonen", 0, 0, 0, 10);
    //Kimi Raikonen diberi waktu 2 jam untuk bisa menyusul Michael Schumacher, apakah sanggup?
    for($i=0;$i<7200;$i++){
         $mobil1->hitungJarak($i);
         $mobil1->posisiPengemudi();
         $mobil2->hitungJarak($i);
         $mobil2->posisiPengemudi();
         if($mobil2->jarak > $mobil1->jarak){
              ?>
              <h2>
              <?php
              echo $mobil2->pengemudi." berhasil menyusul ".$mobil1->pengemudi."<br />";
              echo "Pada detik ke ".$mobil2->waktu.", setelah menempuh jarak ".$mobil2->jarak." meter<br />";
              ?>
              </h2>
              <?php
              break;
         }
         echo "<br />";
    }
    ?>
    

    Balapan yang cukup seru bukan? šŸ˜€
    sekarang kita bahas sedikit behind the scene-nya

    • Pertama kita buat class MobilBalap, dengan konstruktor yang memiliki empat parameter masukan $pengemudi, $jarak, $waktu, $kecepatan, dan $percepatan.
    • Pada class MobilBalap tersebut, terdapat method hitungJarak() yang menghitung jarak yang telah ditempuh untuk tiap satuan waktu.
    • Class MobilBalap juga memiliki method posisiPengemudi(), untuk mencetak posisi jarak setiap pengemudi tiap satuan waktu
    • Sebelum memulai balapan, dibentuk dua buah objek dari class MobilBalap yang mewakili dua pembalap berbeda.
      Dikarenakan konstruktor class MobilBalap membutuhkan empat parameter untuk mengisi propertinya. Saat instansiasi (pembentukan) objek, tidak lupa kita isikan parameter masukan yang diperlukan.
    • Balapan pun dimulai dengan alokasi waktu 2 jam = 7200 detik.

Sampai disini dulu pembahasan kita kali ini. Insyalloh, akan dilanjutkan dilain kesempatan.
Selamat bersenang-senang…. šŸ˜›

Related Post

1 Comment »

  1. Reblogged this on ITechonology.

    Comment by itechonology — May 11, 2013 @ 11:30 am


RSS feed for comments on this post. TrackBack URI

Leave a comment

Create a free website or blog at WordPress.com.