Припустимо, у вас є наступне:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deer
успадковує від Animal
, а Grass
успадковує від Food
.
Все йде нормально. Animal
предмети можуть їсти Food
предмети.
Тепер давайте трохи змішати його. Додамо додавання, Lion
яке успадковується від Animal
.
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
Зараз у нас є проблема, тому що Lion
можна їсти і те, Deer
і це Grass
, але Deer
це не Food
так Animal
.
Як ви вирішите цю проблему, використовуючи багаторазове успадкування та використовуючи об'єктно-орієнтований дизайн?
FYI: Я використовував http://www.asciiflow.com для створення діаграм ASCII.
IHuntable
, Вівці та Корова IHerdable
(керовані людиною), а Лев реалізує лише IAnimal, що не передбачає жодного з цих інтерфейсів. AOE3 підтримує запит набору інтерфейсів, підтримуваних певним об'єктом (подібним до instanceof
), що дозволяє програмі запитувати його можливості.