EST Laâyoune
Chapitre III : Diagramme de Classe
I- Introduction
Le diagramme de classe permet de représenter l’ensemble des informations
qui sont gérées par le SI. Ces informations sont structurées, c’est-à-dire
qu’elles ont regroupées dans des classes.
Le diagramme de classes exprime la structure statique du système en termes
de classes et de relations entre ces classes.
L’intérêt du diagramme de classe est de modéliser les entités du système
d’information.
Le diagramme de classes comporte 5 concepts :
o Classe
o Attribut
o Identifiant
o Opération (Méthode)
o Relation
▪ Association
▪ Généralisation/Spécialisation
▪ Agrégation
▪ Composition
II- Les Composants :
A- La classe
Une classe est une description abstraite d’un ensemble d’objets du
domaine de l’application.
Classe = regroupement d'objets similaires
Toutes les instances d'une classe ont les mêmes attributs et opérations
Représentation : les classes sont représentées par des rectangles
compartimentés :
le 1er compartiment représente le nom de la classe
le 2ème compartiment représente les attributs de la
classe
le 3ème compartiment représente les opérations
11
EST Laâyoune
(Méthodes) de la classe.
B- L’attribut
Une classe correspond à un concept global d’information et se compose d’un
ensemble d’informations élémentaires, appelées attributs de classe.
Un attribut représente la modélisation d’une information élémentaire
représentée par son nom et son format.
➢ Visibilité et portée des attributs :
UML définit 4 niveaux de visibilité pour les attributs :
1- Public (+) : attributs accessibles et modifiables par
n'importe quelle autre classe du projet
2- Protected (#) : attributs accessibles et modifiables uniquement par les
classes dérivées
3- Private (-) : attributs inaccessibles pour toute autre classe
4- Aucun caractère: attribut visible uniquement dans le paquetage où la
classe est définie.
C- L’identifiant
L’identifiant est un attribut particulier, qui permet de repérer de façon unique
chaque objet, instance de la classe (Clé primaire en MCD).
D- La notion d’opération (Méthode)
La description des opérations peut préciser les paramètres ainsi que le type
de retour.
➢ Visibilité et portée des opérations :
Comme pour les attributs, on retrouve 4 niveaux de visibilité pour les
opérations :
1- public (+) : l’opération est accessibles par n'importe quelle autre classe
du projet
2- protected (#) : l’opération est accessibles uniquement par les classes
dérivées
3- privé (-) : l’opération inaccessibles pour toute autre classe
4- Aucun caractère: opération visible uniquement dans le paquetage où la
classe est définie
Exemple :
12
EST Laâyoune
E- La notion de relation
S’il existe des liens entre objets, cela se traduit nécessairement par des
relations qui existent entre leurs classes respectives.
Il existe plusieurs types de relations entre classes :
o l’association simple
o la généralisation/spécialisation
o l’agrégation
o la composition
1. L’association
Est une relation entre deux classes (binaire) ou plus (n-aire).
Elle permet de décrire les connexions structurelles entre les instances des
classes associées
Chaque association est caractérisée par : Nom, rôle, multiplicité et le
sens de lecture
Nom : forme verbale représente la relation entre les objets de C1 et C2
Sens de lecture de l'association indiqué éventuellement par une flèche
Multiplicité : nombre (ou intervalle de nombres) d'instance(s) que
l'association peut impliquer.
➢ Exactement un : se note 1 ou 1..1
13
EST Laâyoune
➢ Plusieurs : se note * ou 0..*
➢ au moins un : se note 1..*
➢ de un à six : se note 1..6
Le rôle : forme nominale décrivant le statut de la classe dans l'association.
Chaque classe qui participe à l’association joue un rôle.
Exemple : une personne travaille pour une et une seule entreprise.
L'entreprise emploie au moins une personne.
Incidence sur l'implémentation :
La classe Personne avoir un attribut de nom employeur de type Entreprise
La classe Entreprise a un attribut de nom employé de type =collection de
Personne
Formalisme en employant les noms des rôles et leur multiplicité :
Exemple : une personne peut travailler dans une seule entreprise.
L'entreprise emploie plusieurs personnes.
Formalisme en employant le nom de l’association et la multiplicité des rôles:
2. Associations n-aire :
Association entre au moins trois classes
Exemple : un étudiant suit le cours d'un professeur responsable pendant un
semestre. Il peut suivre plusieurs cours d'un même professeur responsable.
▪ Pour une paire (cours, étudiant), il n'existe qu'un professeur.
▪ Pour une paire (étudiant, professeur), il existe plusieurs cours.
14
EST Laâyoune
▪ Pour une paire (cours, professeur), il existe plusieurs étudiants
3. Réflexivité :
Exemple :
Une personne peut être parent d'autres personnes, et enfant d'au plus deux
personnes connues.
Deux personnes peuvent être amies (on considère que l'amitié est
réciproque).
Les associations de parenté et d'amitié sont réflexives : elles associent la
classe Personne avec elle-même
La relation de parenté est asymétrique, donc orientée (si une instance A est
parent d'une instance B, l'inverse ne peut pas être possible simultanément)
La relation d'amitié est symétrique (=non-orientée). Il est inutile de spécifier
des rôles dans ce cas.
4. La classe-association :
Les attributs d’une classe dépendent
fonctionnellement de l’identifiant de la classe.
Parfois, un attribut dépend fonctionnellement
de 2 identifiants, appartenant à 2 classes
différentes.
15
EST Laâyoune
Par exemple, l’attribut « quantité commandée » dépend fonctionnellement
du numéro de commande et du code produit. On va donc placer l’attribut
«quantité commandée » dans l’association « comporter ».
Dans ce cas, l’association est dite « porteuse d’attributs ».
Une association porteuse d’attributs est appelée classe-association.
Une classe-association peut être remplacée par une classe intermédiaire
(attention au changement de multiplicité)
Exemple :
Une personne à travailler dans des entreprises, à des périodes données et
avec un certain salaire.
La classe-association poste est remplacée par une classe Poste
5. Navigabilité :
Par défaut, une association est navigable dans les deux sens
La réduction de la portée de l'association peut être exprimée dans un
modèle pour indiquer que les instances d'une classe ne connaissent pas
les instances d'une autre
16
EST Laâyoune
6. L’agrégation :
Une agrégation représente une association non symétrique dans laquelle une
des extrémités joue un rôle prédominant par rapport à l’autre extrémité.
Elle représente la relation d'inclusion d'un élément dans un ensemble.
Une agrégation dénote une relation d'un ensemble à ses parties. L'ensemble
est l'agrégat et l'élément est l’agrégé.
L’agrégation se représente toujours avec un petit losange du côté de
l’agrégat.
Une instance d'élément agrégé peut être liée à plusieurs instances de la
classe agrégat.
Le cycle de vie de l’élément agrégé n’est pas tributaire de celui de
l’agrégat.
Formalisme et exemple :
Une commande peut comporter de un à plusieurs
articles
Un article est enregistré dans plusieurs commandes
7. La composition
La composition est un cas particulier de l’agrégation. Représente une relation
de type "composé/composant"
La composition est représentée par un losange noir du côté du composé
• Le composant ne peut pas appartenir simultanément à plusieurs
agrégats (multiplicité 1 ou 0..1 côté composé)
Les cycles de vies des composants et du composé sont liés : si le composé
est détruit (ou copié), ses composants sont aussi détruits.
A un même moment, une instance de composant ne peut être liée qu'à un
seul composé
Une instance du composant n'appartient jamais à plus d'une instance de la
classe composite.
Formalisme et exemple :
17
EST Laâyoune
8. La généralisation / spécialisation
❖ Le principe de généralisation / spécialisation
Le principe de généralisation / spécialisation permet d’identifier parmi les
objets d’une classe (générale) des sous-ensembles d’objets (des classes
spécialisées) ayant des définitions spécifiques. La classe plus spécifique
(appelée aussi classe fille, classe dérivée, classe spécialisée) est cohérente
avec la classe plus générale (appelée aussi classe mère, classe générale,
classe parent), c’est-à-dire qu’elle contient par héritage tous les attributs, et
les opérations de la classe générale, et peut contenir d’autres.
Formalisme graphique :
- Exemple :
18
EST Laâyoune
Exercice d’application :
Modéliser les phrases suivantes par un diagramme de classes, notamment
déterminez la relation statique appropriée (généralisation, composition,
agrégation ou association)
1- Un répertoire contient des fichiers.
2- Une pièce a des murs.
3- A l'université, un bâtiment d'enseignement dispose d'un certain nombre de
salles et de chaises. A un instant donné, une chaise est obligatoirement à
l'intérieur d'une salle. Une chaise peut être déplacée dans une autre salle
selon les besoins.
4- Les modems et les claviers sont des périphériques d'entrée/sortie (il en
existe d'autres).
5- Une transaction boursière est un achat ou une vente.
6- Un compte bancaire peut appartenir à une personne physique ou morale.
7- Deux personnes peuvent être mariées.
19
EST Laâyoune
Chapitre 3 : Traduction du diagramme de classe vers Java
Introduction
L’implémentation de certains concepts objet vus:
➢ Définition d'une classe
➢ Encapsulation : public, protected, private
➢ Membres statiques (attributs et méthodes de classe)
➢ Héritage
➢ Méthode abstraite, classe abstraite et interface
➢ Association (binaire/n-aire, classe-association, et navigabilité,
agrégation, composition)
Définition d’une classe
public class Person {
private String firstname;
private String lastname;
private int age;
public String getFirstname() {
return this.firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
// ...
}
Association binaire :
Multiplicité (1 ,1) ou (0..1, 0..1)
L'association, si elle est navigable dans les deux sens, est implémentée par
ajout dans la classe A (resp. B) d'un unique attribut de la classe B (resp. A).
//Classe Femme
Public class Femme {
20
EST Laâyoune
private Homme epoux ;
public Femme ( )
{
}
}
//Classe Homme
public class Home {
private Femme epouse ;
public Homme( )
{
}
}
Multiplicité (0..* , 0..*)
L'association, si elle est navigable dans les deux sens, est implémentée par
ajout dans la classe A (resp. B) d'un attribut correspondant à une "collection"
d'éléments.
Chaque élément représente un lien vers une instance de la classe B (resp. A).
Collection : peut-être implémentée en Java par : Vector, List, ArrayList, Set,
...
public class Etudiant{
private Vector<UE> listUE= new Vector<UE>();
}
Remarque :
L'action d'inscrire un étudiant à une UE ne crée pas de nouvelle instance
d'Etudiant (car l'association n'est pas une relation de composition).
Association avec sens de navigation
Dans cet exemple, la navigation est possible uniquement du polygone vers les
points : un polygone connait les points qui lui servent de sommets, mais un
21
EST Laâyoune
point ne connait pas les polygones dans lesquels il est sommet. Incidence sur
l'implémentation : dans la classe Point, aucun attribut ne fait intervenir la
classe Polygone
public class Polygone {
protected Vector<Point> listP ;
}
public class Point {
public int x , y ;
...
}
Association réflexive :
Exemple : une personne peut être parent d'autres personnes et enfant d'au
plus deux personnes connues.
La relation de parenté est asymétrique : si une instance A est parent d'une
instance B, l'inverse ne peut pas être possible simultanément.
public class Personne
{
protected String nom;
protected Vector<Personne> listEnf = new Vector<Per sonne >() ;
protected Personne parent [ ]= new Personne [ 2 ] ;
}
L’association d’une classe sur elle-même
Il également est possible de définir une association entre une classe et elle-
même.
22
EST Laâyoune
L’association d’une classe sur elle-même (traduction en Java)
public class Personne{
private String nom;
private Personne epoux; // l’association est représentée par la Personne
epoux.
...
}
Agrégation et composition :
Agrégation : Implémentation similaire à une association binaire
Composition :
Inclusion structurelle d'un composant dans un composite
La vie du Composant est liée à celle du Composite : la création (resp.
destruction) du Composite entraîne la création (resp. destruction) de ses
Composants
La composition peut être implémentée par l'ajout d'un attribut de classe
Composant dans la classe Composite et instanciation dans la classe
Composite.
public class Composant{
private Composite comp ;
}
public class Composite {
private Composant tabComposant s [ ] ;
public Composite ( ){
tabComposants = new tabComposants [ n ] ;
for ( int i =0; i<n ; i++)
tabComposant s [ i ] = new Composant ( ) ;
23
EST Laâyoune
}
}
Classe-association
Implémentation de la classe-association par ajout d'une classe
Association + Agrégation :
Il est possible de combiner l’association et l’agrégation.
public class Personne
{
private String nom;
private Personne epoux;// l’association est représentée par la Personne Epoux
}
public class ListeClients
{
private Vector<Personne> laListe= new Vector<Personne>();
// l’agrégation est représentée par le vecteur laListe
}
L’héritage
La relation d’héritage indique que la "sous-classe" (classe fille) est une
spécification de la "super-classe" (classe mère).
La classe fille hérite de tous les attributs et méthodes de la classe mère.
Elle est représentée par un trait reliant les deux classes et dont l’origine
(classe mère) se distingue de l’autre extrémité (classe fille) par un triangle.
24
EST Laâyoune
public class Voiture extends Vehicule{ // l’heritage est représenté par le mot
clé extends
...
}
public class Bateau extends Vehicule{
...
}
public class Train extends Vehicule{
...
}
public class Velo extends Vehicule{
...
}
Association + Héritage
Il est possible de mixer association et héritage.
public class Personne {
protected String nom;
... }
public class Cours{
... }
public class Etudiant extends Personne{
private Vector<Cours> lesCours= new Vector<Cours>();
// l’association est représentée par le vecteur lesCours
}
public class Enseignant extends Personne{
private Vector<Cours> lesCours= new Vector<Cours>();
25
EST Laâyoune
// l’association est représentée par le vecteur lesCours
}
Exercice d’application
Implanter ce diagramme en Java
26
EST Laâyoune
public class Personne
{
private String nom;
private Vector<Radio> radios;
private Vector<Voiture> voitures;
public Personne( String nom ){
this.nom = nom;
voitures = new Vector();}
}
public class Voiture
{
private String modele;
private Radio radio = null; // l’agregation est representee par le Radio radio
}
public class Radio
{
private boolean installe; // l’agregation est representee par le boolean installe
}
public class Client{
public static void main ( String[] args ){
Personne personne = new Personne( "Ledoux" );
Voiture voiture = new Voiture( "Renault" );
Radio radio = new Radio();
}
}
27