Ketika mencoba menjelaskan konsep Warisan dalam OOP, contoh umum adalah contoh mamalia. IMHO, ini benar-benar contoh yang buruk, karena akan mengarahkan pemula untuk menggunakan konsep ini dengan cara yang salah. Dan terlebih lagi, itu bukan desain umum yang akan mereka hadapi dalam pekerjaan desain sehari-hari mereka.
Jadi, apa yang akan menjadi masalah yang bagus, sederhana dan konkret yang diselesaikan dengan menggunakan Inheritance?
design-patterns
object-oriented
inheritance
Pierre Watelet
sumber
sumber
Jawaban:
Tidak ada yang salah dengan contoh akademis murni seperti mamalia. Saya juga suka contoh persegi panjang / persegi karena ini menunjukkan mengapa taksonomi dunia nyata tidak selalu secara langsung diterjemahkan ke hubungan warisan yang Anda harapkan.
Menurut pendapat saya, contoh setiap hari yang paling kanonik adalah toolkit GUI. Ini adalah sesuatu yang digunakan semua orang, tetapi pemula mungkin tidak beralasan tentang cara mereka bekerja di bawah tenda. Anda dapat berbicara tentang perilaku apa yang umum untuk semua wadah, semua widget, acara, dll. Tanpa memerlukan pengetahuan terperinci tentang implementasi yang diberikan.
sumber
Contoh dunia nyata saya adalah model domain dari aplikasi SDM yang sederhana. Saya katakan bahwa kita dapat membuat kelas dasar yang disebut Karyawan , karena tentu saja, manajer adalah karyawan juga.
Lalu saya jelaskan bahwa pengembang adalah karyawan , penguji adalah karyawan , manajer proyek adalah karyawan . Dengan demikian mereka semua dapat mewarisi dari kelas karyawan.
sumber
Employee
bisa menjadiabstract
kelas juga.Developer
dan aTester
. Situasi serupa lainnya adalah basis data kontak di mana Anda memilikiCustomer
danSupplier
, tetapi karena siapa pun yang telah membuat sistem seperti itu akan memberi tahu Anda, selalu ada kasus di mana aCompany
adalah keduanya. Itulah sebabnya sebagian besar contoh ini membawa Anda ke arah yang salah.Meringkas apa yang bervariasi ... menunjukkan kepada mereka pola metode templat , itu menunjukkan kegunaan warisan dengan menempatkan perilaku umum di kelas dasar dan merangkum berbagai perilaku dalam subkelas.
UI controls
danStreams
juga merupakan contoh yang sangat baik untuk kegunaan warisan.sumber
Ingat
Setiap contoh objek adalah contoh konkret tentang manfaat warisan!
Jika yang Anda maksud adalah pewarisan kelas secara khusus , sekarang Anda berada di dunia taksonomi, dan itu akan sangat bervariasi menurut tujuan sistem yang menggunakannya. Contoh hewan / mamalia menggunakan taksonomi umum dan mudah-mudahan akrab dari biologi, tetapi itu (seperti yang Anda sebutkan) hampir tidak berguna untuk sebagian besar masalah pemrograman.
Jadi cobalah sesuatu yang universal: pengertian Program. Setiap program dimulai, dijalankan, dan berakhir. Setiap program memiliki nama, dan parameter baris perintah opsional. Jadi kelas Program dasar akan sangat berguna, untuk memulai eksekusi, mengambil dan memproses argumen baris perintah, menjalankan logika utama, dan mematikan dengan anggun.
Itulah sebabnya begitu banyak bahasa pemrograman berorientasi objek menyediakan kelas Program, atau sesuatu yang berperilaku persis seperti kelas Program.
sumber
class Programm { public static void main(String[] args) { system.out.println('hello world'); }}
adalah program Java minimal. Ketika saya menyebutnya, tidak ada instance Program. Program tidak mewarisi dari apa pun. Ketika saya memulai 3 Proses (seperti yang Anda lakukan dengan crhome), mungkin ada 3 Program, tetapi di masing-masing bidang memori, masih ada hanya satu Program. Imho, singleton menyiratkan 'Hanya satu Mesin Virtual per Proses', bukan per Mesin. Jika demikian, mustahil membuat lajang, tidak ada yang menghentikan Anda menjalankan kode apa pun dua kali.Saya bekerja dengan kamera di tempat kerja. Kami memiliki perangkat yang terhubung ke model yang berbeda, jadi kami memiliki "kelas kamera" yang abstrak dan setiap model mewarisi dari kelas ini untuk mendukung fungsionalitas spesifik dari kamera itu. Ini adalah contoh dunia nyata dan tidak sulit untuk dipahami.
sumber
Camera
dan aPhone
(seperti yang kita semua lakukan di saku sekarang). Kelas dasar mana yang harus diwarisi? Atau bukankah seharusnya hanya mengimplementasikanICamera
danIPhone
antarmuka saja? (ha ha)Contoh Unsur Kimia
Ini adalah contoh lain yang muncul dari otak saya:
sumber
isotope
bukan kasus khususElemenet
. Saya lebih suka memilikiElement
propertiIsotope
.Contoh dunia nyata hampir selalu salah karena mereka memberikan contoh di mana selalu ada kemungkinan sesuatu menjadi keduanya
TypeA
danTypeB
tetapi hierarki pewarisan tunggal dari banyak bahasa tidak memungkinkan itu.Semakin banyak saya memprogram, semakin saya semakin jauh dari warisan.
Bahkan kata "pewarisan" tidak digunakan dengan benar di sini. Misalnya, Anda mewarisi sekitar 50% dari sifat ayah Anda dan 50% dari sifat ibu Anda. Sungguh DNA Anda adalah komposisi setengah DNA ayahmu dan setengah DNA ibumu. Itu karena biologi sebenarnya lebih menyukai komposisi daripada warisan , dan Anda juga harus.
Cukup menerapkan antarmuka, atau bahkan lebih baik, "mengetik bebek", ditambah injeksi ketergantungan, adalah hal yang jauh lebih baik untuk mengajar orang-orang yang baru mengenal pemrograman berorientasi objek.
sumber
Saya hanya akan menunjukkan kepada mereka contoh kehidupan nyata. Misalnya, di sebagian besar kerangka kerja UI Anda berasal dari semacam kelas "Dialog" atau "Jendela" atau "Kontrol" untuk membuatnya sendiri.
sumber
Contoh yang bagus adalah fungsi bandingkan dalam penyortiran:
Satu-satunya masalah adalah para pemula terlalu sering berpikir kinerja lebih penting daripada kode yang baik ...
sumber
Contoh dunia nyata saya adalah kendaraan:
Contoh ini bisa sedetail yang Anda mau, dan ada semua jenis properti yang melekat pada kendaraan untuk menjelaskan penggunaan pengubah apa pun yang mungkin ingin Anda ajarkan.
sumber
Contoh non-mamalia, non-burung, non-ikan ini dapat membantu:
Kemudian
CATATAN: Hanya saja, jangan katakan rahasianya: Orang itu memperpanjang mamalia.
sumber
Bagaimana dengan hierarki ekspresi aljabar. Baik karena termasuk warisan dan komposisi:
Dengan pengecualian ekspresi akar Konstan, semua ekspresi lainnya adalah Ekspresi dan mengandung satu atau lebih ekspresi.
sumber
Saya akan menggunakan burung sebagai contoh
seperti ayam, bebek, elang
Saya akan menjelaskan keduanya memiliki cakar, kecupan, dan sayap tetapi atribut mereka berbeda.
Ayam tidak bisa terbang, tidak bisa berenang, bisa makan cacing, bisa makan biji-bijian
Bebek tidak bisa terbang, bisa berenang, bisa makan biji-bijian, tidak bisa makan cacing
Elang bisa terbang, tidak bisa berenang, bisa makan cacing, tidak bisa makan biji-bijian
sumber
Kloning rel khas Anda memberikan banyak contoh praktis : Anda memiliki kelas model dasar (abstrak), yang merangkum semua manipulasi data dan Anda memiliki kelas pengendali basis, yang merangkum semua komunikasi HTTP.
sumber