Tutorial OOP Lanjutan

Abstract

Materi ini memiliki 2 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.

Pada saat deklarasi kelas, kita bisa menambahkan kata kunci abstract sebelum kata class. Hal ini akan mengubah kelas menjadi abstract. Kelas yang bersifat abstract tidak bisa melakukan instantiate menjadi object. Kelas yang bersifat abstract harus diturunkan hingga menjadi kelas biasa, setelah itu barulah bisa melakukan instantiate.

Ini adalah contoh kode abstract. Perhatikan kelas paling atas, yaitu Animal. Pada saat kita melakukan deklarasi kelas, sebelum kata kunci class kita tambahkan kata kunci abstract. Artinya kelas Animal berubah menjadi abstract. Kita tidak bisa melakukan instantiate pada kelas Animal.

Perhatikan kelas kedua adalah kelas Dog yang kita turunkan dari Animal. Namun kelas Dog masih tetap bersifat abstract. Jadi kita bisa membuat turunan kelas abstract dari kelas abstract. Dan kelas Dog tetap tidak bisa di-instantiate menjadi sebuah object.

Nah, kelas ketiga adalah kelas Cat yang merupakan turunan dari kelas Animal. Berhubung kelas Cat tidak bersifat abstract, maka kita bisa melakukan instantiate terhadap kelas Cat, untuk membuat object-nya.

Sampai disini mungkin teman-teman ada yang bertanya ya, kalau begitu apa gunanya kita menggunakan kata kunci abstract? Abstract ini digunakan kalau kita hendak membuat banyak kelas yang turun-temurun, dimana kelas-kelas yang menjadi parent biasanya kodenya masih separuh jadi sehingga kita ingin mencegah agar kelas tersebut jangan di-instantiate. Takutnya kelas tersebut masih rawan error karena kodenya belum lengkap. Kita ingin agar kelas tersebut diturunkan dahulu ke kelas anak yang kodenya sudah disempurnakan, setelah itu barulah kelas anaknya boleh di-instantiate.

Agar lebih jelas, kita coba praktek ya. Pada folder class, kita buat file baru yaitu Animal.php. Di dalamnya kita buka tag php. Lalu kita buat abstract class Animal, dengan satu buah public string $name.

Setelah itu kita buat file main.php. Kita buat tag php. Lalu kita panggil require_once untuk file class/Animal.php. Kemudian kita coba melakukan instantiate terhadap kelas Animal ya.

$animal = new Animal();

Kita coba jalankan main.php dan kita mendapatkan error "cannot instantiate abstract class Animal". Jadi kita tidak bisa melakukan instantiate terhadap kelas yang bersifat abstract.

Kemudian kita buat kelas turunan dari Animal ya. Pertama kita buat dahulu abstract class Dog extends Animal. Isinya kosong saja. Jadi kelas yang bersifat abstract, bisa kita turunkan menjadi kelas yang abstract lagi. Kita coba buat object-nya. Kode yang $animal kita komentari dulu ya.

$dog = new Dog();

Dan, seperti yang diduga ya. Kelas Dog juga tidak bisa melakukan instantiate.

Selanjutnya kita buat lagi turunan dari kelas Animal. Namun kali ini kelas biasa ya. Kita buat class Cat extends Animal dengan isi yang kosong. Kemudian kita komentari kode $dog dan kita coba buat object dari Cat.

$cat = new Cat();

Dan kode yang kali ini berjalan tanpa error. Jadi kalau kita bertemu dengan abstract class, maka kita harus membuat turunannya hingga menjadi kelas biasa. Setelah itu barulah bisa kita instantiate menjadi object.

Kita lanjutkan ke materi selanjutnya yaitu Abstract Method. Di dalam abstract kelas, kita bisa membuat method yang bersifat abstract juga. Untuk method yang bersifat abstract, kita tidak perlu menuliskan kode implementasinya. Seandainya kita tetap menuliskan kode implementasi, justru kita mendapatkan fatal error. Khusus untuk abstract method, kita hanya boleh menggunakan visibility protected atau public. Tidak boleh menggunakan private karena method ini harus bisa diakses di kelas turunan agar kita bisa menuliskan kode implementasinya.

Ini adalah contoh kode Abstract Method. Perhatikan pada class Animal, kita membuat abstract method dengan nama makeSound. Method disini hanya ada deklarasinya saja. Tidak ada implementasi.

Nantinya kalau kita membuat turunan dari kelas Animal yang bukan abstract, barulah kita wajib membuat kode implementasi dari makeSound. Kalau pada kelas Cat kita tidak menuliskan kode implementasinya, maka kita mendapatkan fatal error.

Agar lebih jelas, kita coba praktek. Pertama kita buka lagi file Animal.php. Pada kelas Animal, kita tambahkan abstract public function makeSound(). Kalau kita coba jalankan, maka pada kelas Cat terjadi error ya, karena kita belum menuliskan kode implementasinya pada kelas Cat. Kita komentari dahulu kode kelas Cat ya.

Ada beberapa hal yang perlu kita perhatikan pada saat membuat abstract method. Yang pertama adalah, kita hanya boleh menuliskan abstract method di dalam abstract class. Kalau misalkan kelasnya kita ubah menjadi non-abstract, maka kita mendapatkan fatal error.

Yang kedua, kita hanya boleh menggunakan visibility public atau protected pada abstract method. Karena method ini harus bisa diakses pada kelas turunan. Kalau misalkan kita ubah menggunakan visibility private, maka kita mendapatkan fatal error.

Yang ketiga, kita tidak boleh menambahkan kode implementasi pada abstract method. Kalau misalkan setelah deklarasinya, kita tambahkan blok kode. Maka kita mendapatkan fatal error.

Yang keempat, pada saat kita membuat kelas turunan yang bersifat non-abstract seperti kelas Cat, maka kita wajib menuliskan kode implementasi dari abstract method-nya. Jadi kalau kode Cat ini kita buka kembali, maka kita mesti menambahkan method makeSound().

public function makeSound(){
	echo "Meow\n";
}

Setelah itu barulah kode pada main.php bisa kita jalankan tanpa error.

Sampai disini mungkin teman-teman ada yang bertanya ya. Apa kegunaan dari abstract method? Nah, kegunaan dari abstract method berkaitan erat dengan Polymorphism. Agar lebih jelas, kita ubah dahulu kode dari kelas Dog menjadi tidak abstract ya. Dan berhubung non-abstract, artinya kita harus menambahkan method makeSound. Namun suara anjing kita ganti menjadi "GukGuk\n".

Untuk melihat kegunaan dari abstract method, kita buat function baru animalSound dengan parameter kelas Animal $animal. Di dalamnya kita panggil method makeSound.

Nah, disinilah kegunaan dari abstract method. Kita bisa memastikan bahwa semua turunan Animal, pasti memiliki method makeSound. Jadi kita bisa dengan aman memanggil animalSound dengan menggunakan kelas Cat maupun kelas Dog.

Kalau kita jalankan, maka berfungsi normal ya.

Abstract method disini berfungsi untuk memastikan bahwa semua turunan Animal pasti punya method makeSound. Lain halnya kalau abstract method pada kelas Animal kita hapus. Bisa saja hanya kelas Cat saja yang memiliki method makeSound. Sedangkan kelas Dog tidak punya. Karena kalau deklarasi makeSound pada kelas Dog kita hapus, secara sistem tidak terjadi error pada kelas. Namun kalau kita jalankan, pada saat runtime kita mendapatkan error karena ternyata kelas Dog tidak punya method makeSound.

Jadi disini kegunaan dari abstract method ya. Kalau abstract method pada class Animal saya aktifkan kembali. Maka pada kelas Dog terjadi error, karena Dog wajib mengimplementasikan method makeSound. Dan kita pun terhindar dari runtime error.

2 Jam 41 Menit

Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.

Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.