1. Les étudiants et les enseignants héritent de la classe Personne. D’autres personnes, qui ne sont ni des étudiants, ni des enseignants, dérivent de la classe Personne. Ajoutez la contrainte {incomplete} du langage OCL pour expliciter cette situation.
2. Un doctorant est à la fois un étudiant et un enseignant. Le doctorant hérite à la fois des propriétés des enseignants et de celles des étudiants. Il s’agit bien d’un héritage multiple. Cela nécessite, également, l’ajout de la contrainte {overlapping}, qui indique qu’un étudiant et un enseignant peuvent instancier le même objet (l’intersection entre les ensembles d’objets des classes Enseignant et Étudiant n’est pas vide). Ce modèle est correct pour une implémentation en C++, car ce langage autorise l’héritage multiple.
Java n’accepte que l’héritage simple. Cette contrainte implique une modélisation hiérarchique de l’héritage. En d’autres termes, une classe peut avoir au plus un seul parent. L’ajout de cette contrainte implique implicitement l’ajout de la contrainte {disjoint} entre les classes qui dérivent directement de toute classe du modèle. Vous pouvez modéliser.
cela en séparant les instances des doctorants de celles des étudiants et des enseignants. Vous obtenez le modèle présenté à la figure 2.60.
3. L’inscription nécessite au moins deux opérations.
Dans le cas de l’héritage simple, la solution consiste à définir une interface Inscription contenant les deux opérations. Celles-ci peuvent être réalisées par la classe Étudiant et utilisées par la classe Doctorant (figure 2.61).
La solution proposée par la figure 2.61 est aussi valable dans le cas où le langage supporte l’héritage multiple. Cependant, dans ce dernier cas, deux autres solutions sont possibles comme le montre la figure 2.62.