Bag. 15 : Pengertian Abstract Class dan Abstract Method PHP
Pengertian Abstract Class dan Abstract Method
Abstract Class adalah sebuah class yang tidak bisa di-instansiasi
(tidak bisa dibuat menjadi objek) dan berperan sebagai ‘kerangka dasar’ bagi
class turunannya. Di dalam abstract class umumnya akan memiliki abstract
method.
Abstract Method adalah sebuah ‘method dasar’ yang harus
diimplementasikan ulang di dalam class anak (child class). Abstract method
ditulis tanpa isi dari method, melainkan hanya ‘signature’-nya saja. Signature dari
sebuah method adalah bagian method yang terdiri dari nama method dan
parameternya (jika ada).
Abstract class digunakan di dalam inheritance (pewarisan class)
untuk ‘memaksakan’ implementasi method yang sama bagi seluruh class yang
diturunkan dari abstract class. Abstract class digunakan untuk membuat struktur
logika penurunan di dalam pemrograman objek.
Konsep abstract class dan abstract method akan lebih mudah
dipahami dengan menggunakan contoh.
Misalkan kita ingin membuat class yang terdiri dari berbagai jenis
komputer seperti class laptop, class PC, class netbook, dan lain-lain. Seluruh
class ini tentunya memiliki sifat-sifat komputer, seperti memiliki spesifikasi,
memiliki processor, dan membutuhkan listrik. Dalam implementasinya, kita bisa
membuat seluruh class ini diturunkan dari class komputer.
Agar lebih seragam, kita ingin seluruh class yang diturunkan dari
class komputer, memiliki method yang ‘pasti’ ada dalam setiap class anak.
Setiap komputer tentunya memiliki spesifikasi, sehingga kita ingin setiap class
yang diturunkan dari class komputer memiliki method lihat_spec().
Bagaimana caranya ‘memaksa’ setiap class agar memiliki method
lihat_spec()? Untuk kebutuhan ini, kita bisa membuat class komputer sebagai
abstract class, dan method lihat_spec() sebagai abstract method.
Lebih lanjut, abstract method tidak hanya membuat setiap class
memiliki method lihat_spec(), tetapi memaksa setiap method mengimplementasikan
method lihat_spec() dengan isi method di serahkan kepada masing-masing class.
Tentunya spesifikasi class laptop akan berbeda dengan spesifikasi class PC.
Abstract class memiliki aturan yang membedakannya dengan class
biasa. Kita akan membahas aturan-aturan tersebut dengan menggunakan contoh
program PHP.
Cara
Membuat Abstract Class
Karena kita ingin membuat class komputer sebagai abstract class,
maka berikut adalah cara penulisannya di dalam PHP:
<?php
abstract
class komputer {
// isi dari class komputer
}
?>
Untuk membuat abstract class di dalam PHP, kita tinggal menambahkan
keyword abstract sebelum nama class. Sebuah abstract class bisa memiliki
property dan method biasa layaknya sebuah class ‘normal’, namun juga bisa
memiliki abstract method.
Cara
Membuat Abstract Method
Jika sebuah method dinyatakan sebagai abstract method, maka kita
tidak perlu membuat isi methodnya, tetapi hanya signature dari method tersebut.
Signature terdiri dai nama method dan parameternya (jika ada) seperti contoh
berikut:
abstract
public function lihat_spec();
abstract
public function lihat_spec($merk);
Kenapa kita tidak perlu membuat isi dari method? Ini karena jika
sebuah method dinyatakan sebagai abstract method, isi dari method tersebut akan
dibuat dalam class turunan. Abstract method harus berada di dalam abstract
class.
Sebagai contoh, berikut adalah cara penulisan abstract method
lihat_spec() di dalam abstract class komputer:
<?php
abstract
class komputer {
abstract public function lihat_spec();
}
?>
Perhatikan bahwa kita tidak perlu (baca:tidak bisa) membuat isi
dari abstract method.
Abstract
Class Tidak Bisa Diinstansiasi
Sesuai dengan sifatnya, kita tidak bisa membuat objek dari
abstract class. Abstract class digunakan hanya sebagai ‘blueprint’ untuk
class-class lain, bukan untuk digunakan langsung.
abstract
class komputer {
abstract public function
lihat_spec($pemilik);
}
}
$komputer_baru=new
komputer();
//
Fatal error: Cannot instantiate abstract class komputer
?>
Error diatas terjadi karena kita mencoba membuat objek dari
abstract class. Untuk menggunakan class komputer, kita harus menurunkannya
kepada class lain.
Abstract
Class Bisa Memiliki Property dan Method ‘biasa’
Jika sebuah class dinyatakan sebagai abstract class, class
tersebut juga bisa memiliki property dan method ‘normal’. Namun kita hanya bisa
mengakses property dan method ini dari class turunan, karena abstract class
tidak bisa diinstansiasi.
<?php
//
buat abstract class
abstract
class komputer{
// buat abstract method
abstract public function
lihat_spec($pemilik);
// buat method ‘biasa’
public function hidupkan_komputer(){
echo "Hidupkan Komputer";
}
}
?>
Class
Turunan Harus Mengimplementasikan Abstract Method
Jika sebuah class diturunkan dari abstract class, maka class
tersebut harus membuat ulang seluruh abstract method yang terdapat dalam
abstract class, dan juga harus sesuai dengan signature-nya.
<?php
//
buat abstract class
abstract
class komputer{
// buat abstract method
abstract public function lihat_spec();
}
class
laptop extends komputer{
public function beli_laptop(){
return "Beli Laptop...";
}
}
//
buat objek dari class laptop
$laptop_baru
= new laptop();
//
Fatal error: Class laptop contains 1 abstract method
//
and must therefore be declared abstract or implement
//
the remaining methods (komputer::lihat_spec)
?>
Dalam contoh diatas, saya menurunkan class komputer kepada class
laptop. Karena class komputer adalah abstract class dan memiliki abstract
method lihat_spec(), maka di dalam class laptop kita harus membuat ulang method
lihat_spec(). Jika tidak, akan terjadi kode error seperti diatas. Untuk
mengatasinya, mari kita revisi kode diatas menjadi berikut ini :
<?php
//
buat abstract class
abstract
class komputer{
// buat abstract method
abstract public function lihat_spec();
}
class
laptop extends komputer{
//
implementasi abstract method
public function lihat_spec(){
return "Lihat Spec Laptop...";
}
//
method 'biasa'
public function beli_laptop(){
return "Beli Laptop...";
}
}
//
buat objek dari class laptop
$laptop_baru
= new laptop();
echo
$laptop_baru->lihat_spec();
//
Lihat Spec Laptop...
echo
"<br />";
echo
$laptop_baru->beli_laptop();
//
Beli Laptop...
?>
Dalam kode diatas, method lihat_spec() telah kita implementasikan
di dalam class laptop. Fitur inilah yang menjadi fungsi dari abstract method,
yakni ‘memaksa’ setiap class turunan untuk memiliki method lihat_spec().
Implementasi dari abstract method, juga harus sesuai dengan
signaturenya, yakni nama method beserta parameter. Jika kita membuat abstract
method lihat_spec($merk), maka di dalam class turunan, kita juga harus membuat
$merk sebagai parameter method. Jika tidak, maka PHP akan menghasilkan error
sebagai berikut:
<?php
//
buat abstract class
abstract
class komputer{
// buat abstract method
abstract public function
lihat_spec($pemilik);
}
class
laptop extends komputer{
public function lihat_spec(){
return "Lihat Spec Laptop...";
}
}
//
buat objek dari class laptop
$laptop_baru
= new laptop();
//
Fatal error: Declaration of laptop::lihat_spec()
//
must be compatible with komputer::lihat_spec($pemilik)
?>
Abstract
Class Bisa Memiliki Static Method
Salah satu fitur ‘khusus’ untuk abstract class di dalam PHP, adalah:
abstract class bisa memiliki static method. Berikut contohnya:
<?php
//
buat abstract class
abstract
class komputer{
// buat abstract method
abstract public function
lihat_spec($pemilik);
public static function hidupkan_komputer(){
echo "Hidupkan Komputer";
}
}
echo
komputer::hidupkan_komputer();
//
Hidupkan Komputer
?>
Fungsi
Abstract Class dan Abstract Method
Abstract class dan abstract method berfungsi untuk membuat
‘kerangka’ bagi seluruh class dibawahnya. Seperti contoh-contoh kita diatas,
setiap class yang diturunkan dari class komputer, ‘pasti’ akan memiliki method
lihat_spec().
Dalam tutorial ini saya menyederhanakan contoh kode program dengan
hanya 1 abstract method. Kita bisa membuat beberapa abstract method di dalam
abstract class, seperti contoh berikut:
<?php
//
buat abstract class
abstract
class komputer{
// buat abstract method
abstract public function lihat_spec();
abstract public function lihat_processor();
abstract public function lihat_harddisk();
abstract public function lihat_pemilik();
}
class
laptop extends komputer{
// .. isi class laptop
}
class
pc extends komputer{
// .. isi class pc
}
class
netbook extends komputer{
// .. isi class netbook
}
?>

Post a Comment