- Kapan sebaiknya
implement
atauextend
digunakan? - Apa sajakah contoh dunia nyata?
Apakah ini benar?
Menerapkan tampaknya menjadi cara untuk memaksakan bahwa metode tertentu ada di kelas, dan bahwa pemanggilan fungsi metode ini diformat dengan benar. Menerapkan bukanlah cara untuk meneruskan variabel atau "pengaturan" ke kelas?
Skenario kehidupan nyata yang diharapkan: Saya memiliki platform e-niaga yang menampilkan beberapa kelas pembayaran yang semuanya mengikuti desain yang sama. Ketika kelas pembayaran baru harus ditambahkan, sangat mudah untuk mengikuti desain yang ditentukan interface
untuk memastikan bahwa semua potongan ada di sana, dari awal.
Memperluas kelas membuat kelas diperpanjang (anak?) Mewarisi semuanya dari kelas induknya kecuali metode & variabel yang dideklarasikan sebagai private
?
Skenario kehidupan nyata yang diharapkan: Saya memiliki satu kelas yang dipanggil sessions
dengan dua kelas anak bernama sessioncookies
dan databasesessions
. sessioncookies
dan databasesessions
, bersama-sama mewarisi sejumlah opsi konfigurasi bersama dari sesi induknya, sehingga memudahkan untuk mengubah opsi konfigurasi untuk memengaruhi semua jenis penyimpanan data pengunjung pada akhirnya.
Jawaban:
Warisan berguna untuk mengurangi jumlah kode yang Anda tulis ulang. Jika Anda memiliki beberapa kelas dengan beberapa metode atau bidang umum, alih-alih mendefinisikan metode dan bidang ini berulang kali, Anda dapat memfaktorkannya ke dalam kelas dasar dan meminta setiap kelas anak memperluas kelas dasar tersebut.
Antarmuka (dan
implements
) berguna ketika Anda ingin mendefinisikan protokol umum tentang bagaimana sekelompok objek harus berperilaku. Misalnya, Anda mungkin ingin mengamanatkan bahwa objek yang sebanding dapat dibandingkan untuk persamaan dan hash, dll.Menggunakan warisan pada akhirnya merupakan pilihan desain. Waspadai kasus di mana Anda mendefinisikan metode yang sama di beberapa kelas; itu adalah kasus yang sangat baik di mana Anda dapat memfaktorkan metode tersebut ke dalam kelas dasar. Hal yang sama berlaku untuk kelas yang mengamati beberapa karakteristik yang sama: Anda dapat menjamin konsistensi dengan meletakkan karakteristik tersebut dalam antarmuka untuk diimplementasikan oleh kelas terkait tersebut.
Warisan adalah konsep besar dalam OOP yang lebih dari sekadar PHP. Saya sarankan Anda membaca artikel wikipedia tentang warisan dan mungkin Pola Desain oleh Gang of Four .
Saya percaya pemahaman Anda tentang warisan sebagian besar benar. Langkah selanjutnya adalah menggunakannya dalam produksi.
sumber
Melaksanakan:
Antarmuka adalah kelas abstrak, jadi Anda hanya dapat mendeklarasikan berbagai hal. Kelas A mengimplementasikan antarmuka. Anda dapat mengimplementasikan banyak antarmuka.
Memperpanjang:
Anda memperluas kelas ketika Anda menginginkan versi kelas yang lebih spesifik .
Contoh:
// Contract: a pet should play public interface Pet { public void play(); } // An animal eats and sleeps class Animal { public void eat(); public void sleep(); } public class Camel extends Animal { } public class Dog extends Animal implements Pet { public void play() {...} }
Unta dan Anjing adalah hewan, jadi mereka memperluas
Animal
kelas. Tapi hanya anjing adalah jenis tertentu dariAnimal
yang juga bisa menjadiPet
sumber