L3 Informatique Projet de programmation Java 29 janvier 2009
TP 2 : Design Patterns
Le but de ce TP est de vous familiariser avec quelques-uns des motifs couramment
utilis´es en programmation objet. Ces motifs (design patterns) servent g´en´eralement `a
faciliter la maintenance du code, en ´evitant en particulier la multiplication de classes ou
des d´ependances entre classes.
En pr´ealable `a cet aper¸cu de quelques designs patterns, nous allons introduire une
notation visuelle pour les relations entre classes.
1 Diagrammes de classe UML
UML est une norme complexe de description de programmes informatiques d´evelopp´ee
par un consortium d’entreprises et de laboratoires, l’OMG. L’un des int´erˆets majeurs
d’UML est son ind´ependance vis-`a-vis du langage choisi pour l’impl´ementation, avec
pour seule contrainte qu’il soit orient´e objet (par exemple Java, mais aussi C++, Eiffel,
Objective C, OCaml, SmallTalk, Ruby, C#, ...). Les diagrammes de classes ne consti-
tuent qu’une petite partie des possibilit´es d’UML.
1.1 Commentaire
Ceci est commenté.
Ceci est un
commentaire.
N’importe quelle information qui ne rentre pas vraiment dans les cat´egories suivantes,
par exemple un morceau de code d’impl´ementation.
1.2 Classes
return nom;
+toString () : String
− nom : String
+ Personne << abstract >>
Nom
Attributs
Opérations
Code optionnel
travaille+ () : void
1
L3 Informatique Projet de programmation Java 29 janvier 2009
La repr´esentation contient trois compartiments :
1. le nom contient le nom de la classe et d’autres informations de documentation telles
que vous les mettriez dans la javadoc. Les guillemets identifient des st´er´eotypes
comme «abstract ». Le +est un modificateur d’acc`es :
+public
#prot´eg´e
-priv´e
2. les attributs peuvent aussi ˆetre repr´esent´es `a l’aide d’une relation d’aggr´egation
3. les op´erations sont les d´efinitions des m´ethodes : nomDeM´ethode (param`etres) :
typeDeRetour. Les op´erations abstraites apparaissent en italiques.
Exemple 1.1.
/**
* Classe abstraite repr´esentant une personne physique.
*/
public abstract class Personne {
/** Le nom de la personne. */
private String nom;
/**
* Invariant de classe.
* @returns <code>nom.length() > 0</code>.
*/
protected boolean fulfillsInvariant() {
returns nom.length() > 0;
}
/**
* Constructeur d’une Personne.
* @param nom Le nom de la Personne cr´ee.
* @throws IllegalArgumentException si <code>nom.length() == 0</code>.
*/
public Personne(String nom) throws IllegalArgumentException {
if (nom.length() == 0)
throw new IllegalArgumentException("Nom vide.");
else
this.nom = nom;
assert fulfillsInvariant(): "Nom vide.";
}
/**
* Fait travailler la Personne.
2
L3 Informatique Projet de programmation Java 29 janvier 2009
*/
protected abstract void travaille();
/**
* Retourne le nom de la personne.
* @returns {@link #nom}.
* @overrides java.lang.Object#toString()
*/
@Override
public String toString() {
return nom;
}
}
1.3 Associations
+ Université
+ étudiants (): Énumerateur
+toString () : String
+ String
nom
enseigne
travaille dans<
{ ordonnés alphabétiquement }
rôle de l’étudiant dans l’université
contraintes sur la relation
rôle de l’université pour l’étudiant
type d’association (aggrégation)
nombre d’étudiants dans l’université
nombre d’universités dans l’étudiant
+ Étudiant
*
0..1
étudie
+ travaille () : void
+ inscrit (Université) : void
communication (orientée)
Une association est une relation entre deux classes. On la d´ecrit `a l’aide :
de oles d’un objet d’une classe dans un objet de l’autre (omis si ´evidents) ;
– de cardinalit´es, c’est-`a-dire de nombres d’objets d’une classe dans un objet de
l’autre classe ; on utilise pour cela les notations :
1habituellement omis si 1 pour 1
ninconnu au moment de la compilation, mais born´e
3
L3 Informatique Projet de programmation Java 29 janvier 2009
0..n entre 0 et n
1..* 1 ou plus
*0 ou plus
une communication orient´ee si n´ecessaire par <ou >, ou bien avec des fl`eches sur
les traits ;
un type de relation orient´ee : un des grands types d’association d´ecrits par la suite :
aggr´egation, h´eritage, ... si utile.
1.3.1 H´eritage (g´en´eralisation/sp´ecialisation)
+ SousClasse
+ surcharge (int): int
+ faitDePlus (): double
+ fait (): void
# surcharge (int): int
+ SuperClasse
Une fl`eche triangulaire vide d´ecrit une d´erivation. La classe d´eriv´ee est la classe de
base, mais avec des propri´et´es additionnelles ou modifi´ees. Elle sp´ecialise ou ´etend la
superclasse plus g´en´erale.
1.3.2 H´eritage d’interface (sp´ecifie / raffine)
+ Interface
+ Implémentation
+ opère (): void
opère+ (): void
Une fl`eche d’h´eritage en tirets indique qu’une classe raffine ou impl´emente une interface.
L’interface elle-mˆeme est indiqu´ee soit en pr´ecisant le st´er´eotype «interface »
dans le nom de la classe, soit en utilisant des coins arrondis.
4
L3 Informatique Projet de programmation Java 29 janvier 2009
1.3.3 Classe interne
+ Classe # Interne
Marque la pr´esence d’une classe interne `a une autre.
1.3.4 D´ependance
+ Ressource+ Utilisateur << crée >>
Une classe utilise une autre classe, mais sans que la ressource soit un membre de l’uti-
lisateur. Si la classe de ressource est modifi´ee, il y a peut-ˆetre des m´ethodes `a modifier
dans l’utilisateur. La ligne est souvent st´er´eotyp´ee par «instancie »ou «utilise ».
1.3.5 Aggr´egation (contient)
+ Partie+ Tout
La destruction du tout ne d´etruit pas les parties.
1.3.6 Composition (poss`ede)
+ Partie+ Tout
La destruction du tout d´etruit les parties. Rare en Java.
Exercice 1. Dessiner le diagramme de classe de votre impl´ementation des pi`eces d’´echecs
du TP 1.
2 Patrons de conception
Cette section pr´esente quelques-uns des mod`eles d’organisation de classes les plus
courants. On parle d’instancier un tel mod`ele quand on l’utilise dans le contexte concret
d’une application.
2.1 Fabrique abstraite
Le principe d’une fabrique abstraite est de d´ecoupler la cr´eation de l’utilisation
de certains objets. Dans ce patron, les objets clients disposent d’une r´ef´erence vers
une fabrique concr`ete (par exemple un objet de la classe FabriqueConcrete1 dans le
diagramme suivant), qui aura la charge d’instancier les objets ad´equats (des classes
ProduitA1 et ProduitB1 dans l’exemple). Cependant, les clients utilisent l’interface
FabriqueAbstraite pour ces instanciations, et n’ont pas besoin de connaˆıtre l’existence
des diff´erents produits concrets.
5
1 / 7 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !