You are on page 1of 31

Analyse pour le BTS IG/SIO

Alexandre Mesl
10 novembre 2015

Table des matires


1 Merise
1.1 Introduction . . . . . . . . . . . . . . . . .
1.1.1 Pourquoi lanalyse ? . . . . . . . .
1.1.2 Comment a marche ? . . . . . . .
1.1.3 Logiciels . . . . . . . . . . . . . . .
1.2 Dictionnaire des donnes . . . . . . . . . .
1.2.1 Critres de slection des donnes .
1.2.2 Donnes ajouter au dictionnaire
1.3 Dpendances fonctionnelles . . . . . . . .
1.3.1 Dfinition . . . . . . . . . . . . . .
1.3.2 Quelques rgles . . . . . . . . . . .
1.3.3 Dpendances fonctionnelles faibles
1.4 Modle conceptuel des donnes . . . . . .
1.4.1 Exemple introductif . . . . . . . .
1.4.2 Les entits . . . . . . . . . . . . . .
1.4.3 Les Associations . . . . . . . . . .
1.4.4 Les Cardinalits . . . . . . . . . .
1.4.5 Associations et attributs . . . . . .
1.4.6 Associations complexes . . . . . .
1.5 Modle physique des donnes . . . . . . .
1.5.1 Introduction . . . . . . . . . . . .
1.5.2 Formalisme . . . . . . . . . . . . .
1.5.3 Calcul du MPD . . . . . . . . . . .
1.6 Exercices Rcapitulatifs . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

2
2
2
2
2
3
3
3
4
4
4
5
6
6
6
6
7
7
8
10
10
10
10
12

2 UML
2.1 Introduction au UML . . . . . . .
2.1.1 Classes . . . . . . . . . . .
2.1.2 Relations . . . . . . . . . .
2.1.3 Hritage . . . . . . . . . . .
2.1.4 Relations spcifiques . . . .
2.1.5 Exercices . . . . . . . . . .
2.2 Design patterns (En construction)
2.2.1 Factory . . . . . . . . . . .
2.2.2 Singleton . . . . . . . . . .
2.2.3 Wrapper . . . . . . . . . . .
2.2.4 Adapter . . . . . . . . . . .
2.2.5 Strategy . . . . . . . . . . .
2.2.6 Iterator . . . . . . . . . . .
2.2.7 Observer . . . . . . . . . .
2.2.8 Proxy . . . . . . . . . . . .
2.2.9 Decorator . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

13
13
13
14
16
16
19
20
20
20
21
22
22
23
25
26
26

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

A nonces des cas tudis


A.1 Secrtariat pdagogique . .
A.2 Chane dapprovisionnement
A.3 Arbre Gnalogique . . . .
A.4 CMS . . . . . . . . . . . . .
A.5 Bibliothque . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

28
28
28
28
28
28

Chapitre 1

Merise
1.1
1.1.1

Introduction
Pourquoi lanalyse ?

Ce cours portera essentiellement sur la branche de lanalyse permettant la modlisation de bases de donnes
relationnelles. Les SGBDR (serveurs de bases de donnes relationnelles) sont des logiciels stockant des donnes dans
des tables.
Les tables sont des tableaux deux dimensions. Les donnes sont rparties dans ces tables dune faon permettant
de modliser des situations plus ou moins complexes. Lanalyse est une phase se trouvant en amont, et permettant de
dterminer de quelle faon agencer les tables pour que les donnes reprsentent au mieux la ralit.
De faon trs gnrale, analyser signifie comprendre un objet en le dcomposant en ses constituants. Ce qui se
transpose aux bases de donnes en dcomposant une situation relle en donnes, tout en observant de quelle faon
elles sont assembles pour les modliser au mieux laide de tables.

1.1.2

Comment a marche ?

Il existe plusieurs mthodes. La plus connue est la mthode Merise. Il sagit dun ensemble de techniques mathmatiques ayant pour but de modliser une situation laide de shmas. Les trois premires tapes sont :
DDD, le dictionnaire des donnes est lensemble des donnes qui seront reprsentes dans la base.
DF, les dpendances fonctionnelles sont des relations entre les donnes.
MCD, le modle conceptuel des donnes, ou modle entits-associations est un graphe faisant la synthse de la
situation. Le MCD est un modle trs puissant, il est dense et exprime une trs grande quantit dinformations.
Une fois ces trois tapes acheves, il existe une technique permettant den dduire le MPD (modle physique des
donnes). Le MPD donne directemment larchitecture de la base de donnes.

1.1.3

Logiciels

Merise
Le logiciel JMerise permet de reprsenter des MCDs et de les exporter vers une base de donnes. Je vous conseille
dapprendre vous en servir.
Les shma dans ce cours sont raliss laide de Mocodo.
UML
Le plugin pour eclipse objectaid gnre un diagramme UML partir dun projet Java. Pour inclure des illustrations,
UmlGraph prsente lavantage de gnrer de de nombreux formats partir dun fichier de classes java et de grer lui
mme le placement.
Limpossibilit de faire des classes-associations ou des relations ternaires a ncessit lemploi de Tikz-Uml pour la
rdaction de ce document.

CLIENT
numcli
nomcli

0,N

PRODUIT

COMMANDE

PASSER
1,1

numcom
datecom

COMPORTER
1,N

quantit

numprod
0,N nomprod

prixprod

Figure 1.1 Exemple Mocodo

Commande
~ num : int
~ nom : String
~ Commande()
1
0..*
0..*

1..*

Client

Comporter

~ num : int
~ nom : String

~ quantite : int
~ Comporter()

~ Client()

1
0..*
Produit
~ num : int
~ nom : String
~ prix : int
~ Produit()

Figure 1.2 Exemple UmlGraph

1.2
1.2.1

Dictionnaire des donnes


Critres de slection des donnes

Les donnes doivent tre :


Sans redondance
Atomiques

1.2.2

Donnes ajouter au dictionnaire

Il est usuel dajouter au dictionnaire des donnes, numriques, appeles identifiants. Par exemple si vous devez
modliser une liste de clients, il serait malvenu de ne disposer que de leurs noms et prnoms. En effet, tout doublon
dans ces donnes serait une source derreurs. Il convient donc dajouter un numro de client (numCli par exemple)
pour que chaque client soit identifi de faon unique.
Exercice 1 - Secrtariat pdagogique
Constituer le dictionnaire des donnes permettant de modliser un secrtariat pdagogique A.1.

Client
Commande

- num : int
- nom : String
- prenom : String

-client
*

+ getNum() : int
+ getNom() : String
+ getPrenom() : String

- num : int
- date : Date
+ getNum() : int
+ getDate() : Date
1 -produits

Comporter
*

-quantite : int
+getQuantite() : int

Produit
- num : int
- nom : String
- prix : int
+ getNum() : int
+ getNom() : String
+ getPrix() : int

Figure 1.3 Exemple Tikz-Uml

1.3
1.3.1

Dpendances fonctionnelles
Dfinition

Deux donnes A et B sont en dpendance fonctionnelle si la connaissance dune valeur de A dtermine la connaissance dau plus une valeur de B.
Par exemple, la connaissance dun numro de scurit sociale dtermine un seul nom de famille, celui du titulaire
de ce numro. Par contre, un prnom ne dtermine rien, car plusieurs personnes peuvent avoir le mme prnom. On
peut reprsenter cette DF de la faon suivante :
numSecu nomP ers
Il est aussi possible que la donne A soit compose de plusieurs donnes. Par exemple, si lon souhaite connatre
la note obtenue par un tudiant un examen, il est ncessaire de connatre le numro de ltudiant, le numro du
module, et la session quil passait. Ce qui se reprsente :
numEtudiant, numM odule, numSession valeurN ote

1.3.2

Quelques rgles

Identifiants
Si on a une dpendance A B, A est ncessairement un identifiant. En effet, toute donne ntant pas un identifiant
est ambigu, par consquent, il est impossible de sen servir pour tablir des rgles de dpendance.
Arcs de transitivit
Si on a A B C, il est inutile dindiquer sur le diagramme que A C, cette relation napporte aucune
information supplmentaire.

1.3.3

Dpendances fonctionnelles faibles

Une dpendance fonctionnelle de A vers B est dite faible si la connaissance dune valeur de A permet de dterminer
0 ou 1 valeur de B. Dans ce cas on reprsente la flche en pointills.
Une DF "classique", par opposition une DF faible, est dite forte.
Exercice 1 - Secrtariat pdagogique
Reprsentez le graphe des dpendances fonctionnelles associes au secrtariat pdagogique : A.1.
Exercice 2 - Chane dapprovisionnement
Construire le graphe des DF modlisant une chane dapprovisionnement : A.2.

1.4

Modle conceptuel des donnes

Pour le moment, en analyse, nous avons vu comment dcomposer une situation relle en donnes, et nous avons
vu aussi comment reprsenter des liaisons entre ces donnes. Cependant, le graphe des dpendances fonctionnelles est
incomplet dans le sens o il ne permet pas de reprsenter suffisamment de liaisons pour reprsenter fidlement la ralit.
Le MCD, dit aussi Modle Conceptuel des Donnes, est une reprsentation graphique davantage complte que le
graphe des dpendances fonctionnelles. Llaboration dun MCD ncessite plus dobservations de la situation que le
graphe des DF. Le modle est par consquent suffisamment complet pour quil soit possible de dduire la rpartition
des donnes dans les tables sans observation supplmentaire de la situation. Cette tape est donc la dernire tape
pineuse dune analyse.
Commenons par examiner un exemple.

1.4.1

Exemple introductif

Le bureau des tudiants souhaite lorsquil planifie des soires, lister les tudiants qui ont rserv des places pour
grer la billetterie. Nous utiliserons les donnes suivantes :
numetud
nometud
prenometud
mailetud
numsoiree
nomsoiree
datesoiree
Il apparat clairement que :
numetud nometud
numetud prenometud
numetud mailetud
numsoiree nomsoiree
numsoiree datesoiree
On observe que les dates des soires ne peuvent pas servir didentifiant parce que plusieurs soires peuvent tre
programmes le mme soir par le BDE. On remarque aussi que les donnes numetud, nometud, prenomnometud et
mailetud sont lies, parce que trois dentre elles dpendent de numetud. De mme, on peut regrouper numsoiree,
nomsoiree et datesoiree.
A titre de parenthse, rappelons que numetud 6 numsoiree parce quun tudiant peut avoir rserv des places
pour plusieurs soires (ou aucune). De faon analogue, on a numsoiree 6 numetud, parce quil peut y avoir plusieurs
tudiants dans une soire, tout comme il peut ny en avoir aucun. On conclura donc que le graphe des DF ne permet
pas de reprsenter la faon complte la billetterie, vu quil ne permet pas de mettre en correspondance les tudiants
et les soires.

1.4.2

Les entits

Il est usuel, en analyse, de regrouper dans des entits des donnes lies leur identifiant par une relation de
dpendance fonctionnelle. On reprsente cela ainsi :
Les botes dans lesquelles les donnes sont regroupes sont des entits, les identifants doivent tre souligns, et
toutes les donnes doivent tre en dpendance fonctionnelle avec lidentifiant.
La cl dessine ct de lidentifiant est ajoute par Open Model Sphere, vous navez pas besoin de la dessiner.
Par rapport la question que nous nous posions, et qui tait comment reprsenter graphiquement les correspondances
entre les soires et les tudiants, nous navons toujours pas rpondu.

1.4.3

Les Associations

Les associations sont des correspondances entre les entits, on les reprsente ainsi :

ETUDIANT

SOIREE

numetud
nometud
prenometud
mailetud

numsoiree
nomsoiree
datesoiree

Figure 1.4 Exemple entits

ETUDIANT

SOIREE

numetud
nometud
_,_
prenometud
mailetud

PARTICIPER
_,_

numsoiree
nomsoiree
datesoiree

Figure 1.5 Exemple associations

Le fait que Etudiant soit associ Soire signifie que la base de donnes devra permettre tant donn un tudiant
particulier, de savoir quelle(s) soire(s) il a particip, et vice-versa, partir dune soire donne, il devra tre possible
de dterminer quels tudiants ont particip.
Il est usuel de choisir des verbes pour les nommer, pour la simple raison que la plupart du temps, les entits
reprsentent des objets (au sens trs large du terme), et les associations des actions impliquant ces objets.

1.4.4

Les Cardinalits

Etendons notre modle : supposons que le BDE souhaite aussi grer les lieux rservs pour les soires. Il serait
envisageable dagrandir notre MCD de la sorte :
ETUDIANT
numetud
nometud
_,_
prenometud
mailetud

SOIREE
PARTICIPER
_,_

numsoiree
nomsoiree _,_
datesoiree

LIEU

SE DEROULER
_,_

numLieu
nomLieu

Figure 1.6 Exemple incomplet...


Le problme qui se pose est que ce modle est incomplet... En effet la relation Rserver nest du tout de la mme
nature que la relation Participer... Pourquoi ? Parce que pour une soire on ne rserve quune salle la fois ! On sen
convainc en remarquant quil y a une dpendance fonctionnelle entre numsoiree et numlieu.
Etant donne une soire particulire, on lui associe un et un seul lieu, alors qu un lieu correspond un nombre
de soires inconnu lavance. On complte le modle en ajoutant ce que lon appelle des cardinalits :
Le 0, n entre Etudiant et Participer signifie qu un tudiant sera associ un nombre de soires pouvant varier
de 0 plusieurs. Le n signifie que le nombre de soires peut tre aussi grand que lon veut. Le 0, 1 sparant Soire de
Rserver signifie qu une soire est associ 0 ou 1 salle. A votre avis, que signifient les autres cardinalits ?

1.4.5

Associations et attributs

Supposons que les tudiants aient le droit de venir avec des personnes extrieures, cest--dire quils aient le droit
de rserver plusieurs places. O mettre la donne nbPlaces ? On ne peut pas la mettre dans Etudiant, ni dans Soire,
8

ETUDIANT
numetud
nometud
0,N
prenometud
mailetud

SOIREE
AR

numsoiree
0,N nomsoiree
datesoiree

LIEU

SE DEROULER
0 

 1

numLieu
nomLieu

Figure 1.7 Exemple cardinalits

parce que le nombre de place rserves par un tudiant une soire dpend la fois de la soire et de ltudiant. La
solution est la suivante :
ETUDIANT
numetud
nometud
0,N
prenometud
mailetud

SOIREE
AR

numsoiree
0,N nomsoiree
datesoiree

LIEU

SE DEROULER




numLieu
nomLieu

Figure 1.8 Exemple attribut


Cet attribut de lassociation Participer signifie qu chaque fois dun tudiant annoncera sa participation pour
une soire, il devra prciser combien de places il souhaite rserver.
Exercice 1 - Chane dapprovisionnement
Construire un MCD modlisant la chane dapprovisionnement : A.2.

1.4.6

Associations complexes

Il est possible dexprimer avec des associations des situations relativement labores. Des bases donnes complexes
comme par exemple celles que lon peut trouver dans des rseaux sociaux se modlisent de faon surprenante.
Rflexives
Si lon souhaite par exemple reprsenter une liste dinternautes pouvant tant tre amis entre eux. Lassociation Etre
ami met donc un Internaute avec un autre Internaute. Il faut donc pour reprsenter cela utiliser une association
rflexive.
INTERNAUTE

0,N

ETRE

numInternaute
0,N

Figure 1.9 Exemple rflexive

Multiples
Un autre cas qui pourrait se prsenter est celui o il existe de multiples associations entre deux entits. Par exemple
dans le cas dun groupe (ou forum), il existe pour chaque groupe un internaute particulier qui en est le crateur. Cela ne
doit pas empcher dautres internautes de sinscrire sur le groupe. On reprsente cette situation avec deux associations
diffrentes entre ces deux entits.
9

0,N



INTERNAUTE

numInternaute

0,N

0,N

Figure 1.10 Exemple multiple

Ternaires
Il est aussi frquent que plus deux associations soient impliques dans une association. Si par exemple, on souhaite
garder en mmoire des produits achets par des clients sur un site, lassociation mettant en relation le produit, la
personne qui lachte, et la date dachat devra donc relier trois entits.
ER
0,N

UIT
0,N

DATE

Figure 1.11 Exemple ternaire


On remarque au passage que la quantit dpend la fois de linternaute, du produit et de la date.
Exercice 2 - Secrtariat pdagogique
Reprsentez un MCD associ au secrtariat pdagogique : A.1.
Exercice 3 - Arbre gnalogique
Reprsentez un arbre gnalogique (A.3) avec un MCD.
Exercice 4 - CMS
Ralisez un MCD permettant de reprsenter un CMS (A.4).

10

1.5
1.5.1

Modle physique des donnes


Introduction

Le MPD (Modle physique des donnes) est la dernire tape de lanalyse. Le MPD nest autre quune liste de
tables avec pour chacune delle les colonnes faisant partie de cette table. Il sobtient par calcul partir du MCD.

1.5.2

Formalisme

Chaque nom de table est suivi dune liste de colonnes entre parenthses.
Les cls primaires sont soulignes
les cls trangres sont prcdes par un dise.

1.5.3

Calcul du MPD

Entits
Une entit devient une table, tous ses attributs deviennent des colonnes et son identifiant devient la cl primaire.
Associations Plusieurs plusieurs
Une association aux cardinalits de type . . . , n des deux cots (donc de type plusieurs plusieurs), devient aussi
une table :
Les attributs de cette association deviennent des colonnes.
Les cls primaires des tables se trouvant de part et dautres de lassociation sont importes sous forme de cls
trangres.
La concatnation de ces cls trangres devient la cl primaire.
EntiteA(idA, AttributA)

EntitA
idA
_,N
AttributA

EntiteB(idB, AttributB)

EntitB

AssociationT
AttributT

idB
_,N
AttributB

AssociationT(#idA, #idB, AttributT)

Figure 1.12 Relations plusieurs plusieurs


Dans lexemple ci-dessus, EntiteA et EntiteB sont relies par AssociationT , leurs cls primaires pA et pB sont
dupliques dans la table AssociationT pour devenir des cls trangres. Le couple (p1, pB) devient alors cl primaire
de AssociationT .
Associations Un plusieurs
Une association aux cardinalits de type . . . , 1 dun ct et . . . , n de lautre, (donc de type un plusieurs), disparat :
La cl primaire de la table se trouvant du ct plusieurs est duplique du ct un. Elle devient une cl trangre.
Les attributs de cette association sont reports dans la table se trouvant du ct un.
Dans cet exemple, AssociationT disparat. La cl primaire de EntiteB, se trouvant du ct plusieurs, est reporte
dans la table EntiteA sous forme de cl trangre. AttributT est lui aussi report dans la table EntiteA.
Exercice 1 - Livraisons
Construire le MPD pour le cas Livraisons (A.2).

11

AssociationT
idA
A

tA

tT

EntiteA(idA, AttributA, #idB, AttributT)

EntiteB(idB, AttributB)

Figure 1.13 Relations un plusieurs

Exercice 2 - Secrtariat pdagogique


Construire le MPD pour le cas Secrtariat pdagogique (A.1).

12

1.6

Exercices Rcapitulatifs

Exercice 1 - Bibliothque
Nous souhaitons grer une bibliothque dcrite en annexe (A.5).
1. Raliser une analyse complte : DDD, DF, MCD.
2. Dterminer le MPD et crire le script de cration de tables.
3. Insrer des donnes cohrentes dans vos tables.
4. Mettre en place des vues permettant de dobtenir les informations suivantes :
(a) Abonns dont labonnement nest plus jour.
(b) Ouvrages en circulation.
(c) Exemplaires emprunts devant dj tre revenus, et les abonns correspondants.
(d) Ouvrages dont il existe des exemplaires disponibles pour le prt (empruntables et non en circulation).
(e) Ouvrages dont il nexiste plus dexemplaire.
(f) Ouvrages dont tous les exemplaires sont en circulation.
(g) Nombre demprunts par ouvrage.
(h) Abonns pouvant emprunter (abonnement jour et limite non dpasse).
(i) Nombre douvrages en circulation par abonn.
(j) Dautres requtes qui vous sembleraient intressantes...

13

Chapitre 2

UML
2.1

Introduction au UML

UML est un ensemble de reprsentations graphiques permettant de modliser des applications utilisant des langages objet. Dans ce cours nous nous concentrerons sur les diagrammes de classes. Le diagramme de classe est
ladaptation du MCD aux classes, cest--dire une reprsentation permettant de rapidement comprendre larchitecture
dune application. Son emploi est incontournable ds que lon aborde des projets dune certaine ampleur.
Pour lire ce document, il est ncessaire davoir quelques bases de Merise (premire partie de ce cours) et de connatre
les grands principes de la programmation objet (classe, instances, hritage, interfaces, etc.).

2.1.1

Classes

Une classe est reprsente par une bote contenant trois sections :
Lentte contient le nom de la classe et certaines informations complmentaires (abstraite, interface, etc.).
Les attributs sont les variables de classe (static) ainsi que les variables dinstance (non static).
Les mthodes contiennent les sous-programmes dinstance et de classe.
Point
abscisse : double
ordonnee : double
getAbscisse() : double
getOrdonnee() : double
setAbscisse(double)
setOrdonnee(double)

Lexemple ci-dessus nous montre une classe Point disposant de deux attributs abscisse et ordonne, tous deux
de type double. Les quatre mthodes (les getter et les setter) se trouvent dans la troisime partie de la bote.
Visibilit
La visibilit dun identificateur est note en le faisant prcder dun symbole + (public) ou - (private), #
(protected) ou ~ (package).
Un attribut est :
public sil est possible de lutiliser depuis nimporte o dans le code.
priv sil nest visible que depuis lintrieur de la classe. On omet souvent les attributs priv dans le diagramme
de classe.
protected sil nest visible que depuis les sous-classes. Attention, en Java un attribut protected nest accessible
que sur lobjet this, vous ne pourrez pas vous en servir sur un autre objet de la mme classe.
package, la visibilit par dfaut, sil nest visible que dans le package.

14

Point
- abscisse : double
- ordonnee : double
+
+
+
+

getAbscisse() : double
getOrdonnee() : double
setAbscisse(double)
setOrdonnee(double)

Par exemple dans la classe Point ci-avant abscisse et ordonne sont privs tandis que les quatre mthodes sont
publiques.
Attention : Avec le logiciel que jutilise, les attributs et mthodes statiques sont souligns.

2.1.2

Relations

Lorsque deux classes sont relies par une flche, cela signifie que chaque instance de la classe se trouvant lextrmit
initiale de la classe contient une rfrence vers une (ou plusieurs) instances de la classe se trouvant lextrmit finale
de la flche. Donc si flche part de la classe A vers la classe B, on dit quil y a une relation de A vers B.
Etudiant

Soiree

- num : int
- nom : String
- prenom : String

- num : int
- nom : String
- date : Date

+ getNum() : int
+ getNom() : String
+ getPrenom() : String

+ getNum() : int
+ getNom() : String
+ getPrenom() : String

Cet exemple modlise linscription dtudiants des soires. Un tudiant sera en correspondance avec les soires
auxquelles il est inscrit.
Attribut
Lattribut de la classe situe lextrmit initiale de la flche servant reprsenter la relation est trs souvent
prcis ct de la flche afin dindiquer comment cette relation est implmente. Pour viter les redondances, on ne
la prcise pas avec les attributs de la classe.
Etudiant
- num : int
- nom : String
- prenom : String

Soiree
- num : int
- nom : String
- date : Date

-soirees

+ getNum() : int
+ getNom() : String
+ getPrenom() : String

+ getNum() : int
+ getNom() : String
+ getPrenom() : String

Par exemple, mmoriser pour un tudiant lensemble des soires auxquelles il est inscrit ncessite une variable
(non-scalaire) appele ici soires.
Sens de navigation
Vous noterez que les sens des flches indiquent un sens de navigation entre les objets. Si lon a A B, cela signifie
quil est possible depuis un objet A de dterminer directement lobjet B qui est en relation avec. Vous noterez que la
navigation dans lautre sens ne sera pas facilit par cette spcification.
Labsence de flche signifie que la navigation peut seffectuer dans les deux sens. Cela peut tre tout fait pratique
pour exploiter les classes, mais ce type de rfrence croise peut tre assez difficile programmer.
15

Etudiant

Soiree

- num : int
- nom : String
- prenom : String

- num : int
- nom : String
- date : Date

-soirees

-etudiants

+ getNum() : int
+ getNom() : String
+ getPrenom() : String

+ getNum() : int
+ getNom() : String
+ getDate() : Date

La relation est ici bidirectionnelle, il est possible partir dun tudiant de retrouver les soires et partir des
soires de retrouver un tudiant.
Label
Une relation peut tre accompagne dun label tiquetant la nature de la relation, ce qui est apprci lorsque cette
dernire nest pas vidente.
Etudiant

Soiree

- num : int
- nom : String
- prenom : String

-soirees

-etudiants

+ getNum() : int
+ getNom() : String
+ getPrenom() : String

- num : int
- nom : String
- date : Date
+ getNum() : int
+ getNom() : String
+ getPrenom() : String

Inscription

Multiplicit
Les valeurs aux extrmits des flches sont lanalogue des cardinalits en Merise. Sauf quelles sont lenvers !
Vous remarquerez aussi que les notations peuvent tre trs htrognes :
Certaines sont de la forme inf..sup, o inf est le plus petit nombre dinstances rfrences, et sup le nombre
maximal. Une valeur arbitrairement grande est note .
Tandis que dautres nindiquent quune seule valeur. 1 sil y a un objet rfrenc, sil peut y en avoir 0, 1 ou
plusieurs.
Etudiant

Soiree
Lieu

- num : int
- nom : String
- prenom : String
+ getNum() : int
+ getNom() : String
+ getPrenom() : String

-soirees
*

- num : int
- nom : String
-etudiants
- date : Date
*
+ getNum() : int
+ getNom() : String
+ getDate() : Date

-lieu
*

0..1

- num : int
- nom : String
+ getNum() : int
+ getNom() : String

Se derouler

Un tudiant peut sinscrire 0, une ou plusieurs soires, tout comme une soire peut sinscrire un nombre
arbitraire dtudiants. Par contre, une soire ne peut se drouler que dans un seul lieu, Le 0 signifiant quon se garde
16

le droit de reprsenter des soires dont le lieu na pas encore t dtermin. On notera que plusieurs soires peuvent
se drouler dans le mme lieu.

2.1.3

Hritage

Lhritage est not avec une flche (quelques fois en pointilles) termine par un triangle vide. La classe mre
peut tre une classe conventionnelle, une classe abstraite, ou encore une interface. On prcise dans ce cas la nature de
la classe mre afin dviter toute confusion. On prte aussi attention au fait que dans certains langages objets, en
particulier Java, lhritage multiple est interdit.
Le cas particulier dhritage quest limplmentation se reprsente avec des flches en pointills.

rtr

rtr

Un objet de type Girafe sera aussi de type Equid, de type Vertbr et enfin de type Animal.
Attention : Avec le logiciel que jutilise, les classes et mthodes abstraites sont reprsents en italique.

2.1.4

Relations spcifiques

Composition
La composition est la notation utilise pour transposer les entits faibles ou mondes objets. Une classe A est
agrge une classe B si toute instance de A est relie une (et exactement une) instance de B, et ne peut donc pas
exister sans cette instance de B. La composition implique quune instance de A sera toujours en relation avec la mme
la instance de B. On la note avec un losange noir du ct de la classe propritaire.
Client
Commande
- num : int
- nom : String
- prenom : String

-client
*

+ getNum() : int
+ getNom() : String
+ getPrenom() : String

- num : int
- date : Date
+ getNum() : int
+ getDate() : Date

Une commande sans client nexiste pas, la destruction du client entrane la destruction de toutes ses commandes.
Une fois cre, une commande sera toujours associe au mme client.

17

Agrgation
Une classe A est lagrgation dune classe B lorsquune instance de A est une collection dinstances de B. On la
reprsente avec un losange blanc du ct de la classe contenant la collection.
La diffrence avec une relation est simplement conceptuelle vu que dans les langages objets, lagrgation simplmente de la mme faon que si elle avait t reprsente avec une relation plusieurs plusieurs.
ListeInvites

Invite

-invites
0..*

0..*

Une liste dinvits nest quune classe pour regrouper des invits. Mais la disparition de la liste nentrane pas
ncessairement la disparition des invits. Cest pour cela que dans le cas prsent une agrgation t prfre la
composition.
Classe dassociation
Dans le cas de relation plusieurs plusieurs, il est frquent que des valeurs accompagnent la relation. Dans les
langages objets, on na dautres choix que de crer une classe spcialement pour ces valeurs. A chaque couple
dinstances impliques dans la relation correspond donc une instance de la classe dassociation. La classe dassociation
est relie avec des traits en pointills la relation.
Produit
Commande
- num : int
- date : Date

-produits
*

+ getNum() : int
+ getDate() : Date

- num : int
- nom : String
- prix : int
+ getNum() : int
+ getNom() : String
+ getPrix() : int

Comporter
-quantite : int
+getQuantite() : int

Le fait quun produit figure sur une commande ne suffit pas compltement caractriser leur relation. Il est
ncessaire de disposer de la quantit de produit figurant sur cette commande. Comme cette quantit dpend la fois
du produit et de la commande, celle-ci ne peut figurer que dans une classe dassociation.
Relations ternaires
Une relation ternaire est un ensemble de triplets mettant en relation trois objets. On lcrit avec un losange reli
aux classes de ces trois objets.

18

Enseignant

Matiere

Classe

Affecter

Une affectation concerne un enseignant, une matire et une classe. Ce qui signifie par exemple que chaque enseignant
sera en correspondance avec des couples (matire/classe).
Relations rflexives
Lorsque chaque instance dune classe contient une rfrence vers un objet du mme type, on a afaire une relation
reflexive.
0..1
Salarie

-responsable
0..n

Chaque salari possde un champ responsable rfrenant lautre salari qui est son suprieur hirarchique.
Relations multiples
Deux classes peuvent tre relies par plusieurs relations diffrentes.
Inscrire
Etudiant
- num : int
- nom : String
- prenom : String

-soirees

-etudiants

0..*

0..*

+ getNum() : int
+ getNom() : String
+ getPrenom() : String

Soiree

0..*
-organisateur

- num : int
- nom : String
- date : Date
+ getNum() : int
+ getNom() : String
+ getDate() : Date

Organiser

Un tudiant peut aussi bien avoir organis une soire que sy tre inscrit (voire les deux). Les deux relations nont
pas la mme nature et il serait une erreur de les fusionner.
19

2.1.5

Exercices

Exercice 1 - Livraisons
Construire un diagramme UML pour le cas Livraisons (vous utiliserez le MCD fait lors des cours prcdents).
Exercice 2 - Arbre gnalogique
Nous souhaitons mettre au point un logiciel permettant de reprsenter un arbre gnalogique. Cest dire listage
des personnes, mariages et filiation. Nous tiendrons compte le fait que les parents peuvent tre inconnus. Par contre,
nous ne grerons que les mariages htrosexuels et nous ferons abstractions de certains pratiques en vogue comme la
transexualit (si vous tes sages nous ferons un TP l-dessus plus tard dans lanne). Reprsentez cette situation avec
un MCD.
Exercice 3 - Bibliothque
Nous souhaitons grer une bibliothque simple. Nous recenserons une liste douvrages, avec pour chacun le titre et
lauteur (ventuellement plusieurs). On tiendra compte du fait que des ouvrages peuvent exister en plusieurs exemplaires, certains pouvant ne pas tre disponibles pour le prt (consultables uniquement sur place, ou dtruits). Une liste
dadhrents devra tre tenue jour, les adhsions devant se renouveler une fois par an. Il devra tre possible de vrifier
quune adhsion est jour (cest--dire quelle a t renouvele il y a moins dun an), mais il ne sera pas ncessaire de
connatre lhistorique des renouvellements. Les adhrents peuvent emprunter jusqu 5 livres simultanment et chaque
livre emprunt doit tre retourn dans les deux semaines. On devra conserver un historique permettant de savoir quel
abonn a emprunt quels livres, les dates demprunts et de retours.
Exercice 4 - Comptes en banque
Nous souhaitons grer des comptes en banque. Une liste de comptes, avec numro et libell doit tre tenue
jour. On souhaitera connatre pour chacun deux lidentit du propritaire du compte (sachant quun compte peut
dans certains cas appartenir plusieurs personnes). Pour chaque compte, on conservera lhistorique des modifications
(virement, retrait, dpt). On considrera comme un virement tout opration impliquant deux comptes et comme des
retraits (ou dpts) toute opration nimpliquant quun seul compte.
Exercice 5 - Inscriptions sportives
Une ligue sportive souhaite informatiser les inscriptions des comptitions. Chaque comptition porte un nom
et une date de clture des inscriptions. Selon les comptitions, les candidats peuvent se prsenter seul ou en quipe,
sachant que le dtail des quipes (liste des candidats et entraneur) devra aussi tre gr.
Exercice 6 - CMS
Nous souhaitons grer un CMS (content management system). Un CMS est un logiciel permettant de grer le
contenu dun ou plusieurs sites web. Chaque site porte un nom, est caractris par une URL, et est dcoup en
catgories, imbricables les unes dans les autres. Des utilisateurs sont rpertoris dans le CMS, et chacun peut avoir
le droit (ou non) dcrire dans un site web. Chaque utilisateur doit avoir la possibilit de publier des articles (ou des
brves) dans une catgorie dun site web (pourvu quil dispose de droits suffisants dessus). Une brve est compose
dun titre et dun contenu textuel. Un article, en plus de son titre et de son texte dintroduction, est constitu de
chapitres portant chacun un nom et contenant un texte. Il va de soi quon doit avoir la possibilit pour chaque site
de conserver lhistorique de quel article (ou brve) a t publi par quel utilisateur. Ralisez un diagramme de classes
modlisant cette situation.

20

2.2

Design patterns (En construction)

Les design Patterns sont des modles permettant de rsoudre de faon lgante des problmes rencontrs frquemment en programmation objet. Nous en tudierons quelques uns, je vous laisserai le soin de consulter de la
documentation sur Internet pour vous familiariser avec les autres.

2.2.1

Factory

Lorsque la cration dun objet doit tre contrl, on met loprateur new en private et on en confie lappel une
mthode gnralement static appele une factory.

tr

Prt

rtPrt Prt

Prt

Exemple
Un client possde des commandes, mais une commande nexiste pas sans client. Lorsquune commande est cre sans
quun client non null soit spcifi, lever une exception peut toujours tre une solution, mais elle prsente linconvnient
dalourdir le code. Une solution assez lgante consiste rduire la visibilit du constructeur de commande et crer
une mthode non statique createCommande dans client. Cette fonction se charge de crer une commande dont le client
est celui partir duquel la fonction a t appele.

rt

Exercice 1 - Clients et commandes


Crez une classe Commande et une classe Client. Vous rduirez la visibilit du constructeur de Commande et crirez
une mthode createCommande() dans la classe Client. Vous pourrez utiliser une inner class.

2.2.2

Singleton

Le singleton est une classe dont il ne peut exister quune seule instance. Il se code en utilisant une factory.

t
t
tt t
st

Exemple
Lorsquun programme se connecte une base de donnes, le fait quil dispose de plusieurs ouvertures simultanes
vers la mme base peut tre une source de bugs trs difficiles trouver. Le singleton empche lutilisateur de la classe
de crer directement une connexion et contrle le nombre de connexions.

21

Exercice 2 - Singleton
Crez une classe Singleton vide.

2.2.3

Wrapper

Le wrapper est une classe masquant une autre classe. Son but est de dadapter dutilisation dune classe un
besoin, ou plus simplement de cacher la classe que vous avez choisi dutiliser.

rr

rt

Exemple
Une matrice sutilise avec deux indices, les fonctions permettant de manipuler des collections avec plusieurs indices
sont peu commodes et source derreurs.

tr
tt t
stt t

V ector

< V ector < T >> tr

tr

tt
stt

Exercice 3 - Integer trafiqu


crire une classe permettant de wrapper un Integer dans une implmentation de linterface Anneau<E> prsente
dans le diagramme ci-dessous.

22


tr

tr

tr
t
t

tt t
stt t

r
tr tr
tr tr

t
tr
tr

tr
tt
stt

Exercice 4 - Matrice
crire une classe permettant de grer une matrice de type T deux indices. Vous implmenterez les fonctions
de somme et de produit et ferez en sorte que lon puisse faire des matrices de matrices. Le diagramme de classes
correspondant est prsent ci-dessus.

2.2.4

Adapter

Ladapteur est limplmentation - quelques fois vide - la plus simple que lon peut faire dune interface. Lavantage
quelle prsente est quelle vite au programmeur dcrire un grand nombre de mthodes vides ou contenant du code
rptitif pour implmenter linterface. Linconvnient est que comme lhritage multiple est interdit dans beaucoup de
langages, une classe ne peut hriter que dun adapteur la fois.
Attention, dans beaucoup de documentations, ladapteur est assimil un wrapper (ce qui si vous y rflechissez
bien, est tout fait pertinent).
Exemple
Les interfaces comme MouseMotionListener contiennent beaucoup de mthodes et il est quelques fois pnible davoir
plein de mthodes vides dans les classes dimplmentation. La classe abstraite MouseMotionAdapter contient une implmentation vide de MouseMotionListener et hritant de cette classe il est possible de ne redfinir que les mthodes dont
on a besoin.

2.2.5

Strategy

Lorsque lon souhaite disposer de plusieurs algorithmes dans un projet et choisir lequel utiliser lors de lexcution,
ou lors de diffrentes tapes du projet, les diverses modification oprer peuvent savrer particulirement laides. Le
pattern Strategy consiste dfinir une classe mre reprsentant lopration effectuer et dimplmenter algorithme
dans des classes filles.

23

trt
t

tt

tt

Exemple
Si par exemple, vous souhaitez accder des donnes et que selon la situation le mode daccs aux donnes peut
changer (fichier, SGBD, accs rseau, etc.). Une faon lgante de procder est de crer une classe abstraite charge
daccder aux donnes, et de crer une sous-classe par mode daccs.
Exercice 5 - Carr
Crer une classe charge de calculer le carr dun nombre n. Vous implmenterez deux mthodes :
Calculer directement n2
Utiliser le fait que le carr de n est la somme des n premiers nombres impairs.
Vous utiliserez une factory pour permettre lutilisateur de choisir la mthode de calcul.

2.2.6

Iterator

Les type abstraits de donnes comme les Set, Map ou encore Tree ne dispose pas les lments dans une ordre aussi
clair quun tableau ou une liste. itrateur est un moyen dexploiter des collections avec le mme code, en les parcourant
avec une boucle for.

tr

trtr

tr

tr

t
st
r

trtr trtr

ttrtr

trt

t
st
r

trtr trtr

Exemple
En java, toute collection hritant de linterface Iterable<T> peut se parcourir avec une boucle de la forme for (T
element : collection)/ ... /.

24

Exercice 6 - Tableau creux


Crez un wrapper implmentant Iterable<T> et encapsulant un tablau. Votre itrateur retournera tous les lments
non null du tableau. Dans une classe paramtre en java, on ne peut pas instancier un tableau T[], vous tes oblig
de remplacer le tableau par une collection.

tr

trtr

tr

tr

t
st
r

trtr

rtrtr

ts

rt
t
stt
trtr trtr

t
t
st
r

Exercice 7 - Matrice itrable


Rendre itrable la matrice de lexercice sur les wrappers. Ne rinventez pas la roue, utilisez litrateur fourni avec
le type Vector<E>.
Exercice 8 - Filtre
Crez une interface Condition<U> contenant une mthode boolean check(U item). Crez une classe filtre Filtre
<T, U> contenant un Condition<U> et permettant de filtrer une sous-classe T de Iterable<U>. Crez une mthode
filtre(Collection<T> condition) retournant un itrable contenant tous les lments de la collection qui vrifient
check.

25

tr

tr

trtr

tr

ts tr
t

tr

tr

trtr

t
st
r

ts tr

trtrtr
t
st
r

trt
trtr t tr

2.2.7

Observer

Le modle en couche est souvent problmatique lorsque deux classes dans des couches diffrentes ont besoin dinteragir. LObserver permet dviter les rfrences croises et de simplifier considrablement le code. Un observer est un
objet surveillant un autre objet, il contient une mthode appele automatiquement lorsquune modification intervient
sur lobjet surveill.

tr

tr
srr

sr

srrs

srrsrr
tsrr

tsrr

t
Exemple
Dans les interfaces graphiques en Java, il est possible dassocier aux objets graphiques des ActionListener. Linterface ActionListener contient une seule mthode, actionPerformed qui est appele automatiquement lorsquun utilisateur
clique sur un objet graphique. De cette faon, une classe de la bibliothque standard de java peut, sans que vous ayez
la modifier, excuter du code que vous avez crit.

26

tr

tstr

tr

tt

tstrtstr

tPrrtt

str
tPrrtt
Exercice 9 - Surveillance
Reprenez le tableau creux et crez un observateur qui va afficher toutes les modifications survenant dans le tableau.

2.2.8

Proxy

Le proxy cache un objet qui est gnralement difficile daccs (via une connexion rseau, une lecture sur un fichier,
une base de donnes, etc.), et a pour but de masquer la complexit de cet accs, ainsi que dappliquer un lazy loading.
On parle de lazy loading si un objet est lu que lorsque quelquun le demande.
Lautre avantage du proxy est quil permet via des interfaces de changer la mthode de chargement (rseau, base
de donne, etc.).
Exemple
Si laccs un objet ncessite une connexion rseau qui peut prendre du temps, le proxy va le charger une seule
fois, et seulement au moment o il sera demand.
Exercice 10 - Somme de un n
crivez une classe qui calcule la somme des nombres de 1 n avec une boucle. Le calcul ne sera fait que la premire
fois que la fonction sera appele et le rsultat sera stock dans un champ. Les fois suivantes, le rsultat ne sera pas
recalcul.

2.2.9

Decorator

Le decorator est un moyen lgant dviter lhritage multiple sans pour autant dupliquer de code. Rappelons que
lhritage est en gnral dconseill (risque de conflit entre les noms de mthodes), et dans certains langages (Java)
interdit.
Un dcorateur est un wrapper qui contient un objet dont le comportement est modifi, la puissance de ce pattern
vient du fait quun dcorateur peut contenir un autre dcorateur, il est ainsi possible de placer les dcorateurs en
cascade.
Lavantage du dcorateur est quil permet de crer des intersections entre sous-classes et de remplacer lhritage
multiple. Les inconvnients sont de taille : le fait quune liste chane de dcorateurs prcde un objet est dune part
une source de bugs pour les programmeurs inexpriments, et par ailleurs le compilateur ne peut plus contrler le type
des objets de faon aussi prcise (nous verrons pourquoi dans les exercices).
Exemple
Si lon souhaite reprsenter des messages affichables en gras, en italique ou en soulign, trois sous-classes ainsi que
les multiples combinaisons permettant de recouper ces sous-classes sont ncessaires. En utilisant trois wrappers on
obtient la possibilit de les combiner.
27

ss
ss

ttr tr

rtss

ss
ss tr

ttr tr
rtssss

tss

ss

ttr tr
sstr

rss

ttr tr

ttr tr

ttr tr

tssss

ssss

rssss

Exercice 11 - Messages
Programmez lexemple prcdent.
Exercice 12 - Choix de dessert
Implmentez la facturation dun desser. Il est possible de choisir des boules de glaces (vanille, fraise et caf), 1
euro chacune, sachant quon mettre dans la mme coupe des parfums diffrents. Lutilisateur peut aussi ajouter de la
chantilly (pour 0.5) et le nappage (sauce caramel ou chocolat) est 0.75 euros.

28

Annexe A

nonces des cas tudis


A.1

Secrtariat pdagogique

Nous souhaitons grer un secrtariat pdagogique. Nous recensons les tudiants en utilisant leurs noms, prnoms
et adresse. Des formations sont organises en modules, qui eux-mmes sont rpartis sur des semestres. Un tudiant ne
peut tre inscrit que dans une formation la fois, et un module est affect un seul semestre dans une formation. On
tiendra compte du fait quun tudiant peut redoubler ou suspendre sa formation en prenant des congs.

A.2

Chane dapprovisionnement

Nous souhaitons grer une chane dapprovisionnement. Nous tenons une liste de produits et une liste de fournisseurs. Certains produits peuvent tre proposs par plusieurs fournisseurs, des prix qui peuvent tre diffrents. Nous
garderons lhistorique des livraisons en mmoire, avec pour chacune dentre elle, le fournisseur qui la effectu, la date
de livraison ainsi que le dtail des produits livrs.

A.3

Arbre Gnalogique

Nous souhaitons mettre au point un logiciel permettant de reprsenter un arbre gnalogique. Cest dire listage
des personnes, mariages et filiation. Nous tiendrons compte le fait que les parents peuvent tre inconnus. Par contre,
nous ne grerons que les mariages htrosexuels et nous ferons abstractions de certains pratiques en vogue comme la
transexualit (si vous tes sages nous ferons un TP l-dessus plus tard dans lanne).

A.4

CMS

Nous voulons grer un CMS (content management system). Un CMS est un logiciel permettant de grer le contenu
dun ou plusieurs sites web. Chaque site porte un nom, est caractris par une URL, et est dcoup en catgories,
imbricables les unes dans les autres. Des utilisateurs sont rpertoris dans le CMS, et chacun peut avoir le droit (ou
non) dcrire dans un site web. Chaque utilisateur doit avoir la possibilit de publier des articles dans une catgorie dun
site web (pourvu quil dispose de droits suffisants dessus). Un article, en plus de son titre et de son texte dintroduction,
est constitu de chapitres portant chacun un nom et contenant un texte. Il va de soi quon doit avoir la possibilit
pour chaque site de conserver lhistorique de quel article a t publi par quel utilisateur.

A.5

Bibliothque

Nous souhaitons grer une bibliothque simple. La base de donnes devra recenser une liste douvrages, avec pour
chacun le titre et lauteur (ventuellement plusieurs). Vous tiendrez compte du fait que des ouvrages peuvent exister
en plusieurs exemplaires, certains pouvant ne pas tre disponibles pour le prt (consultables uniquement sur place, ou
dtruits). Une liste dadhrents devra tre tenue jour, les adhsions devant se renouveler une fois par an. Il devra

29

tre possible de vrifier quune adhsion est jour (cest--dire quelle a t renouvele il y a moins dun an), mais il
ne sera pas ncessaire de connatre lhistorique des renouvellements. Les adhrents peuvent emprunter jusqu 5 livres
simultanment et chaque livre emprunt doit tre retourn dans les deux semaines. On devra conserver un historique
permettant de savoir quel abonn a emprunt quels livres, les dates demprunts et de retours.

30

You might also like