Tutorial PHP OOP Part 13 : Pengertian Class Abstrak
Pada PHP 5 kita mengenal class abstrak dan method abstrak. Class abstrak (
abstract class)
didefinisikan sebagai class yang tidak bisa diinstantisasi menjadi
object. Sebuah class abstrak setidaknya memiliki satu method abstrak (
abstract method). Untuk menggunakan sebuah class abstrak, kita harus membuat class turunan dari class abstrak tersebut.
Tujuan dari dibuat abstrak class adalah agar setiap class turunan
menggunakan method abstrak pada class induk secara fleksibel. Jadi pada
method abstrak di class induk hanya terdapat signature saja tanpa isi
yang konkrit.
Membuat Class Abstrak
Untuk membuat class abstrak, kita menggunakan keyword "
abstract"
didepan keyword class. Sebuah class abstrak harus memiliki setidaknya
satu method abstrak. Namun class abstrak juga bisa memiliki properti dan
method normal layaknya class konkrit.
- abstract class AbstractClass {
- ....
- }
Membuat Method Abstrak
Untuk membuat method abstrak, kita menggunakan keyword "
abstract"
didepan keyword function. Jika didefinisikan hak akses-nya seperti
public, private dan protected maka kita menempatkan keyword abstract
tadi didepan hak akses, misal
abstract public function namaFunction().
- abstract class AbstractClass {
-
- abstract protected function abstractMethod();
- }
Yang unik dalam membuat method abstrak ini adalah kita tidak perlu
membuat isi method, karena memang method ini abstrak alias tidak nyata.
Kita baru akan mengisi method nanti didalam class turunan. Jadi kita
hanya bisa membuat method abstrak ini didalam class induk saja.
Penggunaan Class Abstrak dan Method Abstrak
Dalam penggunaan class abstrak dan method abstrak, kita harus
memperhatikan beberapa hal penting yang jika tidak dipenuhi akan
berakibat error dan program tidak jalan. Hal-hal tersebut diantaranya
adalah sebagai berikut :
1. Class Abstrak tidak bisa diinstatisasi
Sebuah class abstrak tidak bisa langsung diinstantisasi menjadi object.
Class Abstrak hanya bisa diinstantisasi menjadi object melalui class
turunan. Jadi class sbstrak hanya merupakan bluprint dari class turunan.
Contoh berikut ini akan menghasilkoan error "
Fatal error: Cannot instantiate abstract class" jika dieksekusi :
- <?php
- abstract class Rumus {
- abstract public function luas_lingkaran();
- }
- $rumus=new Rumus();
- ?>
2. Class turunan harus mengimplementasi semua method abstrak pada class induk.
Ketika kita membuat class turunan dari class induk yang abstrak, maka kita harus mengimplementasi
semua method abstrak yang ada pada class tersebut. Jika ada satu saja method abstrak yang tidak diimplementasi akan muncul error.
Contoh berikut ini akan menghasilkan error "
Fatal error: Class
... contains 1 abstract method and must therefore be declared abstract
or implement the remaining methods " jika dieksekusi :
- <?php
- abstract class Rumus {
- abstract public function luas_lingkaran();
- abstract public function luas_persegi();
- }
-
- class Luas extends Rumus {
- public function luas_lingkaran() {
- return "Ini method luas lingkaran";
- }
- }
-
- $luas=new Luas();
- echo $luas->luas_lingkaran();
- ?>
3. Class abstrak bisa memiliki properti, method dan static
Dalam class abstrak kita bisa membuat properti, method dan static
seperti layaknya class konkrit. Untuk lebih jelas perhatikan contoh
berikut ini :
- <?php
- abstract class Rumus {
- var $diameter;
-
- public function jari () {
- return $this->diameter / 2;
- }
-
- public static $pi=3.14;
-
- abstract public function luas_lingkaran();
- }
-
- class Luas extends Rumus {
- public function luas_lingkaran() {
- return parent::$pi * $this->jari() * $this->jari();
- }
- }
-
- $luas=new Luas();
- $luas->diameter = 10;
- echo "Luas Lingkaran dengan diameter ".$luas->diameter." = ".$luas->luas_lingkaran();
- ?>
Pada script diatas terdapat sebuah class abstrak
Rumus yang memiliki sebuah method abstrak
luas_lingkaran() tanpa isi. Kemudian class abstrak
Rumus juga properti
$diameter, sebuah method
jari() dan sebuah static
$pi.
Selanjutnya class abstrak dicetak pada class turunan
Luas dan method abstraknya diimplementasi pada class tersebut sehingga syarat pada item no.2 diatas telah terpenuhi. Pada method
luas_lingkaran() di class turunan kita mengakses static
$pi dan method
jari() pada class induk untuk menghitung luas lingkaran.
Dan untuk melihat hasilnya kita instantisasi class Luas menjadi object,
kemudian kita set nilai diameternya=10 dan kita tampilkan hasil
perhitungan dari method
luas_lingkaran().
Jika benar maka script diatas akan menghasilkan tampilan :
Luas Lingkaran dengan diameter 10 = 78.5
Referensi :