UML Structurel Et Heritage

66
Modélisation objet A. Beugnard Majeure Informatique – INF301 – GL-C3 2 e semestre 2015

Transcript of UML Structurel Et Heritage

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

7/25/2019 UML Structurel Et Heritage

http://slidepdf.com/reader/full/uml-structurel-et-heritage 66/66

ModéliserAssociationAgrégationCompositionCardinalité(arité,multiplicité)

Héritage

type apparenttype réelsous-type

substituabilitéredéfinitionliaisondynamique

46 / 46 A. Beugnard   Modélisation objet