Supponiamo di avere quanto segue:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deer
eredita da Animal
ed Grass
eredita da Food
.
Fin qui tutto bene. Animal
gli oggetti possono mangiare Food
oggetti.
Ora lasciamo un po 'di confusione. Consente di aggiungere un Lion
che eredita da Animal
.
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
Ora abbiamo un problema perché Lion
possiamo mangiare entrambi Deer
e Grass
, ma Deer
non Food
lo è Animal
.
Senza utilizzare l'ereditarietà multipla e la progettazione orientata agli oggetti, come si risolve questo problema?
Cordiali saluti: Ho usato http://www.asciiflow.com per creare i diagrammi ASCII.
IHuntable
, Sheep and Cow sono IHerdable
(controllabili dall'uomo) e Lion implementa solo IAnimal, che non implica nessuna di quelle interfacce. AOE3 supporta l'interrogazione dell'insieme di interfacce supportate da un oggetto particolare (simile a instanceof
) che consente a un programma di interrogare le sue capacità.