Vous êtes sur la page 1sur 121

Introduction à UML

Université du Havre
Plan Général
• Introduction
• Les cas d’utilisation
• Les scénarios (diagrammes d’activité/de
séquence)
• Diagrammes de classe
• Diagrammes d’état
UML
• Unified Modeling Language :
– Méthode d’analyse et de conception orientée objet
• Analyse = recensement et définition des besoins
• Conception = définition d’une architecture « abstraite »
– Première version : 1996
• Précurseurs
– Merise (années 70) : non objet
– OMT : Object Modeling Technique (1990)
– Booch, Oose (Object Oriented Software Engineering)
• Volonté des concepteurs d’UML :
– Unifier les concepts intéressants de ces méthodes
UML : sources
d’information
• Site Web de Rational :
– http://www.rational.com
• Mailing-list française :
– majordomo@essaim.univ-mulhouse.fr
• UML Revision Task Force
– http://uml.shl.com
Préambule
• UML :
 méthode
 méthodologie
 mise en œuvre pas aisée
• UML, méthode unifiée  beaucoup de
concepts
– trop de concepts ?
– ensemble de notations à disposition, pas
nécessaire de tout utiliser
– méthode extensible
Analyse : expression du besoin

• Buts :
– Qui ?
– Quoi ?
– Exemples
• Comment : principalement 2 types de
schémas :
– cas d’utilisation
– scénarii
Utilisateurs
et
Cas d’utilisation
Diagrammes d’utilisateurs
et de cas d’utilisation
• But : recenser les besoins
• Démarche
– recherche des types d’utilisateurs
– analyse des cas d’utilisation pour chacun
– relations entre cas d’utilisations
Les utilisateurs
• Exemples

client secrétaire Comptable Personnel

 On recense les types d’utilisateurs, pas les


utilisateurs eux-mêmes :
une secrétaire d’un magasin peut aussi en être
client
Les cas d’utilisation
(Use Cases)
• Définition
Ensemble de possibilités d’utilisation
relativement proches
• Exemples
Passer une commande Etablir une fiche de paie

Consulter une fiche de paie


Liens utilisateurs-cas
• Lien : —
• Exemple :
Passer une commande

client Comptable

Etablir une fiche de paie

Personnel
secrétaire Consulter une fiche de paie
Liens entre cas
d’utilisation (1)
• Utilisation :
implique une relation entre cas

Comptable

Etablir une fiche de paie

Authentification

Personnel
Consulter une fiche de paie
Liens entre cas
d’utilisation (2)
• Extension :
sorte d’héritage entre cas

« étend »
Consulter une fiche de paie Consulter document
Diagrammes de séquence
Diagrammes de séquence :
exemple introductif
Consultation d’un salaire par le DRH

DRH interface Syst. Authent. BD comptable


Cons.salaire
Identité ?
Id(nom, mdp)
Connu?(nom,mdp)
Rep(c)
Qui ?
Personne(id) Salaire(id)
Données(d)
Salaire(s)
Diagramme de Séquence (DdS)
:
• But premier : intentions ?
Illustrer les données échangées entre utilisateurs
et composants dans un exemple particulier
d’utilisation du système
• Corollaire : un diagramme de séquence
 un scénario
 description exhaustive
• Conséquence :
– toujours donner un titre à un DdS
– toujours rattacher un DdS à un cas d’utilisation
Composantes d’un DdS
• Un axe vertical (implicite) : le temps
– non gradué
– croissant de haut en bas
• des objets et utilisateurs :
– un symbole ( ou );
– un axe vertical
• des messages
– flèches entre objets/utilisateurs
• des étiquettes
Axes Objet/Utilisateur d’un DdS
(1)
• Début :
– quoi ?
• utilisateur ou objet (organe important du système)
– où ?
• Si objet existe : en haut du diagramme
• Sinon : à l’extrémité du message donnant lieu à la
création
• Fin :
– Si l’objet ne meurt pas : aucune
– Sinon : croix ( ) là où l’objet meurt
• Tracé :
– trait épais creux si objet actif ( )
– pointillé si objet inactif ( )
Axes Objet/Utilisateur d’un DdS
(2)
• Objet actif si :
– effectue une opération ;
– attend le retour d’un envoi de message en mode
synchrone ( = appel de procédure/fonction)
• Illustration :
ObjA ObjC
Objet actif
ObjB
Création d’un objet

Objet actif
(en attente Objet inactif
du retour
d’une Destruction d’un objet
procédure)
Axes Objet/Utilisateur d’un DdS
(3)
• Représentations particulières :
– Appels récursifs

– Comportements conditionnels
Messages dans un DdS
(1)
• Définition :
échange d’informations entre objets ou entre
objet et acteur
• Représentation :
– flèche surmontée d’un nom
• Trois genre de message :
– signaux  pas de paramètres ;
– envoi de données  paramètres, pas de résultat attendus
;
– demande de données  résultat attendu, paramètres
éventuels.
Messages dans un DdS
(2)
• Types de message :
– première classification :
• synchrone
• asynchrone
– deuxième classification :
• durée d’acheminement négligeable
• lent
Messages dans un DdS (3)
Représentation des
paramètres
• Paramètres nom (p1, p2)
d’entrée
r:=nom
• Paramètres de
sortie / résultat
Messages dans un DdS (4)
Cas des messages
synchrones
2 types de représentation :
A B
– Explicite :

A B

– Implicite :
Messages dans un DdS (5)
Messages conditionnels
• Condition :
– proposition logique entre crochets devant être
vraie pour que le message soit envoyé :
A B
[x >0] ok(id)

A B
• Choix : [x > 0] ok(id)
[x < 0] ko(id)
Messages dans un DdS (6) :
Etiquettes et contraintes
• Exemple
A B C

{b - a < 5 s}

b
Diagrammes de classe
Représentation d’une
• classe
Forme de base : Classe de l’attribut
Optionnel, mais recommandé
Titre
1 attribut :
droit nom:type = valeurParDéfaut
Attributs
Public : +
Optionnel
Privé : -
Protégé : #
Méthodes
1 méthode :
droit nom(ListeParamètres):typeRetour

Type de l’éventuelle
Liste de 0 à n éléments séparés valeur de retour
par des virgules et de la forme :
nom : type=valeurParDéfaut
Un exemple de classe
• Cadre :
– logiciel pour dessiner/manipuler des courbes
• Classe Courbe : Courbe
- NomAbscisse:Chaîne
- NomOrdonnée: Chaîne
- MinAbs:Réel
- MaxAbs :Réel
- MinOrd :Réel
- MaxOrd :Réel
- GradAbs :Réel
- GradOrd :Réel
- fonc:Fonction
- coul:Couleur
+ ChangerZone(min:réel,max:réel)
+ Calculerbornes()
+ ChangerCouleur(coul:Couleur)
Classes paramétrées
• Rôle du paramètre : implanter la généricité
 peut représenter :
• un type
p1 est un type
• une valeur
p2 est une valeur de type entier
• Notation : exemple
p1, p2: entier
Titre
Champ1 : p1
Champ2:entier=p2
Utilisation des classes
paramétrées
• Attention :
– Classe paramétrée :
 schéma de classe
 classe
 Doit être instanciée pour pouvoir être utilisée
• Instanciation d’une classe paramétrée :
Titre<Courbe,4>
Héritage « de base »
• Représenter le fait que Titre2 hérite de Titre1
:
Titre1
Attributs1
Méthodes1

Titre2
Attributs2
Méthodes2
Plusieurs classes filles
• Deux représentations possibles

Titre1 Titre1
Attributs1 Attributs1
Méthodes1 Méthodes1

Titre2 Titre3 Titre2 Titre3


Attributs2 Attributs3 Attributs2 Attributs3
Méthodes2 Méthodes3 Méthodes2 Méthodes3
Notion de recouvrement
Sans recouvrement Avec
recouvrement
Titre1 Titre1
Attributs1 Attributs1
Méthodes1 Méthodes1

{disjoint} {recouvrement}

Titre2 Titre3 Titre2 Titre3


Attributs2 Attributs3 Attributs2 Attributs3
Méthodes2 Méthodes3 Méthodes2 Méthodes3
Complétude et incomplétude
de l’héritage
• Complet :
toutes les classes filles sont connues, mais
pas forcément toutes représentées
• Incomplet :
on ne connaît pas encore toutes les classes
filles
• Représentation
A : {incomplet}
A
{complet}

B C B C
Notion d’association entre
classes
• Exemples

Matière

a pour élève
Enseignant a pour enseignant Elève
Association :
premières caractéristiques
• Association :
– un lien entre deux classes
– deux sens de lectures éventuels : pour
chacun :
• une direction
• un nom
– possibilité de nommer directement la
relation sans passer par les sens de
lecture
Notion de multiplicité
maximale
• Exemples
– un élève fait partie d’une seule filière
1
Elève Filière
– une filière est composée de plusieurs matières
*
Filière Matière

• N.B. : faire attention à l’emplacement de la


multiplicité : du côté « cible »
Notion de multiplicité
minimale
• Exemple :
– un filière est nécessairement composée d’au
moins 1 matière
1
Filière Matière

– un élève peut suivre des options


0
Elève Option
Expression des multiplicités :
cas courants
• On exprime les multiplicités minimales ET
maximales, avec « .. » comme séparateur
: 1..1 1
Elève Filière ou Elève Filière

1..*
Filière Matière

0..*
Elève Option
Multiplicité : expression
complète
• Une association implique deux sens, donc la
multiplicité s’exprime des deux côtés :
1..* 1
Elève Filière

1..* 1..*
Filière Matière

0..* 0..*
Elève Option
Cardinalités sur l’exemple
• Exercice : placer les bonnes cardinalités

Matière

a pour élève
Enseignant a pour enseignant Elève
multiplicité : cas général

• Plusieurs options :
– les bornes inférieures ne sont pas
forcément 0 ou 1 ;
– les bornes supérieures ne sont pas
forcément 1 ou * ;
– il est possible de spécifier plusieurs valeurs
ou intervalles
2,3
de valeurs séparés par des
3..6, 10..*
A
virgules B

• Exemple :
multiplicité : conclusion
• Intérêts :
– contraindre au maximum le système pour éviter les
erreurs par la suite
– aider à comprendre la structure et les rôles et
dépendances des classes
• Dilemme :
– plus elles sont précises, moins les erreurs sont possibles
– plus elles sont précises, moins le système est
extensible/souple
 trouver une juste mesure
Associations n-aires :
pourquoi
• Limite des associations binaires :
Matière 1..*
1..*

1..* 1..*
a pour élève
Enseignant 1..* a pour enseignant 1..* Elève
Une matière n’est enseignée à un élève que par
un enseignant, mais cela n’apparaît pas sur le
schéma.
Associations n-aires : comment
Matière
0..*

Enseignement

0..1
0..*
Enseignant Elève

• Interprétation des multiplicités :


– Principe :
pour une classe A d’une association n-aire, on note la multiplicité en
supposant les n-1 autres participants de l’association connus
– Exemples :
pour une matière et un élève donné, il y a au plus un enseignant
un enseignant peut enseigner une matière à plusieurs élèves
Ambiguïté dans une
association
• Une entreprise est constituée de personnes :
membre de
Personnel 1..* 0..1 Entreprise

• Au sein de l’entreprise, certaines personnes


sont sous les ordres d’autres :
0..1 membre de
Personnel 1..* 0..1 Entreprise

0..*

chef de

 Problème d’interprétation :
un chef dirige plusieurs personnes, ou une
personne a plusieurs chefs ?
Notion de rôle
• Reprise de l’exemple :
chef membre de
0..1 Personnel 1..* 0..1 Entreprise
0..* subalterne

chef de

chef et subalterne sont les rôles des intervenants


de la relation chef de
• N.B. :
– la notion de rôle peut aussi être exprimée sur une
relation entre classes différentes
– ne pas surcharger un schéma en mettant des
rôles évidents
Limite des attributs
• Exemple :
– on désire stocker les notes des élèves par
matière :
Quelle que soit la
– première solution : matière, une seule note
Elève Matière par élève
note

– deuxième solution Quelle que soit


l ’élève, une seule note
Elève Matière par matière
note
Attributs de relation
• Reprise de l’exemple précédent :

Elève Matière

Attribut de
relation
note

pour chaque association entre un élève et une


matière, note peut avoir une valeur particulière
Dépendances entre associations
(1)
• Inclusion :
– définition :
si A est une relation incluse dans B, alors tout couple de
A doit être un couple de B
– exemple :
1..* membre 1

Elève 1..2 {subset} Classe


0..1
délégué

 un élève ne peut être délégué que de sa classe


Dépendances entre
associations (2)
• Disjonction
– définition :
Soient R et S deux associations respectivement entre
les classes (A,B) et (A,C). Il y a disjonction (notée or)
entre R et S si tout élément de A ne peut être relié qu’à
des éléments de B (par R) ou des éléments de C (par
S)
– exemple : Propriétaire

Résidence {or}

Locataire
Qualification d’une
association
• Exemple :
sans qualification avec qualification
Plateau de dames Plateau de dames
1 Abscisse
Ordonnée
1
Qualification
100 1
Case Case

• Interprétation :
à partir d’un plateau de jeu, d’une abscisse et
d’une ordonnée ne peut correspondre qu’une
seule case
Interfaces (1)
• Définition :
– un ensemble de profils de méthodes
 pas d’attribut (donc d’état)
 pas d’instances
 pas d’implantation
 pas de relation avec d’autres classes
• Utilisation :
– comme généralisation :
• implantée par certaines classes
• requises par d’autres
Interfaces (2)
• Représentation :

« interface »
Ordre
égal : booléen
inférieur : booléen

• Utilisation : deux solutions


« interface »
Ordre
égal : booléen
Entiers Variant inférieur : booléen
Ordre
« uses »

Entiers Variant
Agrégation
• Définition :
association binaire à sémantique particulière :
une des classes apparaît comme étant un
constituant de l’autre.
• Notation :
Équivalent à :
• Exemple : Voiture
Voiture

4
4
Moteur Roue
Moteur Roue
Composition
• Définition :
agrégation telle que chaque composant ne peut
être associé qu’à un composé
• Notation :

• Exemple : Équivalent à :
Classe
Classe
1 N.B. l’exemple de la voiture
1..*
1..* est valable si le moteur et les
Élève roues sont identifiés par des
Élève
numéros de série
Composition : autre
représentation
• Représenter les composants dans les
composés
Voiture

Moteur
n° de série
0..*

Modèle
fabriquant
Diagrammes d’états
Rôle
• Jusqu’à présent, on a vu :
– les besoins (uses cases, scénarios)
– l’aspect statique (diagramme de classes)
– l’aspect dynamique entre composants
(scénarios)
 manque :
– aspect dynamique d’un objet

 rôle des diagrammes d’état


Notion d’Etat
• Notion primaire :
– Définition :
L’état d’un objet caractérise l’ensemble des valeurs de ses champs
à un instant donné
– Exemple :
si un enfant est caractérisé par la couleur de ses cheveux et son
âge, alors <blond, 15> est un état, <brun, 14> est un autre état
• Notion abstraite (utilisée par la suite) :
– Définition :
un état représente un ensemble d’états au sens primaire donné ci-
dessus
– Exemple :
si un enfant est caractérisé par la couleur de ses cheveux et son
âge, alors « adolescent » ( 13  âge  19) peut être un état
Particularité des états
• Intérêt de la notion abstraite d’état :
– éviter de multiplier le nombre d’états
– se concentrer sur les caractéristiques
essentielles intervenant dans le comportement
d’un objet
• En règle général, des états sont :
– soit disjoints
– soit imbriqués
 pas de recouvrement partiel
Les diagrammes d’états
• Au plus un diagramme par classe
• Pour représenter
– les états possibles des objets de la classe;
– les transitions possibles entre ces états.
• Exemple (simplifié) :
ESSTINIEN
Actif

Etudiant Retraité

Chômeur
Les types d’états
• Etat initial :
– indispensable
– tout objet commence dans cet état
– notation :
• Etat final :
– pas indispensable
– passage obligé pour tout objet à détruire
– notation :
• Etat intermédiaire :
Nom N.B. : nom pas indispensable,
mais FORTEMENT conseillé
Représentation des
états intermédiaires
• Deux représentations possibles :

Etat

Etat
Transitions et événements
• Transition :
– Définition
passage potentiel d’un état à un autre (éventuellement le même)
– Représentation :
• Evénement :
– (souvent) : message venant de l’extérieur de l’objet
– (souvent) : figure sur les diagrammes de séquence
• En général, un événement est associé à une
transition
Exemple complété
ESSTINIEN changement employeur

embauche
Actif
départ retraite

licenciement décès
Etudiant Retraité
embauche
Inscription ANPE
départ retraite
Chômeur
Evénements :
approfondissement
• Notation :
nom(paramètres) [condition]/action
Optionnel Optionnel Optionnel

• Explications
– Condition :
doit être vérifiée pour que l’événement soit pris en
compte
– Action :
décrit une action à exécuter (souvent, une méthode de
la classe) si l’événement survient et doit être pris en
compte
Transitions internes
• Notation :
comme des événements à l’intérieur d’un état.
• Exemple :
Etat1
Ev1/action1
Ev2[cond2]/action2

• Evénements particuliers :
– entry : dès que l’on rentre dans l’état (par transition
externe)
– exit : dès que l’on quitte l’état (par transition externe)
– do : l’action associée est exécutée tant que l’on est dans
l’état
Etats composites :
Introduction
• Principe :
Un état peut être composé de plusieurs sous-états.
• Exemple :
ESSTINIEN Ancien

Actif

Etudiant Retraité

Chômeur
Etats composites :
Représentation conseillée

ESSTINIEN Ancien

Actif

Etudiant Retraité

Chômeur
Etats composites :
Représentation abstraite simple

ESSTINIEN

Etudiant Ancien
Etats composites :
Représentation abstraite
générale
• Principe :
s’il y a entrée ou sortie directe avec des sous-
états, ceux-ci sont représentés par de simples
traits
• Exemple :
A C

D
Agrégation d’états (1)
• Principe :
état = composition (simultanée) de plusieurs sous-
états
• Exemple : Jeune

Bébé Ne parle pas

Enfant parle
Adulte
Adolescent écrit
Agrégation d’états (2)
• Nouvel exemple :
B
E

A C G
F
D

H
• Chemins possibles :
A, (B,E), (B,F), G
A, (B,E), (C,E), G
A, (B,E), (C,E), (D,E), (D,F), G
A, (B,E), (C,E), (D,E), H
Point de jonction
• But :
regrouper ou diviser des transitions
• Exemple :

A B

[x <= 0] [x > 0]
Dans l’état A, la transition
en rouge n’est activée que
C si l’une des branche en
[a > 100] [a = 50]
bleue est activable.
[a < 0]

D E F
Point de choix dynamique
• But :
regrouper au diviser des transitions !
• Exemple :
A B

[x <= 0] [x > 0] Dans l’état A, si x>0, la transition


en rouge est activée. Ce n’est
qu’au niveau du point de choix
C [else] que l’on regarde s’il y a une
[a > 100]
transition activable.
[a < 0]

D E F
Transitions simultanées
A B
E F
C D

• Les états A et C sont atteints


simultanément ;
• Les états B et D sont quittés
simultanément.
Synchronisation
A B C
X * Y
D E F

• Interprétation :
On ne peut quitter D pour E que si dans le
même temps, on quitte A
Diagrammes d’activité
Rôle
Représenter l’aspect dynamique

 Différence par rapport aux diagrammes


d’état ?
Représentation d’une méthode particulière
= un chemin dans le graphe d’état
 Différence par rapport aux diagrammes de
séquence ?
Point de vue comportemental, et non pas besoin
Premier exemple
Système::Ouverture
Vérifier droits [KO]
Allumer VR

[OK]

Allumer VV Débloquer porte


Premières explications
Début de la méthode Ne pas confondre :
Fin de la méthode
Activité Activité
Activité avec sous-activités Etat
Synchronisation
Transition
[ ] Condition/Garde
Deuxième exemple
• Système::Vérifier Droits

[entrer] Vérifier si a le [Oui] Vérifier si déjà


droit dans un bâtiment
[Sortir]
[Non]

Vérifier si dans
bâtiment
Commentaires

• Légende :
Indique un choix

• Problème du schéma :
– quelle est la réponse selon les cas ?
Deuxième exemple
amélioré
[entrer] Vérifier si a le [Oui] Vérifier si déjà
droit dans un bâtiment
[Sortir]
[Non] [Non] [Oui]

Vérifier si dans Réponse Réponse


bâtiment [OK] [KO]

[Oui] [Non]

Réponse Réponse
[OK] [KO]
Explications
NomObjet
[Etat]
Objet utilisé en entrée ou produit en sortie

• Notations de base :
Production
NomObjet NomObjet
[Etat] [Etat]
Flot de contrôle Utilisation

Utilisation et flot
Notation particulière
• En théorie • En Pratique

NomObjet
[Etat]
NomObjet
[Etat]
Les couloirs (swimlanes)
• Rôle :
séparer les activités selon l’objet/l’acteur
intervenant
• Exemple :
Système Voyant Vert Porte Voyant Rouge

Vérifier droits [KO]


[OK]
Allumer

Allumer Débloquer
De la conception à
l’implantation

Application : d’UML à C++


Principe simplifié
1 Diagramme de classes
 structure des classes
2 Diagrammes d’activité/diagrammes d’état
 corps des méthodes
3 Diagrammes de séquence
 jeux de tests
Structure des classes
Une classe simple
• Un champ  une variable d’instance
• Une méthode  une fonction
membre

class porte {
• Exemple : private :
Porte
int fermee = 1;

- fermée : bool = vrai
int bloquee ;
- bloquée : bool
public :
+ débloquer() ;
void debloquer();
}
Bases
• Gérer la visibilité correctement :
+  public
-  privé
#  protégé
• Convertir éventuellement les types
exemples : bool  int
string  char[]
• Garder des noms similaires, au
renommage prêt nécessaire pour le
langage cible
Héritage simple sans
recouvrement
class personne {
Personne private :
nom : string char nom[50];
int age;
âge : string
}

class enseignant : public personne {


Enseignant private :
matière : string char matiere[50];
}
Héritage multiple
class voiture {
Voiture Bâteau
int vitesseTerre;
vitesse sur terre vitesse sur l’eau }

class bateau {
int vitesseEau;
Véhicule amphibie }

class amphibie : public voiture, bateau {


}
Héritage avec recouvrement
Personne • Problème :
nom
pas directement
{cover}
traduisible
• Solution :
Enseignant Ingénieur trouver un
matière spécialité schéma
équivalent, mais
traduisible
• Suggestion sur l’exemple :
0..* 0..1 0..1 0..*
Enseignement Personne Ingénierie
matière nom spécialité

• Difficulté : solution à trouver au cas par cas


Rappel : généricité, listes
chaînées
template <class elem> class liste {
private :
elem element;
liste<elem> *suivant;
public :
int ajouter(elem element);
elem *rechercher (elem element);
int supprimer(elem element);
}
Les associations 1-N
• Définition
– cardinalité maximale à 1 d’un côté
– cardinalité maximale supérieure à 1 de l’autre
• Principe de traduction
– pointeur dans la classe côté « N » sur un élément de
la classe côté « 1 »
• Exemple
Elève Professeur principal Professeur
nom 0..* 1 nom
prénom discipline
class eleve {
char nom[50]; class professeur {
char prenom[50]; char nom[50];
professeur *profPrincipal; char prenom[50];
} }
Associations 1-N :
commentaires
• Un sens de « navigabilité » privilégié :
– facile de trouver le professeur principal d’un
élève
– plus difficile de trouver les élèves dont un
professeur est professeur principal
• Notion de clef :
– Pourquoi un pointeur ?
• Une seule instance pour un professeur
• Modifications directement prises en compte
– Pointeur sur un objet = clef de cet objet : un
identifiant caractérisant un objet
Associations 1-N :
autres solutions (1)
Pour privilégier l’autre sens de navigabilité
tableau liste chaînée
class eleve { class eleve {
char nom[50]; char nom[50];
char prenom [50]; char prenom[50];
} }

class professeur { class professeur {


char nom [50]; char nom[50];
char prenom [50]; char prenom[50];
eleve* eleves[50]; liste<eleve*> eleves;
} }
Associations 1-N :
autres solutions (2)
« Favoriser » les deux sens
class eleve {
class eleve { class professeur {
char nom[50];
char nom[50]; char nom[50];
char prenom[50];
char prenom[50]; char prenom[50];
professeur *profPrincipal;
} }
}

Class correspondance {
class professeur { eleve *lEleve;
char nom[50]; professeur *leProfPrincipal;
char prenom[50]; }
liste<eleve*> eleves; liste<correspondance> assoc;
}

N.B. : pour accélérer les recherches


dans les deux sens, il est possible de
Redondance ! faire appel à une liste doublement
Comment garantir le « 1 » ? chaînée.
La liste doublement chaînée
template <class type1, class type2> liste_double {
private :
type1 champ1;
type2 champ2;
liste_double<type1, type2> *suivantChamp1;
liste_double<type1, type2> *suivantChamp2;
public :
int insérer(type1 elem1, type2 elem2);
elem2 *rechercher(type1 elem1); Vive la surcharge !
elem1 *rechercher(type2 elem2);
int supprimer(type1 elem1);
int supprimer(type2 elem2);
}
Associations N-M
• Définition :
des deux côtés de l’association, la cardialité
maximale est supérieure à 1 (en général, *)
• Exemple :
1..* enseigne 1..*
Enseignant Matière
nom intitulé
volume horaire

• Première solution :
Class matiere {
Class enseignant { char intitule[50];
char nom[50]; int vol_horaire;
liste<matiere*> enseignements; liste <enseignant*> intervenants;
} }
Associations N-M :
Solution améliorée
• Inconvénient solution précédente :
redondance
• Autre solution : création d’une classe
association Class matiere {
Class enseignant { char intitule[50];
char nom[50]; int vol_horaire;
} }

Class interventions {
enseignant *intervenant;
matiere *discipline;
}
liste <interventions> affectations
Associations 1-1
• Définition :
la cardinalité maximale vaut 1 des deux côtés de
la relation
• Exemple : Classe 0..1 Prof. principal 1
niveau Professeur
numéro nom

• Solutions au choix :
– pointeur sur « professeur » dans « classe »
– pointeur sur « classe » dans « professeur »
• Comment choisir :
si navigabilité n’intervient pas, limiter les pointeurs
nuls
Attributs de relation :
cas général
• A mettre dans les champs de la classe
association
• Exemple :

0..* 1..* Class eleve {


Elève Matière } Class suivi {
eleve *etudiant;
matiere *discipline;
Class matiere { float note;
} }
note
Attributs de relation : cas d’une
relation 1-N sans classe
association
Exemple :
un élève suit une et une seule spécialisation :
0..* 1
Elève Spécialisation

note

Class eleve {
specialisation *filiere; Class specialisation {
float note; }
}
Cardinalités maximales petites
:
• Exemple :
0..1 1..3
A B
chA chB

• Principe :
passer par un tableau
• Application :
Class A {
typA chA; Class B {
B* assocB[3]; typB chB;
} }
Respect des cardinalités
minimales
• Remarque préliminaire
– un lien = un pointeur
• Principe général :
– déclarer les liens comme variables privées
– définir des fonctions d’accès pour établir les
liens
– faire la vérification dans le corps de ces
fonction d ’accès
– notamment : interdire le pointeur nul si la
cardinalité minimale est à 1
Agrégations
• Rappel :
agrégation = association particulière
 Faire comme pour les associations
• Exemple :
class voiture {
Voiture char modele[50];
modèle moteur* vroum;
}

1 Class moteur {
char moteur[50];
Moteur }
Compositions
• Composition = Agrégation particulière
 1ère solution :
procéder comme pour l’agrégation
• 2ème solution :
composant  variable d ’instance du
composé
• Voiture
Exemple : Class voiture {
char immatriculation[20];
Immatriculation moteur vroum;
}

1
Class moteur {
Moteur char numeroSerie[20];
Numéro de série }
Associations n-aires
• Exemple :
0..1 Enseignant
Groupe 0..*
Affect.

0..*
Matière

• Représentation C++ :
class groupe {
} class affectation { Ne pas oublier
groupe *gr; dans la classe
class matiere { enseignant *ens; affectation de
} matiere *mat; vérifier la cardi-
} nalité dans les
class enseignant { liste<affectation> affectations fonctions
} d’ajout d’un
élément
Corps des méthodes
Principes généraux
• Partir du diagramme d’activité :
– une activité
sur le même objet : appel à une autre méthode*, à
définir éventuellement, de la même classe
sur un autre objet : appel de la méthode de l’objet
correspondant => objet.méthode()
– un choix
un test => if
– synchronisation :
effectuer dans un ordre quelconque (si implantation
séquentielle) chacune des branches
* a priori privée
Développer des classes
« sûres »

Quelques conseils
Traçabilité
• Lien avec les documents amonts :
– spécification UML
• schémas de classe pour la structure
• diagrammes d’activité, de séquence et d’état pour les
méthodes
• diagrammes de cas d’utilisation, de séquences pour
les jeux de tests
– cahier des charges
• Lien avec les autres fichiers
limiter au maximum les variables globales. Si
impossible, documenter au mieux
Documentation
• Fichier d’en-tête
– rappel : toujours en faire un
– dans le fichier d’en-tête, préciser rôles et types des
paramètres d’entrée et de sortie de chaque méthode
• Fichier « corps » :
– Documenter chaque variable d’instance
– Préciser les rôles et paramètres des méthodes privées
– Détailler chaque méthode
• rappeler son fonctionnement global
• préciser ses conditions d’appel
• mentionner le résultat attendu en fonction des
paramètres
• détailler plus finement le code « subtil »
Protection
• Prudence :
Vérifier la validité des paramètres au début de
chaque méthode, et gérer les cas d’erreurs
 Inconvénient : perte en efficacité SI
CRITIQUE
• Adjoindre l’efficacitéprivate :
int methodereelle(int p1, int p2) {
public :
action;
int methode(int p1, int p2) {
return 0;}


if (!cond(p1,p2))
public :
{return 1;}
int methode(int p1, int p2) {
else
if (!cond(p1,p2))
{action;
{return 1;}
return 0;}
else
}
{return methodereelle(p1, p2);}
}
friend class besoinefficace;
Testabilité
• Tests des méthodes
– Pour chaque méthode (importante) adjoindre
une méthode (publique, à moins qu’une classe
« teste » soit déclarée amie) permettant de la
tester sur différents cas de figure si nécessaire
• Test d’une classe
– Ecrire une méthode permettant de tester le
fonctionnement global d’un objet au fur et à
mesure de l’appel à différentes méthodes de la
classe
 permet de vérifier le respect du diagramme d’état
 écriture d’une méthode affichant l’état d’un objet
Consignes générales
• Tester au fur et à mesure
• Simuler si besoin est des fonctions pas
encore implantées
• Dans le cadre d’un processus itératif *:
1. Définir la structure de base
2. Développer et les fonctionnalités essentielles
3. Passer enfin aux fonctions annexes,
progressivement, en remettant éventuellement
en cause certains choix de structuration ou
d ’implantation
*processsus valable notamment pour un TP

Vous aimerez peut-être aussi