Diagrammes de classes Conception

Download Report

Transcript Diagrammes de classes Conception

Polytech Paris-Sud
Formation initiale 3e année
Spécialité Informatique
Année 2013-2014
UML
Diagrammes de classes
Conception
Delphine Longuet
[email protected]
Notations avancées
Attributs et opérations de classes
●
Attribut de classe : valeur commune à toutes les instances
●
Opération de classe : opération sur la classe elle-même
(création de nouvelles instances par exemple)
●
Soulignés dans la classe
Article
- référence : int
- prixHT : float
- nbInstances : int
+ calculerPrixTTC(taxe : float) : float
+ créer()
+ compterInstances() : int
D. Longuet - UML
2
Notations avancées
Visibilité
+ : public, accessible à toutes les classes
# : protégé, accessible uniquement aux sous-classes
- : privé, inaccessible à tout objet hors de la classe
Pas de visibilité par défaut
Vecteur
- début : Point
- /fin : Point
- longueur : float
- angle : float
# ajouter(v : Vecteur) : Vecteur
+ déplace(p : Point)
D. Longuet - UML
3
Attribut dérivé
Peut être calculé à tout moment à partir d'autres informations du
système
●
Notation : /attribut
●
Peut nécessiter des informations de plusieurs classes
Vecteur
attribut dérivé
D. Longuet - UML
- début : Point
- /fin : Point
- longueur : float
- angle : float
# ajouter(v : Vecteur) : Vecteur
+ déplace(p : Point)
fin =
(longueur*cos(angle),
longueur*sin(angle))
4
Association dérivée
Redondance d'une association : Association n'apportant pas
d'information supplémentaire, se demander si nécessaire
Banque
nom : string
1..* banques
1
banque
1..*
comptes
Compte
numéro : int
devise : Devise
solde : float
1..*
comptes
1
propriétaire
Client
nom : string
naissance : Date
1..* clients
ClientsBanque
D. Longuet - UML
5
Association dérivée
Redondance d'une association : Association n'apportant pas
d'information supplémentaire, se demander si nécessaire
Si nécessaire, la faire apparaître comme association dérivée
Association dérivée : Peut être calculée à tout moment à partir
d'autres informations du système
Notation : /association
1..*
1
Banque
banque
nom : string
comptes
1..* banques
Compte
numéro : int
devise : Devise
solde : float
1..*
comptes
1
propriétaire
Client
nom : string
naissance : Date
1..* clients
/ClientsBanque
association dérivée
D. Longuet - UML
6
Limites du diagramme de classes
Diagramme de classes représente la structure du système en termes
d'objets et de relations entre ces objets
Ne permet pas de représenter :
●
Valeurs autorisées des attributs
●
Conditions sur les associations
●
Relations entre les attributs ou entre les associations
Expression des contraintes liées au diagramme :
●
Notes dans le diagramme
●
Texte accompagnant le diagramme
●
OCL : langage de contraintes formel associé à UML
D. Longuet - UML
7
Contraintes, invariants
Propriétés :
●
Portant sur les éléments du modèle
●
Doivent être vérifiées à tout instant
●
En général, restriction sur les diagrammes d'objets possibles à
partir du diagramme de classes
●
Héritage des contraintes de la super-classe vers les sous-classes
D. Longuet - UML
8
Contraintes sur les attributs
{age = diff(naissance,today)}
{naissance ≤ today}
sous forme de note
Personne
nom : string
naissance : Date
/age : int
{age ≥ 0}
dans le diagramme
D. Longuet - UML
Contraintes sur la classe Personne :
●
L'âge est toujours positif
●
L'âge est calculé comme la
différence de la date de
naissance et la date
d'aujourd'hui
●
La date de naissance est
inférieure ou égale à la date
d'aujourd'hui
dans un document annexe
9
Contraintes associées à la multiplicité
Commande
numero : int
total : float
date : Date
2 parents
Pizza
*
1..*{bag} id : int
nom : string
prix : float
multi-ensemble
non ordonné
Personne
nom : string
enfants
prenom : string
*{ordered set}
naissance : Date
ensemble
ordonné
PolygoneRempli
1
Compte
1..*{sequence}
Point
abscisse : float
ordonnée : float
D. Longuet - UML
multi-ensemble
ordonné
numero : int
devise : Devise
solde : float
Personne
*{set}
1..* nom : string
prenom : string
naissance : Date
ensemble
non ordonné
10
Contraintes sur les associations
Salle
nom : string
capacité : int
contrainte sur
une association
1
1..*
Place
numéro : int
nombre de places associées à
une salle = capacité
Personne
subordonné nom : string
1..* prénom : string
naissance : Date
1..*
employés
Entreprise
0..1
employeur nom : string
0..1 chef
{pour toute Personne p,
p.employeur = p.chef.employeur}
D. Longuet - UML
contrainte portant sur
plusieurs associations
11
Contraintes, invariants
{age = diff(naissance,today)}
Personne
nom : string
naissance : Date
/age : int
{age ≥ 0}
1
*
appartient
{subset}
1
administre
●
* {ordered set}
ExpériencesPro
entreprise : string
entrée : Date
sortie : Date
●
●
●
D. Longuet - UML
*
*
Groupe
thème : string
création : Date
L'âge est toujours positif
L'âge est calculé comme la différence
entre la date de naissance et la date
d'aujourd'hui
L'administrateur d'un groupe en est
membre
On a accès aux expériences
professionnelles dans l'ordre
de la date d'entrée
12
Contraintes en OCL
Banque
nom : string
1..*
1
banque
banques
1..* clients
Client
nom : string
naissance : Date
1..* comptes
Compte
1
propriétaire
comptes numéro : int
devise : Devise
1..*
solde : float
dest
1
1
orig
Virement
montant : float
0..* date : Date
0..*
Tout propriétaire d’un compte est client de la banque hébergeant ce compte.
context c : Compte
inv : c.banque.clients -> include(c.propriétaire)
Tout client d’une banque y possède au moins un compte.
context b : Banque
inv : b.clients -> forAll(cl | cl.comptes
-> select(c | c.banque = b) -> size() >= 1)
Les virements ne sont autorisés qu'entre des comptes partageant la même devise.
context v : Virement
inv : v.orig.devise = v.dest.devise
D. Longuet - UML
13
Évolution d'un diagramme de classes
Phase d'analyse :
●
Seulement attributs, pas d'opérations
●
Types de données simples
●
Pas d'informations de visibilité des attributs
Phase de conception :
●
Opérations avec leurs profils
●
Attributs plus détaillés (visibilité, dérivation, décomposition...)
●
Élimination des associations
À la fin de la conception, il n'y a plus de diagramme de classes mais
en ensemble de classes avec attributs et méthodes
D. Longuet - UML
14
Activités à la conception
Concernant le diagramme de classes
●
Éliminer les associations
●
Choisir entre attributs explicites et attributs calculés
●
Affiner la description des attributs
●
Introduire des classes auxiliaires (interfaces, classes de contrôle)
Concernant les cas d'utilisation et les opérations
●
Décrire la réalisation des cas d'utilisation
●
Spécifier le comportement des opérations
D. Longuet - UML
15
Éliminer les associations
En suivant les navigations, transformer chaque rôle en un attribut, une
opération, une classe...
Compte
numero : int
devise : Devise
solde : float
Compte
numero : int
devise : Devise
solde : float
propriétaire : Client
D. Longuet - UML
Client
1..*
sesComptes
association
transformée
en attribut
1 nom : string
propriétaire prenom : string
naissance : Date
Client
nom : string
prenom : string
naissance : Date
16
Éliminer les associations
En suivant les navigations, transformer chaque rôle en un attribut, une
opération, une classe...
Compte
numero : int
devise : Devise
solde : float
Compte
numero : int
devise : Devise
solde : float
propriétaire : Client
D. Longuet - UML
Client
1..*
sesComptes
association
transformée
en attribut
1 nom : string
propriétaire prenom : string
naissance : Date
Client
nom : string
prenom : string
naissance : Date
sesComptes : Collection(Compte)
Collection : mot générique pour
bag, set, ordered set et sequence
17
Éliminer les associations
En suivant les navigations, transformer chaque rôle en un attribut, une
opération, une classe...
Compte
numero : int
devise : Devise
solde : float
Client
1..*
sesComptes
Si attribut trop lourd à maintenir
ou peu utilisé, association peut
devenir une opération
D. Longuet - UML
1 nom : string
propriétaire prenom : string
naissance : Date
Client
nom : string
prenom : string
naissance : Date
sesComptes() : Collection(Compte)
18
Éliminer les associations
En suivant les navigations, transformer chaque rôle en un attribut, une
opération, une classe...
Citerne
type : Carburant
prixLitre : float
3
citernes
Station
1
station ouvert : boolean
Attention à l'évolutivité
Station
Station
ouvert : boolean
citerne1 : Citerne
citerne2 : Citerne
citerne3 : Citerne
D. Longuet - UML
mais plutôt
ouvert : boolean
citernes : Collection(Citerne)
19
Raffinement des attributs
Attribut dérivé : remplacer par une opération le calculant (ou par un
attribut non calculé, mais attention à le mettre à jour)
Vecteur
début : Point
/fin : Point
longueur : float
angle : float
Vecteur
opération calculant
l'extrémité d'un
vecteur
Décomposition d'un attribut en plusieurs :
Client
nom : string
prenom : string
adresse : string
D. Longuet - UML
décomposition
de l'attribut adresse
début : Point
longueur : float
angle : float
fin() : Point
Client
nom : string
prenom : string
numeroRue : int
nomRue : string
ville : string
codePostal : int
20
Réalisation des cas d'utilisation
Objectif : Décrire la réalisation des cas d'utilisation sur le système
décrit par le diagramme de classes
●
Point de vue interne sur le fonctionnement du système
●
Description au niveau de l'instance (état du système à un
instant)
●
Description de scénarios particuliers
●
Représentation des échanges de messages
●
Entre les acteurs et le système, entre les objets du système
●
De façon chronologique
D. Longuet - UML
21
Diagrammes de séquence
Éléments du diagramme de séquence
●
Acteurs
●
Objets (instances)
●
Messages (cas d'utilisation, appels d’opération)
Principes de base : Représentation graphique de la chronologie des
échanges de messages avec le système ou au sein du système
●
« Vie » de chaque entité représentée verticalement
●
Échanges de messages représentés horizontalement
D. Longuet - UML
22
Utilisation en phase de conception
Classe1
Utiliser
Acteur
Classe2
Système
Diagramme de cas d'utilisation
Diagramme de classes du système
Objectif : Description de la réalisation d'un cas d'utilisation sur le
système décrit par le diagramme de classes
Problème : Communication entre les acteurs et le système vu comme
un ensemble d'objets
D. Longuet - UML
23
Utilisation en phase de conception
Classe1
Utiliser
Acteur
Système
Diagramme de cas d'utilisation
Acteur
Classe2
interface
Diagramme de classes du système
Classe1
Classe2
Communication entre acteurs et système via une interface (texte, web,
physique...)
D. Longuet - UML
24
Utilisation en phase de conception
Classe1
Utiliser
Acteur
Système
Diagramme de cas d'utilisation
Acteur
Classe2
InterfaceSystème
Diagramme de classes du système
Classe1
Classe2
Communication entre acteurs et système via une interface (texte, web,
physique...)
Solution : Création d'une (ou plusieurs) classe d'interface qui :
●
gère les interactions avec les acteurs
●
encapsule le résultat des opérations
D. Longuet - UML
25
Utilisation en phase de conception
Classe1
Utiliser
Acteur
Système
Diagramme de cas d'utilisation
: Acteur
Diagramme de classes
: InterfaceSystème
utiliser()
objet1 : Classe1
opération(args)
affichage
Classe2()
objet2
retour
D. Longuet - UML
Classe2
objet2 : Classe2
détruire()
Diagramme de séquence du cas d'utilisation Utiliser
26
Exemple – Analyse
Employé
Effectuer un
virement personnel
Système de gestion bancaire
SGB
Employé
effectuerVirementP(id,noC1,noC2,mnt)
OK
D. Longuet - UML
27
Exemple - Conception
Banque
1
nom : string
Employé
Effectuer un
virement personnel
1..*
1..*
Système de gestion bancaire
1..*
Client
nom : string
naissance : Date
Compte
numéro : int
devise : Devise
solde : float
1
1
Virement
montant : float
0..* date : Date
0..*
1..*
1
SGB
Employé
effectuerVirementP(id,noC1,noC2,mnt)
OK
D. Longuet - UML
28
Exemple - Conception
Banque
1
nom : string
Employé
Effectuer un
virement personnel
1..*
1..*
Système de gestion bancaire
Compte
1..*
Client
nom : string
naissance : Date
: SGB
: Employé
numéro : int
devise : Devise
solde : float
1
1
Virement
montant : float
0..* date : Date
0..*
1..*
1
Client
effectuerVirementP(id,noC1,noC2,mnt)
ref chercher client
ref
chercher comptes
ref
créer virement
ref
OK
D. Longuet - UML
c : Client
v : Virement
effectuer virement
29
Exemple - Conception
: SGB
: Employé
effectuerVirementP(id,noC1,noC2,mnt)
Client
chercher(id)
client
compte(noC1)
c1
compte(noC2)
c2
client : Client
Virement(c1,c2,mnt)
virement
effectuer()
virement : Virement
retirer(mnt)
c1 : Compte
OK
déposer(mnt)
OK
D. Longuet - UML
OK
c2 : Compte
OK
30
Exemple - Conception
Diagramme de classes complété avec les opérations nécessaires
Banque
1
nom : string
1..*
1..*
Compte
numéro : int
devise : Devise
solde : float
1..*
Client
nom : string
naissance : Date
chercher(id : int) : Client
compte(no : int) : Compte
D. Longuet - UML
déposer(mnt : float) : bool
retirer(mnt : float) : bool
1
0..*
1
0..*
Virement
montant : float
date : Date
effectuer() : bool
1..*
1
31
Classes supplémentaires à la conception
Introduction de classes plus générales :
●
●
Classe d'interface (InterfaceSystème) : encapsulation des classes
interfaces (clavier, écran…)
Classes de contrôle : autres classes nécessaires pour encapsuler
les classes métiers (modèle : Compte, Client…)
Intérêt :
●
Échanges entre InterfaceSystème et les classes de contrôle
uniquement
●
Changement d’interface simplifié (aucun changement des
classes du modèle)
D. Longuet - UML
32