Formation héritage non-conforme en Eiffel

Formation héritage non-conforme en Eiffel, tutoriel & guide de travaux pratiques en pdf.

Le mécanisme d’héritage non-conforme

Objectifs
Le mécanisme d’héritage non-conforme a été introduit dans le langage Eiffel pour permettre l’héritage d’implantation et l’héritage utilitaire sans entraîner la possibilité d’appels de méthodes polymorphes. Nous avons déjà vu un exemple d’héritage d’implantation dans l’exemple de la classe STACK héritant de ARRAY. Plus généralement, une d’héritage est dit d’implantation quand une classe hérite d’une autre classe pour réaliser une abstraction différente. L’héritage utilitaire ressemble à l’héritage d’implantation, mais diffère de lui en ce sens que la classe ancêtre représente moins un type abstrait qu’une bibliothèque de fonctions et/ou de constantes.
Pour réaliser l’objectif d’un héritage entre une classe A et une classe B n’entraînant pas la possibilité d’appels polymorphes de méthodes de A à travers des variables de type B (par exemple des appels à Stack.get au travers d’une variable de type Vector ),nous avons introduitl’héritage non-conformequi n’introduitpas de relation de sous-typage (ou conformance) entre les types en jeu, et interdisant par conséquent toute affectation polymorphe entre ces types.
L’héritage classique garde bien sûr son utilité et est conservé. Pour éviter toute confusion entre les deux types d’héritage, nous appellerons l’héritage classique héritage conforme. La figure 1 introduit une notation graphique pour ces deux types d’héritage.

Typage de l’héritage non-conforme
Comme nous l’avons déjà vu, l’héritage non-conforme se distingue de l’héritage classique par le fait qu’il n’entraîne pas de relation de sous-typage, c’est-à-dire de conformance, entre les types parent et héritier. Cette non-conformance interdit d’affecter un objet de la classe fille à une variable de la classe-mère, ou de passer en paramètre effectif d’une méthode un objet de la classe fille quand le paramètre formel est de la classe mère. Cette interdiction de polymorphisme n’admet aucune exception, ce qui distingue ce mécanisme de l’héritage privé de C++ . En dehors de cette absence de sous-typage, l’héritage non-conformeprésente exactement les mêmes caractéristiques que l’héritage ordinaire du langage hôte. Ainsi, en Eiffel l’héritage multiple et répété, la redéfinition, le renommage et le changement de visibilité de méthodes héritées sont supportés sans difficulté particulière.
Dans un contexte où une classe peut hériter plusieurs fois, certaines de ces relations d’héritage étant conformes et d’autres non, il convient toutefois de préciser le vocabulaire pour décrire les relations d’héritage et de sous-typage qui lient les classes du système.
Pour deux classes A et B, nous dirons que A est un parent de B si B hérite de A, indépendemment de la nature conforme ou non de cet héritage. La relation « A est ancêtre de B » est la clôture réflexive transitive de la relation « A est parent de B ».
La classe A est un parent conforme de B si A est parent de B et qu’une au moins des relations d’héritage qui lie B à A est conforme. La relation « A est ancêtre conforme de B » est la clôture réflexive transitive de la relation « A est parent conforme de B ». Pour les besoins de notre discussion, nous dirons de manière synonyme que A est un sous-type de B ou que B est un ancêtre conforme de A.

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *