Chapitre 3: Implémentation d’un
diagramme de classes UML en Java
Cours Ingénierie Dirigée par les modèles
Niveau: II3 ILSI
Enseignante: Rim DRIRA
[Link]@[Link]
Bureau 215
AU: 2016/2017
Plan
Partie1: Rappel UML: L’essentiel sur la modélisation
des classes et objets
Le diagramme de classes
La classe
L’association
Spécialisation/Généralisation
Le digramme d’objets
Partie2: Implémentation en Java
Traduction des classes
Traduction des attributs
Traduction des méthodes
Traduction des associations
2 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Partie1: Rappel UML:
L’essentiel sur la
modélisation des classes et
objets
3
Définition
Un diagramme de classes:
Décrit la structure interne d’un système, sous
forme de classes (attributs + méthodes) et de
relations entre classes (associations).
Ne montre pas comment utiliser les méthodes =
description statique.
4 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
La classe 1/5
Définition
Décrit un ensemble d’objets (instances de la classe).
Décrit leurs propriétés communes (attributs, méthodes,
relations).
Classe = Type + Module
Type : « fabrique » d’instances (objets) ayant les mêmes
propriétés et les mêmes comportements
Module : interface visible + implémentation cachée
Utilisation possible sans connaître l’implémentation;
Si l’implémentation change sans nécessiter la modification de
l’interface alors le système n’a pas à être modifié.
5 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
La classe 2/5
Représentation simplifiée
La représentation simplifiée d’une classe est
constituée de trois parties
Partie1: contient le nom de la classe NomClasse
Partie2: contient les attributs nomAttribut1
Les attributs contiennent l’information portée par les nomAttribut2
objets instanciés à partir de la classe nomMéthode1()
L’ensemble des attributs forme la structure de ces nomMéthode2()
objets
Partie3: contient les méthodes qui:
Correspondent aux services offerts par ces objets
Peuvent modifier la valeur des attributs
L’ensemble des méthodes forme le comportement de
l’objet
6 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
La classe 3/5 NomClasse
nomAttribut1
nomAttribut2
nomMéthode1()
nomMéthode2()
Remarques:
Le nom d’une classe doit être au singulier, chaque mot composant le
nom commence par majuscule.
Le nom d’un attribut ou d’une méthode commence par minuscule. S’il
est composé de plusieurs mots, à part le premier mot, les autres
commencent par majuscule.
Le nombre d’attributs et de méthodes est variable.
7 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
La classe 4/5
Représentation complète
NomClasse
IndicateurVisibilité nomAttribut1 : typeAttribut = valeurParDéfaut
IndicateurVisibilité nomAttribut2 : typeAttribut = valeurParDéfaut
[Link]. nomMéthode1(param1: typeParam= valeurDefaut, param2….): typeRetour
[Link]. nomMéthode2(param1: typeParam= valeurDefaut, param2….): typeRetour
Signature d’une méthode
Indicateurs de visibilité des attributs et méthodes (liée à l’Encapsulation):
+: public (visible par tous)
- : privé (visible dans la classe uniquement)
#: protégé (visible dans la classe et ses sous classes)
~: paquetage (visible dans les classes du même paquetage)
Types des attributs, des paramètres des méthodes et des types de retour: Integer, String,
Boolean, Real, etc.
8 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
La classe 5/5
Représentation complète
Attributs et méthodes de classe : soulignées
Attributs calculés : précédé par "/"
Valeurs par défaut
La valeur par défaut d’un attribut est celle qui lui sera attribuée dès la création d’un
nouvel objet
La valeur par défaut d’un paramètre d’une méthode est utilisée lorsque l’appelant ne
fournit pas la valeur de ce paramètre
Il est possible de choisir une représentation intermédiaire entre
la représentation simplifiée et la représentation complète.
9 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Exemple
Date
- jour : int
- mois : int
- annee : int Attribut calculé
- / noJourDansAnnee : int
- nomDesMois[12] : String={"janvier","février"...}
+ getJour() : int Attribut de classe
…
+ getFormatEtendu() : String
…
+ getNomMois(in i : int) : String Méthode de classe
10 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
L’association
Exprime un lien entre classes.
Le concept de rôle caractérise les extrémités.
Les multiplicités (cardinalités) caractérisent le nombre d’instances
des classes impliquées dans l’association.
Exemple:
Université Personne
nomPers
nom Employeur Employé Prenom
adresse numSecurite
0..1 Emploie > *
Nom de rôle
Nom d’association + sens
11 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
L’association
Multiplicités :
1 un et un seul M..N de M à N (entiers naturels)
1..* de un à plusieurs * de 0 à plusieurs
0..1 zéro ou un N N fois
Les multiplicités sont placées du côté de la destination:
Une Université emploie plusieurs Personnes : le symbole * est placé
du côté Personne.
A une Personne est associé zéro ou une Université (avec le rôle
Employeur) : le symbole 0..1 est placé du côté Université.
Université Emploie > Personne
0..1 *
Employeur Employé
12 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
L’association
Navigabilité et implémentation :
Exemple1:
Point Polygone
* *
< défini par
On trouvera dans Polygone un attribut correspondant à une collection de
Points (tableau, ArrayList… en Java) et dans Point une collection de
Polygones.
Exemple2:
Point Polygone
* *
< défini par
Ici le sens de parcours est limité à Polygone vers Point. Alors, l’association
ne sera implémentée que par une collection de points dans la classe
Polygone.
13 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Associations spécialisées
L’agrégation est une association qui décrit une relation d’inclusion
entre un tout (l’agrégat) et ses parties.
Représentée par un losange vide.
Durée de vie des classes indépendantes
La composition est une association qui exprime que des composants
sont une partie de l’objet composé.
Représentée par un losange plein du côté du composé
Durée de vie des classes composées dépend du composant
Voiture Composé Circuit-bus
toujours 1
1..*
* 1 1 Composants 1..*
Roue Moteur Carrosserie Arrêt-bus
14 [Link] ENSI-II3 ILSI Agrégation
Chapitre3: Implémentation UML en Java 2016-2017
Composition
Associations spécialisées
Différences entre composition et agrégation
Agrégation Composition
Représentation Losange transparent Losange noir
Partage des oui non
composants par
plusieurs
associations
Destruction des non oui
objets lors de la
destruction du
composé
Cardinalité au quelconque 0..1 ou 1
niveau du composé
15 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Classe-Association
• Association porteuse d’attributs et/ou de méthodes,
représentée comme une classe associée à l’association.
Etudiant Matière
Suit >
0..* 1..*
Notation
note
16 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Généralisation/Spécialisation entre classes
Généralisation : factorisation des éléments communs de classes
(attributs, méthodes).
Spécialisation : adapter une classe générale à un cas particulier.
Favorisent la réutilisation.
Signifie toujours : est un ou est une sorte de
classe plus
Super-classe générale
généralisation
spécialisation
classe plus
Sous-classe spécialisée
Ceci est un commentaire UML
17 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Généralisation/Spécialisation entre classes
Exemple:
Véhicule Aéroplane
Héritage Multiple
Véhicule terrestre Véhicule aérien
Voiture Camion Avion Hélicoptère
18 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Diagramme d’objets
Le diagramme des classes est une représentation statique du
système
Le diagramme d’objets montre, à un instant donné, les
instances (objets) crées et leurs liens lorsque le système est
actif
Chaque objet est représentée dans un rectangle qui contient son nom
en style souligné et éventuellement, la valeur d’un ou de plusieurs
attributs.
Le nom d’un objet est de la forme: nomObjet:classe
La valeur d’un attribut est de la forme: nomAttribut=valeurAttribut
Les liens entre les objets (occurrences des associations) sont
représentés par de simples traits continus.
19 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Diagramme d’objets
Exemple:
Université Personne
Employeur Employé
0..1 Emploie > *
Diagramme de classes
Aicha :
Personne
un lien instance
Université De de Emploie Karim :
Manouba: Personne
Université
Diagramme d’objets
20 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Partie2: Implémentation en
Java
21
Traduction d’une classe
Chaque classe UML devient par défaut un fichier .java.
Exemple:
class Personne{
…
Personne
…
….
}
22 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Traduction d’une classe
Une classe abstraite est simplement une classe qui ne
s’instancie pas directement mais qui représente une pure
abstraction afin de factoriser des propriétés.
Elle se note avec « abstract » en UML et se traduit par le
mot-clé abstract en Java.
Exemple:
abstract class Personne{
….
….
}
23 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Traduction d’une classe
Une interface est une classe spéciale dont toutes les méthodes
sont abstraites
En java, elle est traduite par le mot clé ‘interface’
Pour implémenter une interface, on utilise ‘implements’
Exemple:
interface Forme {
…
Forme …
…
}
class Rectangle implements Forme{
…
24 [Link]
}
ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Traduction des attributs
Les attributs UML deviennent simplement des attributs en
Java
Leur type est soit un type primitif (int, etc.), soit une classe.
La visibilité des attributs:
+ pour public, public en Java
# pour protégé, protected en Java
- pour privé, private en Java.
Les attributs de classe en UML deviennent des membres
statiques en Java (static).
25 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Traduction des méthodes
Les méthodes UML deviennent directement des méthodes
en Java.
Leur visibilité est définie avec les mêmes conventions que les
attributs.
Les opérations de classe deviennent des méthodes statiques
(static).
Les opérations abstraites (en italiques) se traduisent par le
mot-clé abstract en Java.
26 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Exemple 1
public class A {
public String a1;
private String a2;
protected String a3;
private String a4;
public void op1() { ... }
public void op2() { ... }
}
27 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Exemple2
class Personne {
private int code;
private String nom;
private static int nombre;
public Personne() {
}
public static int getNombre(){
}
public String getInf(){
}
}
28 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Traduction des associations (la
généralisation)
La généralisation en UML se traduit directement par le
mécanisme de l’héritage.
Remarque: Java, contrairement à C++ interdit l’héritage
multiple entre classes.
Exemple:
Class Personne{
Personne
…}
Class Employe extends
Personne{
Employe
…
}
29 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Traduction des associations
La traduction d’une association navigable dépend de la
multiplicité de l’extrémité concernée (pointée par la
flèche):
Une multiplicité 1 se traduit par une variable d’instance de
type référence vers une instance de classe.
Une multiplicité « * » va se traduire par un attribut de type
collection de références d’objets au lieu d’une simple
référence sur un objet.
30 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Traduction des associations
Exemple
31 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Traduction des associations
Une association bidirectionnelle se traduit simplement par
une paire de références, une dans chaque classe impliquée
dans l’association.
Les noms des rôles aux extrémités d’une association servent
à nommer les variables de type référence.
32 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Exemple1
public class A {
private B rb;
…
} public class B
{ ... // La classe B ne
connaît pas l'existence de la
classe A }
33 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Exemple2
public class A {
Private B [] rb;
……}
public class B {
private A ra;
…}
34 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Exemple3
35 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Traduction des agrégations et des
compositions
Les agrégations s'implémentent comme les associations.
Une composition peut s'implémenter comme une association
unidirectionnelle.
36 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Traduction de la classe-association
Elle possède les caractéristiques d’une association et d’une
classe et peut donc porter des attributs qui se valorisent
pour chaque lien.
Elle est traduite en la transformant en classe normale, et en
ajoutant des variables de type référence.
37 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Traduction de la classe-association
Exemple
38 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Exercices
39
Étude de cas : Diag. de classes
Soit le cas ’’Réservation de vols dans une agence de voyage’’:
1. Des compagnies aériennes proposent différents vols.
2. Un vol est ouvert à la réservation et fermé sur ordre de la compagnie.
3. Un client peut réserver un ou plusieurs vols, pour des passagers différents.
4. Une réservation concerne un seul vol, et un seul passager.
5. Une réservation peut être annulée ou confirmée.
6. Un vol a un aéroport de départ et un aéroport d’arrivée.
7. Un vol a un jour et une heure de départ et un jour et une heure d’arrivée.
8. Un vol peut comporter des escales dans des aéroports
9. Une escale a une heure d’arrivée et une heure de départ.
10. Chaque aéroport dessert une ou plusieurs villes
40 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Corrigé
Modélisation de la phrase
1° Des compagnies aériennes proposent différents vols.
CompagnieAerienne et Vols sont 2 objets métiers : 2 classes
CompagnieAerinne Vol
• Un vol peut être réalisé par une ou plusieurs compagnies
• Une compagnie propose une ou plusieurs vols
CompagnieAerinne Vol
1..* propose 1..*
41 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017
Corrigé
Modélisation de la phrase :
2° Un vol est ouvert à la réservation et fermé sur ordre de la compagnie.
Un vol possède un état: ouvert ou fermé
Dans un diagramme de classes tout concept dynamique est modélisé en méthode.
Il faut représenter la 2° phrase par 2 méthodes : ouvrirVol( ) et fermerVol( )
Les méthodes sont déclarées dans l’objet dans lequel elles doivent s’exécuter
Les autres pourront déclencher ces méthodes par envoi de messages
CompagnieAerinne Propose Vol
1..* 1..*
état (ouvert, fermé)
ouvrirVol( )
fermerVol( )
42
Corrigé
Modélisation des phrases :
3° Un client peut réserver un ou plusieurs vols, pour des passagers différents.
Il faut discerner un client d’un passager
Réservation
Client Vol
1 effectue * concerne
état (ouvert, fermé)
* ouvrirVol( )
fermerVol( )
*
concerne
Passager
43
Corrigé
Modélisation des phrases :
4° Une réservation concerne un seul vol, et un seul passager.
Réservation
Client concerne Vol
1 effectue *
état (ouvert, fermé)
* 1 ouvrirVol( )
fermerVol( )
*
concerne
1
Passager
44
Corrigé
Modélisation des phrases :
5° Une réservation peut être annulée ou confirmée.
Se traduit par l’ajout d’un attribut état et de 2 méthodes annuler( ) et confirmer( ) dans
‘’Reservation’’.
Réservation
étatR (annulée, confirmée)
annuler( )
confirmer( )
45
Corrigé
Modélisation des phrases :
7° Un vol a un jour et une heure de départ et un jour et une heure d’arrivée.
Les dates et les heures de départ et d’arrivée ne représentent que des valeurs : attributs.
CompagnieAerinne propose Vol
1..* 1..*
état
dateDepart
heureDepart
dateArrivee
heureArrivee
ouvrirVol( )
fermerVol( )
Pour savoir si un élément doit être représenté en attribut ou en objet :
S’il n’ y a que sa valeur qui est intéressante : c’est plutôt un attribut.
Si plusieurs questions peuvent concerner l’élément, alors il faut le représenter en objet.
46
Corrigé
Modélisation des phrases :
6° Un vol a un aéroport de départ et un aéroport d’arrivée.
Par quoi peut-on représenter l’élément ‘’Aéroport’’ ?
3 réponses sont envisageables :
1. Soit avec 2 classes
Vols
dateDepart 1 AeroportDepart
heureDepart
dateArrivee Aéroport
heureArrivee
nom
état 1 AeroportArrivee
ouvrirReservation( )
fermerReservation( )
Modélisation non correcte. Tout aéroport peut être de départ et d’arrivée.
47
Corrigé
Modélisation des phrases :
6° Un vol a un aéroport de départ et un aéroport d’arrivée.
2. Soit avec une classe et une association de multiplicité 2
Vol
dateDepart Aéroport
heureDepart 2
dateArrivee nom
heureArrivee
état
ouvrirVol( )
fermerVol( )
Modélisation peu parlante.
48
Corrigé
Modélisation des phrases :
6° Un vol a un aéroport de départ et un aéroport d’arrivée.
3. Soit avec 2 associations
Vol
dateDepart * Départ
heureDepart Aéroport
dateArrivee 1 Nom
heureArrivee …
état Arrivée
*
1
ouvrirVol( )
fermerVol( )
Le rôle de chaque association précise son sens.
49
Corrigé
Modélisation des phrases :
10° Chaque aéroport dessert une ou plusieurs villes
On ne peut pas savoir la multiplicité de ‘’Aéroport’’
Si on considère que desservir une ville signifie l’aéroport le plus proche, il n’ en y a qu’un :
la multiplicité est de 1
Si on considère que desservir une ville signifie les aéroports dans un rayon de 35 km :
la multiplicité est de 0..*
Aéroport dessert Ville
1..*
*
50
Corrigé
Modélisation des phrases :
8° Un vol peut comporter des escales dans des aéroports
9° Une escale a une heure d’arrivée et une heure de départ.
Une escale a les propriétés heure d’arrivée et heure de départ, c’est donc un objet.
Vol
état dateDepart Depart Aéroport
heureDepart
dateArrivee * 1 nom
heureArrivee
Arrivee
ouvrirVol( )
fermerVol( ) * 1
1
1..*
Escale
heureArrivee
heureDepart
* *
51
Corrigé
Modélisation des phrases :
8° Un vol peut comporter des escales dans des aéroports
9° Une escale a une heure d’arrivée et une heure de départ.
‘’Escale’’ a peu d’informations propres.
On peut aussi la modéliser comme une classe d’association entre et ’Vols’’ et ‘’Aéroport’’.
Vol Départ
état dateDepart Aéroport
heureDepart * 1
dateArrivee Arrivée nom
heureArrivee
* 1
ouvrirVol( )
fermerVol( ) Escale
* *
InfosEscale
heureArrivee
heureDepart
52
Corrigé
Client
nom Prénom CompagnieAerinne
adresse nom
téléphone
e-mail
1 propose Diagramme de classes complet
effectue
* 1..*
départ
Réservation Vol Aéroport
état * 1
date concerne dateDepart nom
numéro arrivée
état heureDepart
* 1 dateArrivee
Annuler( ) heureArrivee * 1
Confirmer( )
ouvrirVol( ) escale
* fermerVol( )
* *
concerne
*
dessert
1
InfosEscale 1..*
Passager heureArrivee Ville
nom Prénom heureDepart
nom
53
Exercice
1. Implémenter le diagramme en Java
2. Rendre la navigation entre Banque et
Personne unidirectionnelle (de
Banque vers Personne). De même
pour la navigation entre Personne et
Compte (de Personne vers Compte).
Modifier le code Java de (1)
54 [Link] ENSI-II3 ILSI Chapitre3: Implémentation UML en Java 2016-2017