Załóżmy, że masz:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deer
dziedziczy Animal
i Grass
dziedziczy po Food
.
Jak na razie dobrze. Animal
przedmioty mogą jeść Food
przedmioty.
Teraz pomieszajmy to trochę. Pozwala dodać, Lion
który dziedziczy Animal
.
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
Teraz mamy problem, ponieważ Lion
możemy jeść zarówno Deer
i Grass
, ale Deer
tak nie Food
jest Animal
.
Bez korzystania z wielokrotnego dziedziczenia i projektowania obiektowego, jak rozwiązać ten problem?
FYI: Użyłem http://www.asciiflow.com, aby stworzyć diagramy ASCII.
IHuntable
, Sheep and Cow są IHerdable
(kontrolowane przez człowieka), a Lion implementuje tylko IAnimal, co nie implikuje żadnego z tych interfejsów. AOE3 obsługuje sprawdzanie zestawu interfejsów obsługiwanych przez konkretny obiekt (podobny do instanceof
), który pozwala programowi sprawdzać jego możliwości.