Baru-baru ini saya sudah mulai membungkus kepala saya di sekitar OOP, dan saya sekarang ke titik di mana semakin saya membaca tentang perbedaan antara kelas abstrak dan antarmuka semakin bingung saya menjadi. Sejauh ini, tidak ada yang bisa dipakai. Antarmuka lebih atau kurang cetak biru struktural yang menentukan kerangka dan abstrak berbeda dengan dapat mengimplementasikan sebagian kode.
Saya ingin belajar lebih banyak tentang ini melalui situasi khusus saya. Berikut ini tautan ke pertanyaan pertama saya jika Anda ingin sedikit informasi latar belakang: Apa model desain yang bagus untuk kelas baru saya?
Berikut adalah dua kelas yang saya buat:
class Ad {
$title;
$description
$price;
function get_data($website){ }
function validate_price(){ }
}
class calendar_event {
$title;
$description
$start_date;
function get_data($website){ //guts }
function validate_dates(){ //guts }
}
Jadi, seperti yang Anda lihat, kelas-kelas ini hampir identik. Tidak ditampilkan di sini, tetapi ada fungsi lain like get_zip()
,, save_to_database()
yang umum di kelas saya. Saya juga menambahkan kelas lain Mobil dan Hewan Peliharaan yang memiliki semua metode umum dan tentu saja sifat khusus untuk kelas-kelas tersebut (jarak tempuh, berat, misalnya).
Sekarang saya telah melanggar prinsip KERING dan saya mengelola dan mengubah kode yang sama di beberapa file. Saya berniat memiliki lebih banyak kelas seperti perahu, kuda, atau apa pun.
Jadi apakah ini tempat saya akan menggunakan antarmuka atau kelas abstrak? Dari apa yang saya mengerti tentang kelas abstrak, saya akan menggunakan kelas super sebagai templat dengan semua elemen umum yang dibangun ke dalam kelas abstrak, dan kemudian hanya menambahkan item yang secara khusus dibutuhkan di kelas mendatang. Sebagai contoh:
abstract class content {
$title;
$description
function get_data($website){ }
function common_function2() { }
function common_function3() { }
}
class calendar_event extends content {
$start_date;
function validate_dates(){ }
}
Atau apakah saya akan menggunakan antarmuka dan, karena ini sangat mirip, membuat struktur yang masing-masing subkelas dipaksa untuk digunakan karena alasan integritas, dan menyerahkannya kepada pengembang akhir yang menyempurnakan kelas yang bertanggung jawab untuk masing-masing rincian bahkan fungsi-fungsi umum. pemikiran saya di sana adalah bahwa beberapa fungsi 'umum' mungkin perlu diubah di masa depan untuk kebutuhan kelas khusus mereka.
Terlepas dari semua itu di atas, jika Anda yakin saya salah memahami apa dan mengapa kelas abstrak dan antarmuka sama sekali, tentu saja biarkan jawaban yang valid untuk berhenti berpikir ke arah ini dan menyarankan cara yang tepat untuk bergerak maju!
Terima kasih!