Problème du diamant

Problème du diamant
Un diagramme d'héritage en diamant.

Le problème du diamant arrive principalement en programmation orientée objet, lorsque le langage permet l'héritage multiple. Si une classe D hérite de deux classes B et C, elles mêmes filles d'une même classe A, se pose un problème de conflit lorsque des fonctions ou des champs des classes B et C portent le même nom. Le nom de ce problème provient de la forme du schéma d'héritage des classes A, B, C et D dans ce cas.

Par exemple, dans le cas d'une interface graphique, une classe Button pourrait hériter de deux classes Rectangle (gérant son apparence) et Clickable (gérant les clics de souris) et ces deux classes hériter d'une classe Object. Si la classe Object définit la fonction equals (gérant la comparaison entre objets), qu'une des deux sous classes Rectangle ou Clickable (ou les deux) étendent cette fonction pour l'adapter à leurs particularités, laquelle des fonctions equals de Rectangle ou de Clickable la classe Button doit elle utiliser? Choisir arbitrairement une seule des deux fonctions ferait perdre l'intérêt de l'héritage; utiliser les deux fonctions pose le problème de l'ordre des appels, de la combinaison des résultats (ou des erreurs), de l'éventuelle redondance de leurs effets, etc.

Sommaire

Approches de résolution

En permettant l'héritage multiple

Les langages de programmation peuvent résoudre ce problème de façons différentes :

  • Scala utilise la fonction définie dans la première classe, après avoir aplati l'arbre les traits par une recherche « right-first depth-first » et éliminé les doublons (ne conservant que le dernier des traits surnuméraires). Ainsi, l'ordre de résolution de l'exemple de l'introduction serait [D, C, A, B, A], réduit en [D, C, B, A].

En contournant l'héritage multiple

D'autres langages interdisent plus simplement l'héritage multiple (comme Ada, Ruby, Objective-C, PHP, C#, Delphi/Free Pascal et Java): une classe n'hérite que d'une seule autre, mais peut implémenter une liste d'Interfaces. Ces interfaces ne contiennent que des méthodes abstraites, c'est-à-dire ne contenant aucun code. C'est à la classe C d'implémenter toutes les méthodes de toutes ses interfaces. Les interfaces sont dans ce cas assimilables à des contrats forçant toutes les classes les utilisant d'implémenter les mêmes méthodes.

Notes et références

Bibliographie

  • Eddy Truyen, Wouter Joosen, Bo Nørregaard Jørgensen, Pierre Verbaeten, « A Generalization and Solution to the Common Ancestor Dilemma Problem in Delegation-Based Object Systems », dans Proceedings of the 2004 Dynamic Aspects Workshop, no 103–119, 2004 [texte intégral] 

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Problème du diamant de Wikipédia en français (auteurs)

Игры ⚽ Поможем решить контрольную работу

Regardez d'autres dictionnaires:

  • Diamant de conflit — Diamants de conflits Les diamants de conflits, parfois aussi nommés « diamants de sang », sont des diamants issus du continent africain, et qui alimentent les nombreuses guerres livrées par des rebelles aux gouvernements. Extraits de… …   Wikipédia en Français

  • Diamant de sang — Diamants de conflits Les diamants de conflits, parfois aussi nommés « diamants de sang », sont des diamants issus du continent africain, et qui alimentent les nombreuses guerres livrées par des rebelles aux gouvernements. Extraits de… …   Wikipédia en Français

  • Rocher du diamant — Pour les articles homonymes, voir Diamant (homonymie). Rocher du Diamant …   Wikipédia en Français

  • Cellule a enclumes de diamant — Cellule à enclumes de diamant Schéma du principe d une cellule à enclumes de diamant La cellule à enclumes de diamant (en anglais diamond anvil cell) est un dispositif qui permet de soumettre un matériau à des pressions et températures très… …   Wikipédia en Français

  • Cellule à enclumes de diamant — Schéma du principe d une cellule à enclumes de diamant La cellule à enclumes de diamant (en anglais diamond anvil cell) ou presse à enclume de diamant est un dispositif qui permet de soumettre un matériau à des pressions et températures très… …   Wikipédia en Français

  • Dora Diamant — (Dworja Diament, Dora Dymant) (* 4. März 1898 in Pabianice, Russisches Kaiserreich; † 15. August 1952 in London) war die letzte Lebensgefährtin von Franz Kafka. Inhaltsverzeichnis 1 Leben 2 Roman 3 …   Deutsch Wikipedia

  • Héritage multiple — Certains langages de programmation orientés objets (par exemple C++, Eiffel, Python...) permettent l’héritage multiple, dans lequel une classe peut hériter de comportements et de fonctionnalités de plus d une super classe. Au contraire de l… …   Wikipédia en Français

  • Héritage (informatique) — Pour les articles homonymes, voir Héritage. L’héritage est un concept puissant de la programmation orientée objet, permettant entre autres la réutilisabilité (décomposition du système en composants) et l adaptabilité des objets grâce au… …   Wikipédia en Français

  • Projet:Mathématiques/Liste des articles de mathématiques — Cette page n est plus mise à jour depuis l arrêt de DumZiBoT. Pour demander sa remise en service, faire une requête sur WP:RBOT Cette page recense les articles relatifs aux mathématiques, qui sont liés aux portails de mathématiques, géométrie ou… …   Wikipédia en Français

  • Liste des articles de mathematiques — Projet:Mathématiques/Liste des articles de mathématiques Cette page recense les articles relatifs aux mathématiques, qui sont liés aux portails de mathématiques, géométrie ou probabilités et statistiques via l un des trois bandeaux suivants  …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”