Documente Academic
Documente Profesional
Documente Cultură
A. Beugnard
Majeure Informatique INF301 GL-C3
2e semestre 2015
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
/
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
10 / 46
A. Beugnard
Modlisation objet
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
13 / 46
A. Beugnard
Modlisation objet
Stock
...
...
...
...
14 / 46
A. Beugnard
Modlisation objet
Stock
...
...
...
...
14 / 46
A. Beugnard
Modlisation objet
Stock
monStock ...
...
14 / 46
A. Beugnard
Modlisation objet
Stock
*
...
...
14 / 46
A. Beugnard
Modlisation objet
Stock
*
produits
...
...
14 / 46
A. Beugnard
Modlisation objet
15 / 46
A. Beugnard
Modlisation objet
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
18 / 46
A. Beugnard
Modlisation objet
Livre
18 / 46
A. Beugnard
Modlisation objet
Livre
Chapitre 1..*
18 / 46
A. Beugnard
Modlisation objet
Livre
Employ
19 / 46
1..*
A. Beugnard
0..1
Modlisation objet
Entreprise
Employ
1..*
0..1
- salaire
19 / 46
A. Beugnard
Modlisation objet
Entreprise
Employ
19 / 46
A. Beugnard
Modlisation objet
Entreprise
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
- 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
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
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
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
29 / 46
A. Beugnard
Modlisation objet
Hritage en Java
1
3
4
5
6
7
8
9
10
11
30 / 46
A. Beugnard
Modlisation objet
Diffrents hritages
Hritage simple (Java)
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
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
Square
+ perimeter() : float
+ surface() : float
36 / 46
A. Beugnard
Modlisation objet
carotte.canBeEatenBy(new Lapin());
herbe.canBeEatenBy(new Humain());
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
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
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
+ 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
+ toString() : String
40 / 46
A. Beugnard
Modlisation objet
41 / 46
A. Beugnard
Modlisation objet
c:Client
+ toString() : String
+ m(Object)
t:Truc
2 :o.toString()
42 / 46
A. Beugnard
1 :c.m(o)
Modlisation objet
c:Client
+ toString() : String
+ m(Object)
t:Truc
2 :o.toString()
p:Product
+ toString() : String
42 / 46
A. Beugnard
1 :c.m(o)
Modlisation objet
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
Modlisation objet
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
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) ;
A. Beugnard
Modlisation objet
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