Professional Documents
Culture Documents
Alexandre Mesl
10 novembre 2015
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
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()
1.2
1.2.1
1.2.2
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
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
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
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
ETUDIANT
SOIREE
numetud
nometud
_,_
prenometud
mailetud
PARTICIPER
_,_
numsoiree
nomsoiree
datesoiree
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
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
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
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
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
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
10
1.5
1.5.1
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
11
AssociationT
idA
A
tA
tT
EntiteB(idB, AttributB)
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
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
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
tr
tt
stt
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
tr
trtr
tr
tr
t
st
r
trtr
rtrtr
ts
rt
t
stt
trtr trtr
t
t
st
r
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
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