Pengertian Abstract Class dan Abstract Method

darsurplsmknesaba
8/23/2022 10:31:36 PM
34 Komentar
Beranda
Pengertian Abstract Class dan Abstract Method


 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 classAbstract 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 laptopclass 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:

1
2
3
4
5
<?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:

1
2
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 metholihat_spec() di dalam abstract class komputer:

1
2
3
4
5
<?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 classAbstract class digunakan hanya sebagai ‘blueprint’ untuk class-class lain, bukan untuk digunakan langsung.

1
2
3
4
5
6
7
8
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.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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
}
?>

Dengan membuat class komputer sebagai abstract, maka kita bisa menebak bahwa di dalam class laptop, class pc dan class netbook, pasti memiliki method lihat_spec(), lihat_processor(), lihat_harddisk() dan lihat_pemilik(). Dengan demikian, kita bisa membuat program yang lebih terstruktur.


Dalam tutorial OOP PHP berikutnya, kita akan membahas tentang Object Interfaces atau dikenal dengan sebutan Interface saja. Interface di dalam pemograman objek sangat mirip dengan abstract class. Kita akan membahas pengertian, cara penggunaan serta perbedaan Object Interface dengan Abstract Class.


Sumber : https://www.duniailkom.com/tutorial-belajar-oop-php-pengertian-abstract-class-dan-abstract-method-php/#more-3693

Penulis blog

34 komentar

  1. Perbedaan LMS dan SLN: Poin-poin Penting
    Perbedaan LMS dan SLN: Poin-poin Penting
    30 Agustus 2022 pukul 10.13
    Rifki Taufik J _XI RPL 2_PBO
  2. Muhammadfahrezi
    Muhammadfahrezi
    30 Agustus 2022 pukul 09.30
    Muhammad fahrezi putra bachtiar_XI RPL2_PBO
  3. biografigina.nal
    biografigina.nal
    30 Agustus 2022 pukul 09.14
    Gina Aulia_XI RPL 2_PBO
  4. dilanurhidayah
    dilanurhidayah
    30 Agustus 2022 pukul 09.05
    Dila Nurhidayah_XI RpL 2_PBO
  5. bioggrafinandaaaaaaaaaaaaaa
    bioggrafinandaaaaaaaaaaaaaa
    30 Agustus 2022 pukul 09.03
    Ananda Putri Randi Hidayat _XI RPL 2_PBO
  6. biografichesyasalsabilaapriliaputriwijaya.
    biografichesyasalsabilaapriliaputriwijaya.
    30 Agustus 2022 pukul 08.59
    chesya salsabila_XI RPL 2_PBO
  7. Reza apriza
    Reza apriza
    30 Agustus 2022 pukul 08.56
    Reza apriza_XI RPL 2_PBO
  8. Andre Ilham Nugraha
    Andre Ilham Nugraha
    30 Agustus 2022 pukul 08.50
    Andre Ilham Nugraha_XI RPL 2_PBO
  9. Jenal
    Jenal
    30 Agustus 2022 pukul 08.38
    Jenal abdidin_XI RPL 2_PBO
  10. biografialfiyyah
    biografialfiyyah
    30 Agustus 2022 pukul 08.31
    Alfiyyah Hasna Azizah_XI RPL2_PBO
  11. Tampilkan selengkapnya
  12. Aprilia
    Aprilia
    30 Agustus 2022 pukul 08.23
    Aprilianti_XI RPL 2_PBO
  13. intan nursetya
    intan nursetya
    30 Agustus 2022 pukul 08.10
    Intan Nursetya_Xl RPL 2_PBO
  14. Jirah Nursukma
    Jirah Nursukma
    30 Agustus 2022 pukul 08.08
    Jirah Nursukma_XI RPL 2_PBO
  15. Adam sp
    Adam sp
    30 Agustus 2022 pukul 07.58
    Adam suradi putra_XI RPL 2_PBO
  16. FAQIH
    FAQIH
    30 Agustus 2022 pukul 07.52
    Faqih Zulfikar_XI RPL_2_PBO
  17. Agung.gn
    Agung.gn
    30 Agustus 2022 pukul 07.47
    Agung Gilang N_XI RPL 2_PBO
  18. Arip
    Arip
    30 Agustus 2022 pukul 07.33
    Arip Septiana_XI RPL 2_PBO
  19. Daffa Blogstory
    Daffa Blogstory
    30 Agustus 2022 pukul 07.33
    Gilang Rustiana Putra_XI RPL 2_PBO
  20. DENI
    DENI
    30 Agustus 2022 pukul 07.32
    Deni Apriadi_XI RPL 2_PBO
  21. NZXT
    NZXT
    30 Agustus 2022 pukul 07.31
    Muhammad Zahwan S_XI RPL 2_PBO
  22. Tampilkan selengkapnya
  23. Mela Mulya
    Mela Mulya
    30 Agustus 2022 pukul 07.31
    Mela Mulya R_XI RPL2_PBO
  24. Kikiramdani
    Kikiramdani
    30 Agustus 2022 pukul 07.30
    Kiki ramdani_XI RPL 2_PBO
  25. Daffa Blogstory
    Daffa Blogstory
    30 Agustus 2022 pukul 07.30
    Dida Arfiana_XI RPL 2_PBO
  26. Aldi
    Aldi
    30 Agustus 2022 pukul 07.30
    Aldi rivaldi_XI RPL 2_PBO
  27. amel
    amel
    30 Agustus 2022 pukul 07.29
    Nurresya amelia_XI RPL 2_PBO
  28. Miqdad
    Miqdad
    30 Agustus 2022 pukul 07.28
    Miqdad abdullah_XI RPL 2_PBO
  29. Aez
    Aez
    30 Agustus 2022 pukul 07.24
    MUHAMMAD REZZA XI RPL2
  30. Fauzi
    Fauzi
    30 Agustus 2022 pukul 07.24
    Fauzi danar z_ XI RPL 2_PBO
  31. Aez
    Aez
    30 Agustus 2022 pukul 07.24
    Komentar ini telah dihapus oleh pengarang.
  32. projekilham
    projekilham
    30 Agustus 2022 pukul 07.22
    Ilham saputra Xl_RPL 2 PBO
  33. Tampilkan selengkapnya
  34. Albia F
    Albia F
    30 Agustus 2022 pukul 07.21
    Albia Fabiansyah_XI_RPL2_PBO
  35. projekintanpermatasari
    projekintanpermatasari
    30 Agustus 2022 pukul 07.11
    Intan Permatasari _Xl RPL _PBO
  36. Adit Kurniawan
    Adit Kurniawan
    30 Agustus 2022 pukul 07.09
    Adit Kurniawan_XI RPL 2_PBO
  37. Yogi RF
    Yogi RF
    30 Agustus 2022 pukul 07.09
    Yogi Royadi Fadillah_XI RPL 2_PBO