Accueil
 Sommaire
 1  Objectifs de ce cours de modélisation orientée objet
 2  Généralités sur la modélisation orienté objet et sur UML
 3  Analyse, vues cas d'utilisation et processus
 4  Analyse et conception, aspects statiques de la vue logique
 4.1  Diagrammes communs à l'analyse et à la conception
 4.2  Diagramme de classes
 4.2.1  Modéliser la structure logique du système dans un diagramme de classes
 4.2.2  Classe
 4.2.3  Instanciation: création d'un objet d'une classe
 4.2.4  Attributs et opérations de classe
 4.2.5  Attribut dérivé
 4.2.6  Association entre classes
 4.2.7  Nom de rôle et multiplicité
 4.2.8  Généralisation spécialisation ou héritage
 4.2.9  Généralisation spécialisation: vision ensembliste
 4.2.10  Généralisation spécialisation: vision encapsulation
 4.2.11  Généralisation et redéfinition d'opérations
 4.2.12  Méthode Polymorphique et liaison dynamique
 4.2.13  Agrégation
 4.2.14  Exemple de diagramme de classes
 4.2.15  Éléments de méthodologie
 4.3  Diagramme d'objets
 QCM
 4.4  Concepts avancés du diagramme de classes
 5  Analyse et conception, aspects dynamiques de la vue logique
 6  Conception, aspects langage et technique
 7  Conception, vues développement et physique
 8  Conclusion
 9  Bibliographie

 Contacts

W3C validator

Département INF  
 Conception et programmation orientées objet


4.2.8 Généralisation spécialisation ou héritage
  • Factorisation de caractéristiques (attributs et opérations)
    • EST-UN, EST-UNE-SORTE-DE

Figures/generalisation

    précédent     suivant 


Le but de la généralisation est la factorisation des caractéristiques de plusieurs classes appelées classes enfants12 dans une classe appelée classe parente13. Cette mise en commun des attributs (structures de données) et des opérations (services) est le mécanisme de réutilisation le plus important de l’orientation objet. La factorisation intervient aussi bien en définissant une partie d’état commune (attributs) qu’en extrayant les comportements communs (opérations). La classe parente rassemble donc les attributs et les opérations communes des classes initiales qui deviennent des classes enfants. La généralisation spécialisation s’appelle aussi un héritage et exprime intuitivement le fait que les classes enfants « héritent » des caractéristiques de leurs classes parentes. La généralisation exprime une relation de type « est-un » ou « est-une-sorte-de ». En outre, le terme « généralisation » exprimant la factorisation des caractéristiques communes dans la classe parente, le terme « spécialisation » exprime quant à lui le fait que les classes enfants possèdent les caractéristiques de leurs classes parentes avec la possibilité de les spécialiser soit par des ajouts soit par des redéfinitions (voir plus loin). En d’autres termes, une classe enfant possède les capacités de sa classe parente plus quelques autres.

Généralisation spécialisation et sous-typage :

  • un objet Personne peut désigner une instance des classes Personne, Avocat, Vendeur, Enseignant, Vacataire et Permanent ;
  • un objet Enseignant peut désigner une instance des classes Enseignant, Vacataire et Permanent ;
    • il ne peut pas désigner une instance des classes Personne, Avocat et Vendeur.

L’exemple présenté dans cette diapositive illustre des héritages dits « simples » dans le sens où les classes enfants ne possèdent qu’une filiation. Il est possible d’avoir de l’héritage multiple comme montré dans l’exemple du schéma qui suit. Cette possibilité n’existe pas dans tous les langages de programmation orientés objet. Nous déconseillons donc l’utilisation de l’héritage multiple en modélisation car l’équipe de développement peut choisir un langage ne proposant pas cette possibilité. Dans ce cas, le diagramme de classes doit alors être adapté, compliquant ainsi la traçabilité depuis le modèle d’analyse vers l’implantation. Le langage de programmation choisi dans ce module, en l’occurrence Java, n’autorise pas l’héritage multiple.

Enfin, de façon plus intrinsèque, nous déconseillons l’utilisation de l’héritage multiple car il pose des problèmes d’interprétation. Par exemple, que fait-on lorsqu’un attribut ou une opération existe « en double » ou « triple » dans les classes parentes. Dans l’exemple qui suit, dans la classe VoitureAmphibie, comment interprète-t-on l’opération avancer() héritée de la classe parente « racine » Véhicule et ensuite spécialisée dans les classes parentes VéhiculeTerrestre et VéhiculeMarin ?

La figure qui suit montre une visualisation du concept de généralisation / spécialisation multiple. L’ensemble des objets de la classe VoitureAmphibie représente l’intersection des ensembles d’objets des deux classes parentes, VéhiculeTerrestre et VéhiculeMarin.

Figures/heritage_multiple

Cf. le glossaire pour la définition des termes « généralisation spécialisation », « héritage », et « généralisation spécialisation multiple ».

D. Conan, C. Taconet, C. Bac, Télécom SudParis, CSC 4002, Octobre 2015

12.Ou sous-classes, ou encore classes dérivées.

13.Ou super-classe.