Supposons que vous ayez les éléments suivants:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deer
hérite Animal
et Grass
hérite de Food
.
Jusqu'ici tout va bien. Animal
les objets peuvent manger des Food
objets.
Permet maintenant de mélanger un peu. Ajoutons un Lion
qui hérite de Animal
.
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
Maintenant, nous avons un problème parce que Lion
peut manger à la fois Deer
et Grass
, mais ce Deer
n'est pas Food
le cas Animal
.
Sans utiliser l'héritage multiple et la conception orientée objet, comment résoudre ce problème?
Pour info: j'ai utilisé http://www.asciiflow.com pour créer les diagrammes ASCII.
IHuntable
, Sheep et Cow sont IHerdable
(contrôlables par l'homme), et Lion implémente uniquement IAnimal, ce qui n'implique aucune de ces interfaces. AOE3 prend en charge l'interrogation de l'ensemble des interfaces prises en charge par un objet particulier (similaire à instanceof
) qui permet à un programme d'interroger ses capacités.