Anda di halaman 1dari 6

BAB 7 Abstract Class dan Abstract Method

7.1 Mengenal Abstract Class dan Abstract Method


Pada kondisi tertentu. kita ingin memaksa agar setiap child class memiliki
method tertentu. Dengan kata lain kita menginginkan agar suatu child
class mematuhi kontrak tertentu dari parent class nya. Yang harus
dipenuhi adalah nama method-nya, sedangkan implementasi detail
kode pada method tersebut tidak harus sama.

Bagaimana cara untuk memastikan agar suatu child class memiliki suatu
method tertentu, tetapi detail kode di method tersebut tidak harus sama?

Ada 2 cara yang bisa kita terapkan untuk memecahkan masalah ini,
yaitu Abstract class dan Interface.

Pada bab ini, kita akan membahas tentang abstract class. Sedangkan
untuk interface akan kita bahas di bab lainnya.

Masih ingatkah Anda dengan pelajaran matematika yang membahas


bangun datar atau geometri?

Ada banyak bentuk bangun datar, misalnya persegi. Segitiga dan


lingkaran. Setiap bentuk bangun datar tersebut memiliki rumus tersendiri
untuk menghitung luas areanya.

Dengan kata lain, untuk setiap class Persegi{}. segitiga{} dan Lingkaran{}
kita harus memiliki method hitungLuas(). Tentu saja implementasi kode
untuk menghitung luas tiap bentuk bangun datar berbeda.

Bagaimana cara memastikan agar suatu class memiliki nama method


tertentu tapi dengan implementasi yang berbeda? Salah satu caranya
adaiah dengan nembuat abstract class dan abstract method.

Abstract class adalah suatu class yang mengandung setidaknya satu


abstract method. Untuk mendeklarasikan suatu abstract class memakai
keyword abstract di depan deklarasi nama class:

abstract class NamaClass

Abstract method adalah suatu method yang hanya dideklarasikan nama


dan argumen-nya saja. sedangkan implementasinya tidak diberikan.
Keyword abstract juga diberikan di depan deklarasi nama method:

PBO_Di_PHP @rommikaestria
abstract protected function namaMethod();

kita tidak bisa membentuk instance object dari suatu abstract class,
namun kita harus membuat child class untuk membuat object dari
abstract class tersebut.

Boleh dikatakan abstract class hanya dipakai untuk memberikan


peraturan Chill Class yang akan diturunkan darinya. Abstract class itu
sendiri tidak akan pernah dibuat menjadi instance object. Yang akan
dijadikan instance object adalah semua child class turunan dari abstract
class tersebut.

Untuk memahami pembuatan abstract class dan abtract method,


lakukan latihan berikut:

PBO_Di_PHP @rommikaestria
Penjelasan Skrip :

■ Baris 3-6. Deklarasi abstract class BangunDatar{}, yang merupakan base


class / parent class dari semua class bangun datar lainnya. Di abstract
class ini dideklarasikan abstract method hitungLuas(). Karena itu, semua
child class yang meng-extend class BangunDatar{} harus
mengimplementasikan / mempunyai method hitungLuas(). Dengan
kata lain, semua child class terikat kontrak dengan parent class-nya.

Untuk mendeklarasikan abstract class, cukup memberikan nama class-


nya dan tidak perlu implementasinya. Oleh karena itu, kita juga tidak
perlu menambahkan tanda kurung kurawal {…} yang biasa ada pada
pembuatan method.

Baris 8 - 16. Class Persegi{}.


Baris 18 - 27. Class Segitiga{}.
Baris 29 - 37. Class Lingkaran{}.

Perhatikan pada method hitungLuas() pada setiap class, meskipun


namanya sama, tapi impementasi di dalamnya berbeda-beda.

PBO_Di_PHP @rommikaestria
■ Baris 39 - 40. Pembuatan instance class Persegi{}.

■ Baris 42 - 43. Pembuatan instance class Segitiga{}.

■ Baris 45 - 46. Pembuatan instance class Lingkaran{}.

Jalankan skrip tersebut , maka hasilnya dapat seperti pada gambar


dibawah ini

7.2 Menambah Property dan Method di Abstract Class

Apakah suatu abstract class bisa zncmpunyai property dan method yang
non-abstract? Jawabannva bisa. Pada prinsipnya abstract class sama
dengan class-class lainnya. hanya saja ia tidak bisa dinstansiasi menjadi
sebuah object. Untuk menambahkan proprerty dan abstract method
pada abtract class:

Buat latihan php berikut ini :

PBO_Di_PHP @rommikaestria
Penjelasan Skrip :

■ Baris 3 -13. Abstract class Mobil{}.

■ Baris 5. Protected property $volTangki. Isi maksimum tangki bensin,


property ini juga akan diturunkan kepada child class.

■ Baris 7 - 10. Public method isiBensin(). Method ini adalah method


non-abstract pada class Mobil{}. Method ini akan dturunkan kepada child
class.

■ Baris 12. Abtract method jarakTempuhMaksimum(), berfungsi untuk


menghitung jarak tempuh maksimum jika tangki bensin diisi sejumlah
bensin.

Method ini adalah kontrak yang harus dipenuhi oleh semua child class
yang meng-inherit class Mobil{}. Dengan kata lain, semua child class
yang merupakan turunan dari class Mobil{) harus meniiliki method
jarakTempuhMaksimum().

■ Baris 15 - 24. Class Toyota{}, child class dari classMobil(},

PBO_Di_PHP @rommikaestria
■ Baris 17. Property $perLiter, jarak tempuh yang dapat ditempuh untuk
setiap liter bensin.

■ Baris 19-23. Method jarakTempuhMaksimum() , adalah implementasi


abstract method jarakTempuhMaksimum() yang ada di abstract class
Fungsinya untuk menghitung jarak tempuh maksimum mobil untuk jumlah
bensin yang ada di tangki.

■ Baris 26 - 35. Class Suzuki{}. Sama dengan class Toyota{}.

■ Baris 37 - 39. Membuat instance class Toyota{), untuk menampilkan


jarak tempuh maksimum mobil untuk bbm yang tersedia di tangki.

■ Baris 41 - 43 Membuat instance class Suzuki{}, untuk menampilkan


jarak tempuh niaksimum mobil untuk bbm yang tcrsedia di tangki.

Jalankan skripnya maka hasilnya dapat dilihat pada gambar dibawah ini

Abstract class berguna untuk membuat kontrak, aturan yang mengikat


agar child class yang meng-extends abtract class memiliki semua method
yang diperlukan, yaitu dengan mendefinisikan semua abstract method
pada abstract class.

Untuk mendefinisikan abstract method pada abstract class cukup ditulis


nama method-nya saja, sedangkan badan method tidak perlu ditulis.

Abstract class tidak bisa dibuat menjadi instance object, kita membuat
instance object dari child class yang meng-extends abstract class
tersebut. Dari sinilah abstract class berfungsi untuk memastikan agar child
class memiliki method tertentu yang harus diimplementasikan.

Kila bisa memberikan property dan non-abstract method pada abstiact


class, karena pada dasarnya abstract class juga mcrupakan class biasa,
tapi tidak bisa di-instance menjadi object.

PBO_Di_PHP @rommikaestria

Anda mungkin juga menyukai