Upload
monique-calmon
View
227
Download
0
Embed Size (px)
Citation preview
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 1/66
Modélisation objet
A. BeugnardMajeure Informatique – INF301 – GL-C32e semestre 2015
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 2/66
Les cours de l’axe GL de l’UV1 - INF301
1. La découverte des objets2. Les cycles de vie des logiciels3. UML structurel et héritage
4. UML comportemental et concurrence
2 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 3/66
Objectifs
Introduction à UMLL’héritageLa laison dynamique
Je vous invite à prendre des notes. . .
3 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 4/66
Avancement
1 Introduction à UMLModéliserLa structure en UML
2 Héritage
3 Conclusion
4 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 5/66
Un programme
1 /∗∗
2 ∗ Version simple de la classe Product. Un produit possède un nom. Il3 ∗ est possible de récupérer ce nom et de transformer un produit en4 ∗ chaîne de caractères .5 ∗ @authors F.Dagnat6 ∗/7 public class Product {8 /∗∗ le nom du produit sous forme d’une chaîne de caractères ∗/9 private String name;
10 /∗∗
un constructeur qui prend en paramètre le nom du nouveau produit ∗
/11 public Product(String name) { this. name = name; }12 /∗∗ rend une chaîne de caractères qui est le nom du produit ∗/13 public String getName() { return name; }14 /∗∗ rend une chaîne de caractères qui décrit le produit ∗/15 public String toString () { return "Produit " + name; }16 /∗∗ Une méthode main qui teste cette classe ∗/17 public static void main(String [] args) {18 Product p1 = new Product("p1");
19 System.out. println (p1);20 new Product("");21 Product p3 = new Product("p3");22 System.out. println (p3);23 System.out. println ("Le nom de p3 est " + p3.getName());24 }25 }
5 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 6/66
Un programme indenté
1 /∗∗
2 ∗ Version simple de la classe Product. Un produit possède un nom. Il3 ∗ est possible de récupérer ce nom et de transformer un produit en4 ∗ chaîne de caractères .5 ∗ @authors F.Dagnat6 ∗/7 public class Product {8 /∗∗ le nom du produit sous forme d’une chaîne de caractères ∗/9 private String name;
10 /∗∗
un constructeur qui prend en paramètre le nom du nouveau produit ∗
/11 public Product(String name) { this .name = name; }12 /∗∗ rend une chaîne de caractères qui est le nom du produit ∗/13 public String getName() { return name; }14 /∗∗ rend une chaîne de caractères qui décrit le produit ∗/15 public String toString() { return "Produit " + name; }16 /∗∗ Une méthode main qui teste cette classe ∗/17 public static void main(String [] args) {18 Product p1 = new Product("p1");19 System.out. println (p1);20 new Product("");21 Product p3 = new Product("p3");22 System.out. println (p3);23 System.out. println ("Le nom de p3 est " + p3.getName());24 }25 }
6 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 7/66
Un programme indenté et coloré
1 /∗∗
2 ∗ Version simple de la classe Product. Un produit possède un nom. Il3 ∗ est possible de récupérer ce nom et de transformer un produit en4 ∗ chaîne de caractères .5 ∗ @authors F.Dagnat6 ∗/7 public class Product {8 /∗∗ le nom du produit sous forme d’une chaîne de caractères ∗/9 private String name;
10 /∗∗
un constructeur qui prend en paramètre le nom du nouveau produit ∗
/11 public Product(String name) { this .name = name; }12 /∗∗ rend une chaîne de caractères qui est le nom du produit ∗/13 public String getName() { return name; }14 /∗∗ rend une chaîne de caractères qui décrit le produit ∗/15 public String toString () { return "Produit " + name; }16 /∗∗ Une méthode main qui teste cette classe ∗/17 public static void main(String [] args) {18 Product p1 = new Product("p1");19 System.out. println (p1);20 new Product("");21 Product p3 = new Product("p3");22 System.out. println (p3);23 System.out. println ("Le nom de p3 est " + p3.getName());24 }25 }
7 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 8/66
Un programme simplifié
1 /∗∗
2 ∗ Version simple de la classe Product. Un produit possède un nom. Il3 ∗ est possible de récupérer ce nom et de transformer un produit en4 ∗ chaîne de caractères .5 ∗ @authors F.Dagnat6 ∗/7 public class Product {8 /∗∗ le nom du produit sous forme d’une chaîne de caractères ∗/9 private String name;
10 /∗∗ un constructeur qui prend en paramètre le nom du nouveau produit ∗/11 public Product(String name) { ... }12 /∗∗ rend une chaîne de caractères qui est le nom du produit ∗/13 public String getName() { ... }14
/∗∗
rend une chaîne de caractères qui décrit le produit ∗
/15 public String toString () { ... }16 /∗∗ Une méthode main qui teste cette classe ∗/17 public static void main(String [] args) { ... }18 }
8 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 9/66
Un saut qualitatif
Product
- name : String
+ Product(String)
+ getName() : String+ toString(): String
9 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 10/66
Encore plus simple
Product
10 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 11/66
Représentation et cycle de vie
Analyse
Product
Conception
Product
- name : String+ Product(String)
+ getName() : String
+ toString() : String
Réalisation1 /∗∗
2 ∗ Version simple de la classe Product. Un produit possède un nom. Il3 ∗ est possible de récupérer ce nom et de transformer un produit en4 ∗ chaîne de caractères .5 ∗ @authors F.Dagnat6 ∗/7 public class Product {8 /∗∗ le nom du produit sous forme d’une chaîne de caractères ∗/9 private String name;
10 /∗∗
un constructeur qui prend en paramètre le nom du nouveau produit ∗
/11 public Product(String name) { this .name = name; }12 /∗∗ rend une chaîne de caractères qui est le nom du produit ∗/13 public String getName() { return name; }14 /∗∗ rend une chaîne de caractères qui décrit le produit ∗/15 public String toString () { return "Produit " + name; }16 /∗∗ Une méthode main qui teste cette classe ∗/17 public static void main(String [] args ) {18 Product p1 = new Product("p1");19 System.out. println (p1);20 new Product("");21 Product p3 = new Product("p3");22 System.out. println (p3);23 System.out. println ("Le nom de p3 est " + p3.getName());
24 }25 }
11 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 12/66
Raffinement
Passer du plus abstrait , le moins détailléAu plus concret , avec tous les détailsPetit à petit, sûrement .
12 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 13/66
Raffinement
Passer du plus abstrait , le moins détailléAu plus concret , avec tous les détailsPetit à petit, sûrement .
Les difficultés ?Que détailler ?Comment détailler ?
À quelle vitesse détailler ?
12 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 14/66
Raffinement
Passer du plus abstrait , le moins détailléAu plus concret , avec tous les détailsPetit à petit, sûrement .
Les difficultés ?Que détailler ?Comment détailler ?
À quelle vitesse détailler ?
Les méthodes proposent cela. Elles sont fonction dudomaine, du métier, etc.
12 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 15/66
Des classes en UML
Product
- numberCreated : int
- number : int
- name : String+ Product(String)
+ getNumberCreated(): int
+ getNumber(): int
+ getName() : String
+ toString(): String
+ main(String[])
13 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 16/66
Relier des classes en UML
Product
...
...
Stock
...
...
Comment exprimer qu’un Produit est dans un Stock ?
14 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 17/66
Relier des classes en UML
Product
...
...
Stock
...
...
Comment exprimer qu’un Produit est dans un Stock ?
14 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 18/66
Relier des classes en UML
Product
...
...
Stock
...
... monStock
Comment exprimer qu’un Produit est dans un Stock ?
14 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 19/66
Relier des classes en UML
Product
...
...
Stock
...
...
*
et qu’un Stock peut contenir plusieurs Produits ?
14 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 20/66
Relier des classes en UML
Product
...
...
Stock
...
...
*produits
Comment exprimer qu’un Produit est dans un Stock ?et qu’un Stock peut contenir plusieurs Produits ?
14 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 21/66
Un produit est dans un stock (java)
1 public class Product {
2 /∗∗ le nom du produit sous forme d’une chaîne de caractères ∗/3 private String name;
4 /∗∗ le stock dans lequel je suis rangé ∗/5 private Stock monStock;
6 /∗∗ un constructeur qui prend en paramètre le nom du nouveau produit ∗/7 public Product(String name) { . . . }
8 /∗∗ rend une chaîne de caractères qui est le nom du produit ∗/9 public String getName() { ... }
10 /∗∗ Les méthodes pour manipuler monStock ∗/11 // ...12 /∗∗ rend une chaîne de caractères qui décrit le produit ∗/13 public String toString() { ... }
14 /∗∗ Une méthode main qui teste cette classe ∗/15 public static void main(String[] args) {...}
16 }
15 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 22/66
Un stock contient des produits (java)
1 public class Stock {
2 /∗∗ le tableau contenant les produits ∗/3 private Product[] content;
4 /∗∗ le nombre de produits déposés ∗/5 private int size = 0;
6 /∗∗ un constructeur avec comme paramètre la tail le du stock
7 ∗ @param s la tail le du stock ∗/8 public Stock(int s) { content = new Product[s]; }
9 /∗∗ rajoute un nouveau produit dans le stock10 ∗ @param p le produit qui est rajouté ∗/11 public void add(Product p){
12
if (p==null) return;13 content[size++] = p;
14 }
15 }
16 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 23/66
De nombreuses variantes
Product Stock
contient
17 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 24/66
De nombreuses variantes
Product Stock
contient
Product Stockproduits monStock
17 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 25/66
De nombreuses variantes
Product Stock
contient
Product Stockproduits monStock
Product Stock1
-monStock
17 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 26/66
De nombreuses variantes
Product Stock
contient
Product Stockproduits monStock
Product Stock1
-monStock
Product Stock
*
produits
1
monStock
contient
17 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 27/66
De nombreuses variantes
Product Stock
contient
Product Stockproduits monStock
Product Stock1
-monStock
Product Stock
*
produits
1
monStock
contient
Product Stock0..10produits
0..1 monStock
contient
17 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 28/66
Des relations plus fortes
Un tout et ses parties . . .
Agrégation : parties partagées ; indépendance decréation
Composition : pas de partage des parties ; détruire lelivre, détruit les chapitres.
18 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 29/66
Des relations plus fortes
Un tout et ses parties . . .
Agrégation : parties partagées ; indépendance decréation
Auteur Livre*1..*
Composition : pas de partage des parties ; détruire lelivre, détruit les chapitres.
18 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 30/66
Des relations plus fortes
Un tout et ses parties . . .
Agrégation : parties partagées ; indépendance decréation
Auteur Livre*1..*
Composition : pas de partage des parties ; détruire lelivre, détruit les chapitres.
Chapitre Livre
11..*
18 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 31/66
Une association riche
Où placer le salaire d’un employé ? S’il a au plus unemployeur...
Employé Entreprise1..* 0..1
19 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 32/66
Une association riche
Où placer le salaire d’un employé ? S’il a au plus unemployeur...
Employé
- salaire
Entreprise1..* 0..1
19 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 33/66
Une association riche
Où placer le salaire d’un employé ? S’il a au plus unemployeur...Et s’il a plusieurs employeurs ?
Employé Entreprise* *
19 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 34/66
Une association riche
Où placer le salaire d’un employé ? S’il a au plus unemployeur...Et s’il a plusieurs employeurs ?
Employé Entreprise* *
Emploi
- salaire
19 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 35/66
Association et Java
Les associations n’existent pas en Java
Elles sont traduites par un attribut
qui référence une classe simple pour les cardinalités0..1 ou 1qui référence un tableau ou une liste pour lescardinalités >1
20 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 36/66
Boîte ou code ?
Pour réfléchir, les diagrammes ; pour réaliser, le codeAbstraction Boîte > JavaLisibilité Boîte > Java
Facilité à écrire Boîte >
JavaFacilité à manipuler Boîte > JavaDétails Java > BoîtePrécisions Java > Boîte
Exécutable Java > Boîte
21 / 46 A. Beugnard Modélisation objet
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 37/66
Retour sur l’ascenseur
Ascenseur
+ allerA(Etage)
Etage- numéro : int
+ ouvrir()
+ fermer()
Mouvement
-position
-mvts∗
∗
-depart
∗
-arrivée
22 / 46 A. Beugnard Modélisation objet
A
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 38/66
Avancement
1 Introduction à UML
2 Héritage
PrincipesConséquences
3 Conclusion
23 / 46 A. Beugnard Modélisation objet
L défi d l é ili i
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 39/66
Le défi de la réutilisation
Comment ajouter des propriétés à une classe ?un attribut : nom, couleur, délai, age, . . .une fonction : viellir(), afficherCouleur(), . . .
Par exemple, on dispose de la classe Produit et onsouhaite ajouter une adresse de livraison.Comment faire ?
24 / 46 A. Beugnard Modélisation objet
T i l i
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 40/66
Trois solutions
1. On modifie le code source directementIl faut posséder le code sourceIl faut mesurer les conséquences sur les autres objets quiutilisent cette classeIl faut faire de nouveaux tests
2. On crée une nouvelle classe qui redirige vers laclasse existante ; délégation
3. On crée une nouvelle classe qui hérite de la classe
existante ; héritage
25 / 46 A. Beugnard Modélisation objet
P i i d l délé ti
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 41/66
Principe de la délégation
Product
- numberCreated : int
- number : int
+ Product(String)
+ getNumber() : int
+ toString() : String
ProduitLivrable
- address : String
+ ProduitLivrable(String)
+ getNumber() : int
+ getAddress() : String
p
Déléguer, c’est rediriger vers. . . p1 public ProduitLivrable(String s) {
2 p = new Product(); // le délégué
3 address = s;4 }
5 public int getNumber() {
6 return p.getNumber();
7 }
26 / 46 A. Beugnard Modélisation objet
P i i d l’hé it
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 42/66
Principe de l’héritage
Product
- numberCreated : int
- number : int
+ Product(String)
+ getNumber() : int
+ toString() : String
ProduitLivrable
- address : String
+ ProduitLivrable(String)
+ getAddress() : String
Hériter, c’est écrire uniquement les propriétéssupplémentaires
1 public ProduitLivrable(String s) {
2 // pas de délégué3 address = s;
4 }
5 /∗∗ redirections inutiles ∗/
27 / 46 A. Beugnard Modélisation objet
C i
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 43/66
Comparaison
Changer le code sourcepas toujours possiblepas structurant (toujours tout dans la même classe)
Délégueron sépare bien, mais on écrit toute la mécanique à la mainsi le code d’origine change, il faut aussi adapter
Hériteron sépare et la mécanique est automatique
28 / 46 A. Beugnard Modélisation objet
En mémoire
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 44/66
En mémoire
Délégation : 2 objets différents:Produit
name : “A”
number : 4678
:ProduitLivrable
address : “Brest”
Héritage : 1 unique objet (2 zones):ProduitLivrable
name : “A”
number : 4678
address : “Brest”
29 / 46 A. Beugnard Modélisation objet
Héritage en Java
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 45/66
Héritage en Java
1 public class ProduitLivrable extends Product {2
3 String address ; // un attribut ajouté4 public ProduitLivrable(String s) {
5 address = s;
6 }
7
8 public String getAddress() { //méthode ajoutée9 return address;
10 }
11 }
30 / 46 A. Beugnard Modélisation objet
Différents héritages
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 46/66
Différents héritages
Héritage simple (Java)Animal
Mammal Insect
Monkey Horse
Arbre d’héritage
Héritage multiple (C++)Vehicle
Boat Truck
Amphibious
Graphe d’héritage
31 / 46 A. Beugnard Modélisation objet
Usage de l’héritage
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 47/66
Usage de l héritage
Conceptualiser organiser, classer, relation “est-un”Réutiliser partager des méthodes, des attributs
Vocabulairesous-classe, classe fille, classe dérivée ; on spécialise
super classe, classe mère, classe de base ; ongénéralise
32 / 46 A. Beugnard Modélisation objet
Conséquences de l’héritage
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 48/66
Conséquences de l héritage
SubstituabilitéRedéfinition
33 / 46 A. Beugnard Modélisation objet
Substituabilité
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 49/66
Substituabilité
Une instance d’une classe ProduitLivrable qui hérited’une classe Produit est aussi considérée comme uneinstance de la classe Produit
1 Produit p; // on déclare un Produit2 p = new ProduitLivrable(‘‘A’’ ); //c’est possible !
On peut utiliser un ProduitLivrable partout où onpouvait utiliser un Produit ; c’est le principe de
substituabilité
34 / 46 A. Beugnard Modélisation objet
Redéfinition
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 50/66
Redéfinition
On utilise l’héritage pour :ajouter des attributsajouter des méthodes
redéfinir des méthodes déjà définies
35 / 46 A. Beugnard Modélisation objet
Exemple de redéfinition
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 51/66
Exemple de redéfinition
Parallelogram
+ perimeter() : float
+ surface() : float
Rectangle
+ perimeter() : float
+ surface() : float
Square
+ perimeter() : float
+ surface() : float
Chaque façon de calculer le périmètreou la surface est spécifique
36 / 46 A. Beugnard Modélisation objet
Typage sous-typage substituabilité
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 52/66
Typage, sous typage, substituabilité
Imaginons1 public class Vegetal extends EtreVivant {...
2 public boolean canBeEatenBy(Animal a) {...}
3 }
On veut vouloir écrire1 carotte.canBeEatenBy(new Lapin());
2 herbe.canBeEatenBy(new Humain());
C’est possible car Lapin <: Animal
et Humain <: Animal.(lire “est un sous-type de ”)
37 / 46 A. Beugnard Modélisation objet
Sous-type
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 53/66
Sous type
Un type T’ est un sous-type d’un type T si etseulement si toutes les entités de type T’ sont de typeT; on note T’ <: T
Exempleschar <: intsi Lapin extends Animal alors Lapin <: Animal
38 / 46 A. Beugnard Modélisation objet
Types d’une référence
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 54/66
Types d une référence
1 A a = new B();Les références ont 2 types
1. Le type de la déclaration (ici A) : le type apparent
2. Le type de l’instantiation (ici B) : le type réel Contrainte : Type Réel <: Type Apparent
1 public void m(A a) {...} // dans une classe C
2 // ailleurs3 C c = new C();4 c. m(new B());
39 / 46 A. Beugnard Modélisation objet
Liaison dynamique
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 55/66
y q
Object
+ toString() : String
Produit
+ toString() : String
ProduiLivrable
+ toString() : String
1 Object o ;2 o=new Object();o.toString();//13 o=new Produit();o.toString();//24 o=new ProduitLivrable();o.toString();//3
Quelle méthode est exécutée dansles cas 1, 2 et 3?
40 / 46 A. Beugnard Modélisation objet
Liaison dynamique
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 56/66
y q
Object
+ toString() : String
Produit
+ toString() : String
ProduiLivrable
+ toString() : String
1 Object o ;2 o=new Object();o.toString();//13 o=new Produit();o.toString();//24 o=new ProduitLivrable();o.toString();//3
Quelle méthode est exécutée dansles cas 1, 2 et 3?1. de Obect2. de Produit
3. de ProduitLivrable
40 / 46 A. Beugnard Modélisation objet
Principe de la liaison dynamique
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 57/66
p y q
On exécute la méthode la plus spécifique possiblecompatible avec le type réel de l’objet.
Le type apparent (déclaration) permet au compilateur
de vérifier qu’une méthode sera trouvée et donnel’autorisation.
41 / 46 A. Beugnard Modélisation objet
Intérêt de la liaison dynamique
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 58/66
y q
On considère du code compilé, testé, livré il y aplusieurs années (Object, Client et Truc)
o:Object
+ toString() : String
c:Client
+ m(Object)t:Truc
1 :c.m(o)2 :o.toString()
42 / 46 A. Beugnard Modélisation objet
Intérêt de la liaison dynamique
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 59/66
y q
On considère du code compilé, testé, livré il y aplusieurs années (Object, Client et Truc)
o:Object
+ toString() : String
c:Client
+ m(Object)t:Truc
1 :c.m(o)2 :o.toString()
p:Product
+ toString() : String
On ajoute la classe Product et
le code c.m(p) ;
42 / 46 A. Beugnard Modélisation objet
Intérêt de la liaison dynamique
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 60/66
On considère du code compilé, testé, livré il y aplusieurs années (Object, Client et Truc)
o:Object
+ toString() : String
c:Client
+ m(Object)t:Truc
1 :c.m(o)2 :o.toString()
p:Product
+ toString() : String
On ajoute la classe Product et
le code c.m(p) ;
1’ :c.m(p)
42 / 46 A. Beugnard Modélisation objet
Intérêt de la liaison dynamique
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 61/66
On considère du code compilé, testé, livré il y aplusieurs années (Object, Client et Truc)
o:Object
+ toString() : String
c:Client
+ m(Object)t:Truc
1 :c.m(o)2 :o.toString()
p:Product
+ toString() : String
On ajoute la classe Product et
le code c.m(p) ;
1’ :c.m(p)2’ :o.toString()
42 / 46 A. Beugnard Modélisation objet
Intérêt de la liaison dynamique
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 62/66
On considère du code compilé, testé, livré il y aplusieurs années (Object, Client et Truc)
o:Object
+ toString() : String
c:Client
+ m(Object)t:Truc
1 :c.m(o)2 :o.toString()
p:Product
+ toString() : String
On ajoute la classe Product et
le code c.m(p) ;
1’ :c.m(p)2’ :o.toString()
Le code de Client n’a pas changé. Possible carProduit <: Object. En 2’, o vaut p !
42 / 46 A. Beugnard Modélisation objet
Synthèse sur la liaison dynamique
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 63/66
L’ancien code compilé (Client) est capable d’appeler lenouveau code (Product) grace à . . . la liaisondynamique
On n’appelle pas toString() dans le code qu’on aécrit...C’est le code existant qui appelle au bon moment ;plus sûr.
C’est possible et sûr car :Type Réel (Produit) < : (Object) Type Apparent
43 / 46 A. Beugnard Modélisation objet
Avancement
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 64/66
1 Introduction à UML
2 Héritage
3 Conclusion
44 / 46 A. Beugnard Modélisation objet
Conclusion
7/25/2019 UML Structurel Et Heritage
http://slidepdf.com/reader/full/uml-structurel-et-heritage 65/66
Ne vous lancez pas dans la programmation troprapidement
faites des dessinsréfléchissez
étudiez des variantes
L’héritage permet d’organiser et de réutiliser
La liaison dynamique est le mécanisme qui rend laprogrammation objet plus réutilisable
45 / 46 A. Beugnard Modélisation objet
Vocabulaire