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
 5  Analyse et conception, aspects dynamiques de la vue logique
 6  Conception, aspects langage et technique
 6.1  Rappel des phases du cycle de développement en V
 6.2  Conception des classes
 6.3  Rappel du diagramme de classes de l'étude de cas Studs
 6.4  Traduction des associations en attributs
 6.5  Traduction des agrégations
 6.6  Traduction des compositions~*
 6.7  Traduction de la classe « Façade » du système
 6.8  Encapsulation: visibilité~/~accessibilité des attributs et des opérations
 6.9  Traduction des attributs dérivés
 6.10  Qualification de certaines associations~*
 6.11  Traduction des diagrammes d'interaction en algorithmes
 6.12  Traduction des diagrammes de machine à états
 6.13  Traduction des relations de généralisation spécialisation
 6.14  Traduction des classes d'association~*
 6.15  Méthodologie: une fiche par classe
 QCM
 7  Conception, vues développement et physique
 8  Conclusion
 9  Bibliographie

 Contacts

W3C validator

Département INF  
 Conception et programmation orientées objet


6.13 Traduction des relations de généralisation spécialisation

  • Dans les classes enfants, possibilité d’appel au constructeur de la classe parente (si public ou protégé)
    • Par exemple, dans la classe enfant ScrutinPlageHoraire :

      constructeur(...) {
        super(...) // appel au constructeur de la classe parente Scrutin
        nbTotal = 0
      }
    • L’appel au constructeur de la classe parente doit être la première instruction
  • Dans les classes enfants, possibilité d’appel des opérations de la classe parente (si publique ou protégée)
    • Par exemple, dans la classe enfant ScrutinPlageHoraire :

      afficherScrutin() {         // opération redéfinie dans la classe enfant
          super.afficherScrutin() // appel à l’opération de classe parente Scrutin
          afficher à l’écran la valeur de l’attribut nbTotal
      }

    précédent     suivant 


Tous les algorithmes des principales opérations, ceux qui ne sont pas triviaux, doivent être écrits pendant la phase de conception. Le rôle de la programmation doit si possible être restreint à la traduction dans un langage particulier (Java en ce qui nous concerne) et à l’utilisation de canevas logiciels particuliers (par exemple, un canevas logiciel proposant des mises en œuvre de listes, de collections, d’arbre et d’autres structures de données complexes).

Cette diapositive présente une nouveauté importante de l’orientation objet concernant l’écriture des algorithmes : l’appel à partir d’une opération définie dans une classe enfant d’opérations définies dans une classe parente. Lorsqu’un arbre de généralisation spécialisation est tracé dans un diagramme de classes, certaines opérations factorisées sont définies dans une classe parente, puis redéfinies dans les classes enfants. Par définition, toute opération protégée ou publique définie dans une classe peut être appelée dans le corps d’une opération d’une classe enfant. Nous distinguons deux cas particuliers : 1) le constructeur de la classe, ou 2 ) une opération redéfinissant l’opération de la classe parente appelée. Dans le premier cas, la notation « super() » permet d’appeler le constructeur de la classe parente. Cet usage courant permet d’écrire le constructeur d’une classe comme étant l’initialisation de la partie de l’état gérée par / définie dans la classe parente, puis l’initialisation des attributs spécifiques ajoutés dans la classe enfant. Dans le second cas, il est important de se rappeler l’effet de « la liaison dynamique ou tardive » (toujours active en Java) : si une opération définie dans une classe est redéfinie dans une classe enfant, et si c’est une référence sur un objet de type de la classe enfant qui est utilisée, alors c’est l’opération de la classe enfant (c’est-à-dire, l’opération de la classe spécialisée) qui est appelée. Dans certains cas, l’opération dans la classe enfant est une « extension » du corps de l’opération correspondante de la classe parente. Dans ces cas, la notation « super.op() » permet d’appeler explicitement l’opération de la classe parente « op » dans le corps de l’opération de la classe enfant.

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