Promo Lebaran, Kelas Online CODEPOLITAN Cukup Bayar Setengah Harga KLAIM PROMO

Masih bingung mengenai abstract class.

Ditanyakan pada tanggal 21 May 2020 oleh Aditya Andar Rahim Edit  Hapus  Tandai Selesai  Tandai 
  1. Pada halaman https://www.codepolitan.com/forum/thread/detail/1074/pemrogramman-php-keuntungan-penggunaan-fitur-abstract-class-QjdD, mas Ahmad Oriza memberikan contoh seperti di bawah ini.
    Pertanyaan saya adalah, kenapa tidak menggunakan interface saja, jika hanya menuliskan nama-nama dari methodnya? Apa perbedaannya dengan interface? Apakah kode dibawah ini tidak bisa jika menggunakan interface?

<?php
abstract class QueryBuilder { 
    abstract public function select();
    abstract public function insert();
    abstract public function update();
}

// Class milik programmer A
class MySQL extends QueryBuilder {
    public function select() { 
        echo 'Build query for SELECT in MYSQL ..<br/>';
    }   
    public function insert() { 
        echo 'Build query for INSERT in MYSQL ..<br/>';
    }   
    public function update() { 
        echo 'Build query for UPDATE in MYSQL ..<br/>';
    }   
}

// Class milik programmer B
class PostGre extends QueryBuilder {
    public function select() { 
        echo 'Build query for SELECT in PostGre ..<br/>';
    }   
    public function insert() { 
        echo 'Build query for INSERT in PostGre ..<br/>';
    }   
    public function update() { 
        echo 'Build query for UPDATE in PostGre ..<br/>';
    }   
}

...

// Contoh implementasi.
$MySQL = new MySQL();
$MySQL->select();
$MySQL->insert();
$MySQL->update();

// Contoh implementasi.
$PostGre = new PostGre();
$PostGre->select();
$PostGre->insert();
$PostGre->update();

...



  1. Pada contoh di halaman coursenya, ada contoh error seperti ini
    Fatal error: Uncaught Error: Cannot instantiate abstract class CoordinateAbstract in C:\xampp\htdocs\php-oop\source code\05\abstract-1.php:48 Stack trace: #0 {main} thrown in C:\xampp\htdocs\php-oop\source code\05\abstract-1.php on line 48 Hal tersebut terjadi karena kita tidak melakukan instansiasi suatu abstract yang seharusnya kita implementasikan di class lain terlebih dahulu.

    Saya kurang mengerti dari kalimat ini, bisa dijelaskan maksudnya apa?
    Apakah maksudnya itu kita tidak dapat menginstansiasi abstract class, kecuali kita membuat class yang mengimplementasikan abstract class itu?
BUAT KOMENTAR

1 JAWABAN / 0 KOMENTAR

User avatar
Ahmad Oriza menjawab pada tanggal 22 May 2020 Jadikan Jawaban Terbaik  Edit  Hapus  Ubah ke Komentar 

Pertanyaan bagus,

  1. Betul, pakai interface pun bisa untuk menerapkan kesepahaman, itu hanya contoh saja biar lebih simple, tapi kalau menggunakan abstract kita bisa menambahkan abstraksi lainnya. Kita bisa tambahkan property default beserta tipenya, kita juga bisa menuliskan kerangka isi dalam method dst.
  2. Betul, dari tadi pertanyaannya dijawab sendiri hehe. Abstract tidak boleh diinstansiasi langsung, gunanya hanya untuk abstraksi saja.
BUAT KOMENTAR