Vous êtes sur la page 1sur 13

Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J.

LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 1/13 21/02/2014 10:16:06

Chapitre 1

Conception objet et notation UML

Apprendre à faire une conception objet


La notation UML des diagrammes de classe

1. POURQUOI UML ? 2

2. QU'EST-CE QUE UML ? 2

3. LA NOTATION UML 3

3.1. LE DIAGRAMME DE CLASSE 4


3.2. LA CLASSE 5
3.3. HERITAGE DE CLASSE 6
3.4. IMPLEMENTATION D'UNE INTERFACE 7
3.5. RELATION : L'ASSOCIATION 8

4. LES CONCEPTS DE BASE DE LA PROGRAMMATION OBJET EN UML 9

4.1. L'OBJET PRIVE 9


4.2. L'OBJET CONSTANT 9
4.3. L'HERITAGE 9
4.4. LA COMPOSITION 9
4.5. L'AGREGATION 10
4.6. LA CLASSE ABSTRAITE 11
4.6.1. LA CLASSE ABSTRAITE PURE 11
4.6.2. LA CLASSE ABSTRAITE (NON PURE) 11

5. EXERCICES DE DIAGRAMMES DE CLASSE 13

5.1. EXERCICES LIBRES 13


5.2. EXERCICE 01 : LE JEU DE TETRIS 13

page 1/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 2/13 21/02/2014 10:16:06

1. Pourquoi UML ?
Utiliser un langage objet ne suffit pas à faire une programmation orientée objet.
Le langage objet ne permet pas en soit de bien programmer en objet. Même les
environnements de programmation comme Eclipse ne sont une solution. Ils facilitent la
programmation mais ne vous aide pas à faire un bon programme objet.

Essayons d'abord de répondre à la question : qu'est-ce qu'un bon programme ?

Un bon programme est un programme qui:


est lisible
est maintenable
est compréhensible
est évolutif à moindre coût
est facilement testable unitairement
est facilement documentable

Ces critères ont été facilement atteints dans la réalisation des programmes
fonctionnelles (structurés) : programmation par couches (ou modules) par décomposition
naturelle des fonctionnalités demandées, par l'indépendance des couches entre elles, par
la factorisation des traitements, ...

Dans un LOO les "couches" se construisent par l'utilisation de relations entre les
classes qui sont : le lien d'héritage et le lien de décomposition/agrégation.
Or la mise en place de ces relations dans le programme n'est pas une pensée
naturelle.

Il faut "penser objet" et il faut un outil qui permet de structurer cette pensée non
naturelle.

Penser objet c'est ?


identifier les données du programme qui permettront de réaliser les
fonctionnalités demandées
définir les données par la création de classes
remplir une fonctionnalité demandée par la création de plusieurs classes
concevoir les classes de manière génériques et évolutives
... et bien plus...

De plus, il faut faire le lien entre les fonctionnalités demandées et l'architecture objet
du programme.

La solution : le modèle UML.

2. Qu'est-ce que UML ?


En simplifiant et en orientant l'application d'UML à nos besoins, les informations que
nous voulons gérer sont :
- nommer les classes
- identifier les classes abstraites

page 2/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 3/13 21/02/2014 10:16:06

- identifier les méthodes importantes (dont nos traitements informatiques)


- nommer les interfaces
- indiquer précisément la dépendance d'héritage entre les classes
- montrer les classes qui implémentent les interfaces
- indiquer la composition et l'utilisation des classes
- identifier les attributs importants (dont les interfaces)
- préciser les constructeurs particuliers

Par l'expérience, à force d'écrire des diagrammes de classe, les informaticiens se


sont aperçus rapidement que des architectures types, aux noms près, revenaient
souvent, traduisant un besoin qui peut se généraliser.
Ces architectures type sont ce que nous appelons en français des "Patron de
Conception" (comme le patron pour la couture), ou en anglais "Design Pattern".

Nous avons donc deux démarches dans ce cours :


- formaliser la conception de nos programmes par la modélisation UML de classe
- apprendre les designs patterns les plus célèbres

Quel que soit le langage utilisé, une démarche de conception doit répondre aux
questions :
QUOI le besoin
QUI les acteurs
COMMENT les classes
OU le physique
POURQUOI la traçabilité (UML ne répond pas à cela)

3. La notation UML
UML est un langage de modélisation objet, normé par l'OMG (Object Management
Group).

L'objectif : avoir un support de communication performant, qui facilite la représentation


et la compréhension de solutions objet. Sa notation graphique permet d'exprimer
visuellement une solution objet, ce qui facilite la comparaison et l'évaluation de solutions.

UML n'est pas : il ne définit pas le processus d'élaboration des modèles. Qualifier
UML de "méthode objet" n'est donc pas tout à fait approprié.

Quel démarche alors adoptée ?


avoir toujours une démarche itérative et incrémentale. Favoriser le
prototypage
toujours partir du besoin et même se poser la question : "Pourquoi ce
besoin?"
garder au centre de la conception l'architecture logicielle
vue logique
vue des composants
vue des cas d'utilisation
vue des processus
vue de déploiement

page 3/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 4/13 21/02/2014 10:16:06

Voir annexe A.
tenir compte des contraintes de :
réutilisabilité et maintenabilité
adaptabilité et fiabilité
performance
capacité
localisation
gouvernance
coût

Pour tout savoir :


http://fr.wikipedia.org/wiki/Unified_Modeling_Language
http://uml.free.fr

Il existe 13 types de diagramme UML :


- les diagrammes de classes
- les diagrammes d'objets
- les diagrammes de composants (QUI utilise QUOI)
- les diagrammes de déploiement (OU)
- les diagrammes des paquetages
- les diagrammes de structure composite

- les diagrammes des cas d'utilisation (QUI fait QUOI)


- les diagrammes états-transitions
- les diagrammes d'activité (algorithme/organigramme)

- les diagrammes de séquence (COMMENT)


- les diagrammes de communication
- les diagrammes globaux d'interaction
- les diagrammes de temps

3.1. Le diagramme de classe


Le diagramme de classes est un schéma utilisé en génie logiciel pour présenter les
classes et les interfaces des systèmes ainsi que les différentes relations entre celles-ci.
Ce diagramme fait partie de la partie statique d'UML car il fait abstraction des aspects
temporels et dynamiques.

Une classe décrit les responsabilités, le comportement et le type d'un ensemble


d'objets. Les éléments de cet ensemble sont les instances de la classe.

Une classe est un ensemble de fonctions (méthodes) et de données (attributs) qui


sont liées ensemble par un champ sémantique. Les classes sont utilisées dans la

page 4/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 5/13 21/02/2014 10:16:06

programmation orientée objet. Elles permettent de modéliser un programme et ainsi de


découper une tâche complexe en plusieurs petits travaux simples.

Les classes peuvent être liées entre elles grâce au mécanisme d'héritage qui permet
de mettre en évidence des relations de parenté.

D'autres relations sont possibles entre des classes, chacune de ces relations est
représentée par un arc spécifique dans le diagramme de classes.
Ces relations sont :
lien d'agrégation
lien de composition
lien d'association
lien d'implémentation

Le diagramme de classes comporte 6 concepts :


classe
attribut
identifiant
relation
opération
généralisation / spécialisation

3.2. La classe
Symbole :
Classe
+ # - attributs

méthodes

Exemple :
RendezVous
# String date
# String heureDebut
# String heureFin

+ String toString()
+ Calendar getDate()
+ void modif ierIhm(Formulaire f ormulaireAgenda)

Commentaires :
3 compartiments : nom de la classe, attributs de la classe, méthodes (ou opérations)
de la classe.

page 5/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 6/13 21/02/2014 10:16:06

Autres classes :

La classe abstraite :
Classe abstraite
attributs

méthodes

La classe template :
Classe template nom: type

attributs

méthodes

3.3. Héritage de classe


Symbole :
La pointe de la flèche est creuse et blanche.

(ou dans mes diagrammes : )

Exemple :

page 6/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 7/13 21/02/2014 10:16:06

Media

- String identif ication


- String titre

Livre Film Musique

-String[] auteurs - String realisateur - String chanteur


- String edition - String[] acteurs - String album

Serie

- String saison
- String episode

Commentaires :
Cette relation entre deux classes traduit la propriété d'héritage entre deux classes.
En UML rien n'empêche de faire de l'héritage multiple mais de préférence à éviter.

Code Java :
public class Livre extends Media {…}

public class Film extends Media {…}

public Musique extends Media {…}

public Serie extends Film {…}

3.4. Implémentation d'une interface


Symbole :

Exemple :

page 7/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 8/13 21/02/2014 10:16:06

FormulaireInt

+ void submit(Formulaire f , String bouton)

IhmProjet

Commentaires :
Ici la classe IhmProjet du projet de NFA 031 de cette année implémente l'interface
FormulaireInt (voir projet).

3.5. Relation : l'association


L’association est la relation la plus courante et la plus riche du point de vue
sémantique.

Une association est une relation statique n-aire : c’est-à dire qu’elle relie plusieurs
classes entre elles.

L'agrégation :

La composition :

Exemple :

page 8/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 9/13 21/02/2014 10:16:06

Exemple :

Mediateque

- ArrayList<Media> lesMedias
- ArrayList<Emprunteur> lesEmprunteurs

0..* 0..*

Emprunteur

Media
- String numeroInscription
- String identification - String nom
- String titre - String prenom
- Emprunteur emprunteur - String dateNaissance
- Date dateEmpunt 0 .. 1 - String numeorTelephone
- Adresses adresse

0 .. 1
1 .. 1 Adresse

Date
- String rue
- String Ville
- String codePostal

4. Les concepts de base de la programmation objet en UML


4.1. L'objet privé
Tous les attributs sont privés sauf les attributs statiques qui peuvent être publiques
Les attributs de l'objet sont donc accessibles à travers des getteurs et des setteurs.

4.2. L'objet constant


Un objet constant est un objet privé dont la classe d'appartenance ne contient aucun
setteurs. L'hypothèse étant qu'il n'existe bien sur pas d'autres méthodes qui puissent
modifier les attributs directement ou indirectement.
En JAVA, c'est le cas de la classe String.

4.3. L'héritage
Il est vrai que l'héritage n'est pas en soit un DP mais un lien 'mécanisme) fort des
langages orientés objet.

Il peut être un DP car l'héritage peut être implémenté par un lien de composition.
Voir le § sur l'héritage multiple.

4.4. La composition
Un objet B est une composition d'un autre objet A (on dit que "A est composé de B"
quand :

page 9/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 10/13 21/02/2014 10:16:06

l'objet B est créé (new) dans le constructeur de A


si A est détruit alors B est également détruit
il n'existe pas de setteur sur B dans la classe A
s'il existe un getteur sur cet objet alors ce getteur retourne une copie de
l'objet. Ce qui est le cas dans les langages objets comme le C++.
Cette propriété est indispensable quand le langage objet
implémente ses objets sous la forme de pointeur. Car il ne faudrait
pas que la destruction de A puis de B entraine un pointeur "fou" dans
le programme.
Dans le cas de JAVA, ce problème est maitrisé car grâce au
garbage collecteur, malgré la destruction de A, B sera détruit que s'il
n'est plus utilisé dans le programme.

b
A B C

Bb Xx Bb

A() {this.b = new B(); } X getX()


C(A a) { this.b = a.getB(); }
B getB(){ return b.clone();} setX(X x)

A B

B C

4.5. L'agrégation
Un objet B est une agrégation d'un autre objet A (on dit que "A est lié à B" quand :
l'objet B est créé en dehors de A
B est donc passé en paramètre du constructeur de A
si A est détruit alors B n'est pas détruit
2 cas :
si l'attribut de B dans A n'est pas un pointeur alors il est une copie de celui
passé en paramètre. La liaison est une liaison faible.
si l'attribut de B dans A est un pointeur alors la liaison est une liaison forte
Le choix entre les 2 cas n'est pas important si B est un objet constant sinon cela
est important car :
- dans le premier cas la modification de l'état de B dans A n'a pas d'influence sur
l'objet passé en paramètre
- dans le deuxième cas toute modification de l'état de B dans A est répercuté sur
l'objet passé en paramètre.

page 10/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 11/13 21/02/2014 10:16:06

b
A B C

Bb Xx Bb

A(B b) {this.b = b; } X getX()


C(A a) { this.b = a.getB(); }
B getB(){return b;} setX(X x)

A B C

4.6. La classe abstraite


4.6.1. La classe abstraite pure
Une classe abstraite pure est une classe dont toutes les méthodes non statiques de la
classe sont abstraites. Une méthode abstraite (ou virtual pure) est une méthode qui n'a
pas de code.

Il est donc à la charge des classes qui héritent de la classe abstraite d'implémenter le
code de ces méthodes.

La classe abstraite pure est très rare car cela veut dire qu'il n'existe donc pas de
getteurs et de setteurs sur ses attributs. Ce qui est plutôt rare.

4.6.2. La classe abstraite (non pure)


La classe abstraite non pure est bien sur assez courante.
Son rôle est de :
- factoriser les traitements communs à l'ensemble des classes qui héritent de la
classe abstraite (souvent des méthodes statiques protected)
- écrire les méthodes qui agissent sur ses attributs
- écrire des méthodes abstraites qui devront être implémentées dans les classes qui
héritent de la classe abstraite
- permettre des traitements génériques
- permettre le polymorphisme.

Dans cet exemple, la classe abstraite est la classe Media. Son nom est écrit en
italique mais on ajoute (quand cela est possible, le mot abstract car l'italique n'est pas
souvent visible).

Elle est abstraite car jamais dans le programme, il existera de new Media(...). Cela n'a
pas de sens.

page 11/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 12/13 21/02/2014 10:16:06

Media

- String identif ication


- String titre
- Emprunteur emprunteur
- Date dateEmpunt

Livre Film Musique

-String[] auteurs - String realisateur - String chanteur


- String edition - String[] acteurs - String album

Serie

- String saison
- String episode

Exemples :

- les traitements communs :


protected static String formater(String[] tab)
protected static ajouterChampSaisi(Formulaire f,String label)

- les méthodes qui agissent sur son contenu :


getIdentification
getTitre
getEmprunteur
getDate

setEmprunteur
setDate
ou void emprunter(Emprunteur e, Date d)
{
this.emprunteur = e;
this.date = d;
}
void desemprunter()
{
this.emprunteur = null;
this.date = null;
}
boolean siMediaEmprunte()
{
return this.emprunteur == null;
}

page 12/13
Conception de logiciels Intranet : patrons et canevas – NSY 102 Par J. LAFORGUE

NFA035-Chapitre-01_ConceptionObjetEtUML.doc 13/13 21/02/2014 10:16:06

boolean siEnRetard()
{
return dateEmprunt.getTime() +
delaiEmprunt() < dateCourante().getTime;
}

- les méthodes abstraites :


String creerEtiquette();
void creerChampsSaisis(Formulaire f)
long delaiEmprunt();

- les méthodes génériques :


String toString()
void creerChampsSaisis(Formulaire f)
{
f.addLabel("TITRE","Titre);
creerChampsSaisis(f);
f.addButton("VALIDER","Valider)
}

5. Exercices de diagrammes de classe


5.1. Exercices libres
Exercices sur des sujets proposés par les auditeurs.

5.2. Exercice 01 : Le jeu de Tetris


Définir en séance les fonctionnalités du jeu et les données envisagées;
Faire le diagramme de classe en séance.

Voir sur le site, consacré à NFA 035, l'exercice Exercice01_Tetris.

Vous trouverez un sujet au format pdf et la correction des diagrammes UML


également au format pdf.
Cette correction est celle de l'année dernière.

page 13/13

Vous aimerez peut-être aussi