Ketika Anda menggunakan konsep polimorfisme Anda membuat hierarki kelas dan menggunakan referensi orang tua Anda memanggil fungsi antarmuka tanpa mengetahui tipe spesifik yang memiliki objek. Ini bagus. Contoh:
Anda memiliki koleksi hewan dan Anda memanggil semua fungsi hewan eat
dan Anda tidak peduli apakah itu makan anjing atau kucing. Tetapi dalam hierarki kelas yang sama Anda memiliki hewan yang memiliki tambahan - selain diwariskan dan diimplementasikan dari kelas Animal
, misalnya makeEggs
, getBackFromTheFreezedState
dan sebagainya. Jadi, dalam beberapa kasus dalam fungsi Anda, Anda mungkin ingin tahu tipe spesifik untuk memanggil perilaku tambahan.
Misalnya, kalau-kalau itu adalah pagi hari dan jika itu hanya binatang maka Anda menelepon eat
, jika tidak, itu adalah manusia, maka panggil dulu washHands
, getDressed
dan baru kemudian panggil eat
. Bagaimana cara menangani kasus ini? Polimorfisme mati. Anda perlu mengetahui jenis objek, yang terdengar seperti bau kode. Apakah ada pendekatan umum untuk menangani kasus ini?
Eater
antarmuka dengan eat()
metode, maka sebagai klien, Anda tidak peduli bahwa Human
pelaksana harus menelepon terlebih dahulu washHands()
dan getDressed()
, ini merupakan detail implementasi dari kelas ini. Jika, sebagai klien, Anda peduli akan fakta ini, kemungkinan besar Anda tidak menggunakan alat yang tepat untuk pekerjaan itu.
getDressed
sebelum mereka eat
, itu tidak terjadi untuk makan siang. Tergantung pada keadaan Anda, washHands();if !dressed then getDressed();[code to actually eat]
mungkin cara terbaik untuk menerapkan ini untuk manusia. Kemungkinan lain adalah bagaimana jika hal-hal lain mengharuskan itu washHands
dan / atau getDressed
dipanggil? Misalkan Anda memiliki leaveForWork
? Anda mungkin perlu menyusun alur program Anda untuk memilikinya sehingga itu disebut jauh sebelum itu.