Sunteți pe pagina 1din 66

Modlisation objet

A. Beugnard
Majeure Informatique INF301 GL-C3
2e semestre 2015

Les cours de laxe GL de lUV1 - INF301


1.
2.
3.
4.

La dcouverte des objets


Les cycles de vie des logiciels
UML structurel et hritage
UML comportemental et concurrence

2 / 46

A. Beugnard

Modlisation objet

Objectifs
Introduction UML
Lhritage
La laison dynamique
Je vous invite prendre des notes. . .

3 / 46

A. Beugnard

Modlisation objet

Avancement
1

Introduction UML
Modliser
La structure en UML

Hritage

Conclusion

4 / 46

A. Beugnard

Modlisation objet

Un programme
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

/
Version simple de la classe Product. Un produit possde un nom. Il
est possible de rcuprer ce nom et de transformer un produit en
chane de caractres .
@authors F.Dagnat
/
public class Product {
/ le nom du produit sous forme dune chane de caractres /
private String name;
/ un constructeur qui prend en paramtre le nom du nouveau produit /
public Product(String name) { this .name = name; }
/ rend une chane de caractres qui est le nom du produit /
public String getName() { return name; }
/ rend une chane de caractres qui dcrit le produit /
public String toString () { return "Produit " + name; }
/ Une mthode main qui teste cette classe /
public static void main(String [] args) {
Product p1 = new Product("p1");
System.out. println (p1);
new Product("");
Product p3 = new Product("p3");
System.out. println (p3);
System.out. println ("Le nom de p3 est " + p3.getName());
}
}

5 / 46

A. Beugnard

Modlisation objet

Un programme indent
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

/
Version simple de la classe Product. Un produit possde un nom. Il
est possible de rcuprer ce nom et de transformer un produit en
chane de caractres .
@authors F.Dagnat
/
public class Product {
/ le nom du produit sous forme dune chane de caractres /
private String name;
/ un constructeur qui prend en paramtre le nom du nouveau produit /
public Product(String name) { this .name = name; }
/ rend une chane de caractres qui est le nom du produit /
public String getName() { return name; }
/ rend une chane de caractres qui dcrit le produit /
public String toString () { return "Produit " + name; }
/ Une mthode main qui teste cette classe /
public static void main(String [] args) {
Product p1 = new Product("p1");
System.out. println (p1);
new Product("");
Product p3 = new Product("p3");
System.out. println (p3);
System.out. println ("Le nom de p3 est " + p3.getName());
}
}

6 / 46

A. Beugnard

Modlisation objet

Un programme indent et color


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

/
Version simple de la classe Product. Un produit possde un nom. Il
est possible de rcuprer ce nom et de transformer un produit en
chane de caractres .
@authors F.Dagnat
/
public class Product {
/ le nom du produit sous forme dune chane de caractres /
private String name;
/ un constructeur qui prend en paramtre le nom du nouveau produit /
public Product(String name) { this .name = name; }
/ rend une chane de caractres qui est le nom du produit /
public String getName() { return name; }
/ rend une chane de caractres qui dcrit le produit /
public String toString () { return "Produit " + name; }
/ Une mthode main qui teste cette classe /
public static void main(String [] args) {
Product p1 = new Product("p1");
System.out. println (p1);
new Product("");
Product p3 = new Product("p3");
System.out. println (p3);
System.out. println ("Le nom de p3 est " + p3.getName());
}
}

7 / 46

A. Beugnard

Modlisation objet

Un programme simplifi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

/
Version simple de la classe Product. Un produit possde un nom. Il
est possible de rcuprer ce nom et de transformer un produit en
chane de caractres .
@authors F.Dagnat
/
public class Product {
/ le nom du produit sous forme dune chane de caractres /
private String name;
/ un constructeur qui prend en paramtre le nom du nouveau produit /
public Product(String name) { ... }
/ rend une chane de caractres qui est le nom du produit /
public String getName() { ... }
/ rend une chane de caractres qui dcrit le produit /
public String toString () { ... }
/ Une mthode main qui teste cette classe /
public static void main(String [] args) { ... }
}

8 / 46

A. Beugnard

Modlisation objet

Un saut qualitatif
Product
- name : String
+ Product(String)
+ getName() : String
+ toString() : String

9 / 46

A. Beugnard

Modlisation objet

Encore plus simple


Product

10 / 46

A. Beugnard

Modlisation objet

Reprsentation et cycle de vie


Analyse

Conception

Ralisation

Product
- name : String

Product

11 / 46

+ Product(String)
+ getName() : String
+ toString() : String

A. Beugnard

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

/
Version simple de la classe Product. Un produit possde un nom. Il
est possible de rcuprer ce nom et de transformer un produit en
chane de caractres .
@authors F.Dagnat
/
public class Product {
/ le nom du produit sous forme dune chane de caractres /
private String name;
/ un constructeur qui prend en paramtre le nom du nouveau produit /
public Product(String name) { this .name = name; }
/ rend une chane de caractres qui est le nom du produit /
public String getName() { return name; }
/ rend une chane de caractres qui dcrit le produit /
public String toString () { return "Produit " + name; }
/ Une mthode main qui teste cette classe /
public static void main(String [] args) {
Product p1 = new Product("p1");
System.out. println (p1);
new Product("");
Product p3 = new Product("p3");
System.out. println (p3);
System.out. println ("Le nom de p3 est " + p3.getName());
}
}

Modlisation objet

Raffinement
Passer du plus abstrait, le moins dtaill
Au plus concret, avec tous les dtails
Petit petit, srement.

12 / 46

A. Beugnard

Modlisation objet

Raffinement
Passer du plus abstrait, le moins dtaill
Au plus concret, avec tous les dtails
Petit petit, srement.
Les difficults ?
Que dtailler ?
Comment dtailler ?
quelle vitesse dtailler ?

12 / 46

A. Beugnard

Modlisation objet

Raffinement
Passer du plus abstrait, le moins dtaill
Au plus concret, avec tous les dtails
Petit petit, srement.
Les difficults ?
Que dtailler ?
Comment dtailler ?
quelle vitesse dtailler ?
Les mthodes proposent cela. Elles sont fonction du
domaine, du mtier, etc.
12 / 46

A. Beugnard

Modlisation objet

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

Modlisation objet

Relier des classes en UML


Product

Stock

...
...

...
...

Comment exprimer quun Produit est dans un Stock ?

14 / 46

A. Beugnard

Modlisation objet

Relier des classes en UML


Product

Stock

...
...

...
...

Comment exprimer quun Produit est dans un Stock ?

14 / 46

A. Beugnard

Modlisation objet

Relier des classes en UML


Product
...
...

Stock
monStock ...

...

Comment exprimer quun Produit est dans un Stock ?

14 / 46

A. Beugnard

Modlisation objet

Relier des classes en UML


Product
...
...

Stock
*

...
...

et quun Stock peut contenir plusieurs Produits ?

14 / 46

A. Beugnard

Modlisation objet

Relier des classes en UML


Product
...
...

Stock
*
produits

...
...

Comment exprimer quun Produit est dans un Stock ?


et quun Stock peut contenir plusieurs Produits ?

14 / 46

A. Beugnard

Modlisation objet

Un produit est dans un stock (java)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

public class Product {


/ le nom du produit sous forme dune chane de caractres /
private String name;
/ le stock dans lequel je suis rang /
private Stock monStock;
/ un constructeur qui prend en paramtre le nom du nouveau produit /
public Product(String name) { ... }
/ rend une chane de caractres qui est le nom du produit /
public String getName() { ... }
/ Les mthodes pour manipuler monStock /
// ...
/ rend une chane de caractres qui dcrit le produit /
public String toString() { ... }
/ Une mthode main qui teste cette classe /
public static void main(String[] args) {...}
}

15 / 46

A. Beugnard

Modlisation objet

Un stock contient des produits (java)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

public class Stock {


/ le tableau contenant les produits /
private Product[] content;
/ le nombre de produits dposs /
private int size = 0;
/ un constructeur avec comme paramtre la tail le du stock
@param s la tail le du stock /
public Stock(int s) { content = new Product[s]; }
/ rajoute un nouveau produit dans le stock
@param p le produit qui est rajout /
public void add(Product p){
if (p==null) return;
content[size++] = p;
}
}

16 / 46

A. Beugnard

Modlisation objet

De nombreuses variantes
Product

17 / 46

A. Beugnard

/contient

Modlisation objet

Stock

De nombreuses variantes
Product

Product produits

17 / 46

A. Beugnard

/contient

Stock

monStock

Modlisation objet

Stock

De nombreuses variantes
Product

Product produits
Product

17 / 46

A. Beugnard

/contient

Stock

monStock
1
-monStock

Modlisation objet

Stock

Stock

De nombreuses variantes
Product

/contient

Product produits

monStock

Product
*
Product produits

17 / 46

A. Beugnard

Stock

/contient

Stock

1
-monStock

Stock

1
monStock

Stock

Modlisation objet

De nombreuses variantes
Product

/contient

Product produits

Stock

monStock

Product

Stock

1
-monStock

Stock

*
Product produits

/contient

1
monStock

Stock

Product 0..10
produits

/contient

0..1
monStock

Stock

17 / 46

A. Beugnard

Modlisation objet

Des relations plus fortes


Un tout et ses parties. . .
Agrgation : parties partages ; indpendance de
cration
Composition : pas de partage des parties ; dtruire le
livre, dtruit les chapitres.

18 / 46

A. Beugnard

Modlisation objet

Des relations plus fortes


Un tout et ses parties. . .
Agrgation : parties partages ; indpendance de
cration
Auteur 1..*

Livre

Composition : pas de partage des parties ; dtruire le


livre, dtruit les chapitres.

18 / 46

A. Beugnard

Modlisation objet

Des relations plus fortes


Un tout et ses parties. . .
Agrgation : parties partages ; indpendance de
cration
Auteur 1..*

Livre

Composition : pas de partage des parties ; dtruire le


livre, dtruit les chapitres.
1

Chapitre 1..*

18 / 46

A. Beugnard

Modlisation objet

Livre

Une association riche


O placer le salaire dun employ ? Sil a au plus un
employeur. . .

Employ

19 / 46

1..*

A. Beugnard

0..1

Modlisation objet

Entreprise

Une association riche


O placer le salaire dun employ ? Sil a au plus un
employeur. . .

Employ

1..*

0..1

- salaire
19 / 46

A. Beugnard

Modlisation objet

Entreprise

Une association riche


O placer le salaire dun employ ? Sil a au plus un
employeur. . .
Et sil a plusieurs employeurs ?

Employ

19 / 46

A. Beugnard

Modlisation objet

Entreprise

Une association riche


O placer le salaire dun employ ? Sil a au plus un
employeur. . .
Et sil a plusieurs employeurs ?
Emploi
- salaire

Employ

19 / 46

A. Beugnard

Modlisation objet

Entreprise

Association et Java
Les associations nexistent pas en Java
Elles sont traduites par un attribut
qui rfrence une classe simple pour les cardinalits
0..1 ou 1
qui rfrence un tableau ou une liste pour les
cardinalits >1

20 / 46

A. Beugnard

Modlisation objet

Bote ou code ?
Pour rflchir, les diagrammes ; pour raliser, le code
Abstraction
Lisibilit
Facilit crire
Facilit manipuler
Dtails
Prcisions
Excutable

21 / 46

A. Beugnard

Bote
Bote
Bote
Bote
Java
Java
Java

>
>
>
>
>
>
>

Java
Java
Java
Java
Bote
Bote
Bote

Modlisation objet

Retour sur lascenseur


Etage
Ascenseur

- numro : int
-position

+ allerA(Etage)

+ ouvrir()
+ fermer()

-depart

-mvts

22 / 46

A. Beugnard

Mouvement

Modlisation objet

-arrive

Avancement
1

Introduction UML

Hritage
Principes
Consquences

Conclusion

23 / 46

A. Beugnard

Modlisation objet

Le dfi de la rutilisation
Comment ajouter des proprits une classe ?
un attribut : nom, couleur, dlai, age, . . .
une fonction : viellir(), afficherCouleur(), . . .
Par exemple, on dispose de la classe Produit et on
souhaite ajouter une adresse de livraison.
Comment faire ?

24 / 46

A. Beugnard

Modlisation objet

Trois solutions
1. On modifie le code source directement
Il faut possder le code source
Il faut mesurer les consquences sur les autres objets qui
utilisent cette classe
Il faut faire de nouveaux tests

2. On cre une nouvelle classe qui redirige vers la


classe existante ; dlgation
3. On cre une nouvelle classe qui hrite de la classe
existante ; hritage

25 / 46

A. Beugnard

Modlisation objet

Principe de la dlgation
Product
- numberCreated : int
- number : int
+ Product(String)
+ getNumber() : int
+ toString() : String

ProduitLivrable
- address : String
p

+ ProduitLivrable(String)
+ getNumber() : int
+ getAddress() : String

Dlguer, cest rediriger vers. . . p


1
2
3
4
5
6
7

public ProduitLivrable(String s) {
p = new Product(); // le dlgu
address = s;
}
public int getNumber() {
return p.getNumber();
}

26 / 46

A. Beugnard

Modlisation objet

Principe de lhritage
Product
- numberCreated : int
- number : int
+ Product(String)
+ getNumber() : int
+ toString() : String

ProduitLivrable
- address : String
+ ProduitLivrable(String)
+ getAddress() : String

Hriter, cest crire uniquement les proprits


supplmentaires
1
2
3
4
5

public ProduitLivrable(String s) {
// pas de dlgu
address = s;
}
/ redirections inutiles /

27 / 46

A. Beugnard

Modlisation objet

Comparaison
Changer le code source
pas toujours possible
pas structurant (toujours tout dans la mme classe)

Dlguer
on spare bien, mais on crit toute la mcanique la main
si le code dorigine change, il faut aussi adapter

Hriter
on spare et la mcanique est automatique

28 / 46

A. Beugnard

Modlisation objet

En mmoire
Dlgation : 2 objets diffrents
:Produit
name : A
number : 4678

:ProduitLivrable
address : Brest

Hritage : 1 unique objet (2 zones)


:ProduitLivrable
name : A
number : 4678
address : Brest

29 / 46

A. Beugnard

Modlisation objet

Hritage en Java
1

public class ProduitLivrable extends Product {

String address ; // un attribut ajout


public ProduitLivrable(String s) {
address = s;
}

3
4
5
6
7

public String getAddress() { //mthode ajoute


return address;
}

8
9
10
11

30 / 46

A. Beugnard

Modlisation objet

Diffrents hritages
Hritage simple (Java)

Hritage multiple (C++)

Animal

Mammal

Monkey

Insect

Horse

Arbre dhritage
31 / 46

A. Beugnard

Vehicle

Boat

Truck

Amphibious

Graphe dhritage
Modlisation objet

Usage de lhritage
Conceptualiser organiser, classer, relation est-un
Rutiliser partager des mthodes, des attributs
Vocabulaire
sous-classe, classe fille, classe drive ; on spcialise
super classe, classe mre, classe de base ; on
gnralise

32 / 46

A. Beugnard

Modlisation objet

Consquences de lhritage
Substituabilit
Redfinition

33 / 46

A. Beugnard

Modlisation objet

Substituabilit
Une instance dune classe ProduitLivrable qui hrite
dune classe Produit est aussi considre comme une
instance de la classe Produit
1
2

Produit p; // on dclare un Produit


p = new ProduitLivrable(A ); //cest possible !
On peut utiliser un ProduitLivrable partout o on
pouvait utiliser un Produit ; cest le principe de
substituabilit

34 / 46

A. Beugnard

Modlisation objet

Redfinition
On utilise lhritage pour :
ajouter des attributs
ajouter des mthodes
redfinir des mthodes dj dfinies

35 / 46

A. Beugnard

Modlisation objet

Exemple de redfinition
Parallelogram
+ perimeter() : float
+ surface() : float

Rectangle
+ perimeter() : float
+ surface() : float

Chaque faon de calculer le primtre


ou la surface est spcifique

Square
+ perimeter() : float
+ surface() : float
36 / 46

A. Beugnard

Modlisation objet

Typage, sous-typage, substituabilit


Imaginons
1
2
3

public class Vegetal extends EtreVivant {...


public boolean canBeEatenBy(Animal a) {...}
}

On veut vouloir crire


1
2

carotte.canBeEatenBy(new Lapin());
herbe.canBeEatenBy(new Humain());

Cest possible car Lapin <: Animal


et Humain <: Animal.
(lire est un sous-type de)

37 / 46

A. Beugnard

Modlisation objet

Sous-type
Un type T est un sous-type dun type T si et
seulement si toutes les entits de type T sont de type
T ; on note T <: T
Exemples
char <: int
si Lapin extends Animal alors Lapin <: Animal

38 / 46

A. Beugnard

Modlisation objet

Types dune rfrence


1

A a = new B();
Les rfrences ont 2 types
1. Le type de la dclaration (ici A) : le type apparent
2. Le type de linstantiation (ici B) : le type rel
Contrainte : Type Rel <: Type Apparent

1
2
3
4

public void m(A a) {...} // dans une classe C


// ailleurs
C c = new C();
c. m(new B());

39 / 46

A. Beugnard

Modlisation objet

Liaison dynamique
Object
+ toString() : String

1
2
3
4

Produit

Object o ;
o=new Object();o.toString();//1
o=new Produit();o.toString();//2
o=new ProduitLivrable();o.toString();//3

Quelle mthode est excute dans


les cas 1, 2 et 3 ?

+ toString() : String

ProduiLivrable
+ toString() : String
40 / 46

A. Beugnard

Modlisation objet

Liaison dynamique
Object
+ toString() : String

1
2
3
4

Produit
+ toString() : String

ProduiLivrable

Object o ;
o=new Object();o.toString();//1
o=new Produit();o.toString();//2
o=new ProduitLivrable();o.toString();//3

Quelle mthode est excute dans


les cas 1, 2 et 3 ?
1. de Obect
2. de Produit
3. de ProduitLivrable

+ toString() : String
40 / 46

A. Beugnard

Modlisation objet

Principe de la liaison dynamique


On excute la mthode la plus spcifique possible
compatible avec le type rel de lobjet.
Le type apparent (dclaration) permet au compilateur
de vrifier quune mthode sera trouve et donne
lautorisation.

41 / 46

A. Beugnard

Modlisation objet

Intrt de la liaison dynamique


On considre du code compil, test, livr il y a
plusieurs annes (Object, Client et Truc)
o:Object

c:Client

+ toString() : String

+ m(Object)

t:Truc
2 :o.toString()

42 / 46

A. Beugnard

1 :c.m(o)

Modlisation objet

Intrt de la liaison dynamique


On considre du code compil, test, livr il y a
plusieurs annes (Object, Client et Truc)
o:Object

c:Client

+ toString() : String

+ m(Object)

t:Truc
2 :o.toString()

p:Product
+ toString() : String

42 / 46

A. Beugnard

1 :c.m(o)

On ajoute la classe Product et


le code c.m(p) ;

Modlisation objet

Intrt de la liaison dynamique


On considre du code compil, test, livr il y a
plusieurs annes (Object, Client et Truc)
o:Object

c:Client

+ toString() : String

+ m(Object)

t:Truc
2 :o.toString()

1 :c.m(o)
1 :c.m(p)

p:Product
+ toString() : String

42 / 46

A. Beugnard

On ajoute la classe Product et


le code c.m(p) ;

Modlisation objet

Intrt de la liaison dynamique


On considre du code compil, test, livr il y a
plusieurs annes (Object, Client et Truc)
o:Object

c:Client

+ toString() : String

+ m(Object)

t:Truc
1 :c.m(o)

2 :o.toString()
2 :o.toString()
p:Product
+ toString() : String

42 / 46

A. Beugnard

1 :c.m(p)
On ajoute la classe Product et
le code c.m(p) ;

Modlisation objet

Intrt de la liaison dynamique


On considre du code compil, test, livr il y a
plusieurs annes (Object, Client et Truc)
o:Object

c:Client

+ toString() : String

+ m(Object)

t:Truc
1 :c.m(o)

2 :o.toString()
2 :o.toString()
p:Product
+ toString() : String

1 :c.m(p)
On ajoute la classe Product et
le code c.m(p) ;

Le code de Client na pas chang. Possible car


Produit <: Object. En 2, o vaut p !
42 / 46

A. Beugnard

Modlisation objet

Synthse sur la liaison dynamique


Lancien code compil (Client) est capable dappeler le
nouveau code (Product) grace . . . la liaison
dynamique
On nappelle pas toString() dans le code quon a
crit. . .
Cest le code existant qui appelle au bon moment ;
plus sr.
Cest possible et sr car :
Type Rel (Produit) < : (Object) Type Apparent
43 / 46

A. Beugnard

Modlisation objet

Avancement
1

Introduction UML

Hritage

Conclusion

44 / 46

A. Beugnard

Modlisation objet

Conclusion
Ne vous lancez pas dans la programmation trop
rapidement
faites des dessins
rflchissez
tudiez des variantes
Lhritage permet dorganiser et de rutiliser
La liaison dynamique est le mcanisme qui rend la
programmation objet plus rutilisable
45 / 46

A. Beugnard

Modlisation objet

Vocabulaire
Modliser
Association
Agrgation
Composition
Cardinalit
(arit,
multiplicit)
Hritage

46 / 46

A. Beugnard

type apparent
type rel
sous-type
substituabilit
redfinition
liaison
dynamique

Modlisation objet

S-ar putea să vă placă și