Misalkan Anda memiliki yang berikut:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deer
mewarisi dari Animal
, dan Grass
mewarisi dari Food
.
Sejauh ini baik. Animal
benda bisa memakan Food
benda.
Sekarang mari kita campur sedikit. Mari kita tambahkan Lion
yang mewarisi dari Animal
.
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
Sekarang kita punya masalah karena Lion
bisa makan keduanya Deer
dan Grass
, tetapi Deer
bukan Food
itu masalahnya Animal
.
Tanpa menggunakan pewarisan berganda, dan menggunakan desain berorientasi objek, bagaimana Anda mengatasi masalah ini?
FYI: Saya menggunakan http://www.asciiflow.com untuk membuat diagram ASCII.
IHuntable
, Sheep and Cow IHerdable
(dapat dikontrol oleh manusia), dan Lion hanya mengimplementasikan IAnimal, yang tidak menyiratkan antarmuka mana pun. AOE3 mendukung permintaan seperangkat antarmuka yang didukung oleh objek tertentu (mirip dengan instanceof
) yang memungkinkan program untuk menanyakan kemampuannya.