Chapitre 4-2021
Chapitre 4-2021
Chapitre 4-2021
Diagramme de classes
1
1. Introduction
2
Les composants de cette vue statique sont :
Les classes :
- Attributs et méthodes
Les relations :
3
2. Notion de classe
2. 1. Classe et instance de classe
Une instance est une concrétisation d’une notion abstraite dite
Classe
La BMW est une instance du concept abstrait Voiture
Salah est une instance du concept abstrait Etudiant
4
Une classe est donc une notion abstraite représentant des
informations variées telles que :
Information concrète : Voiture, Etudiant
Information abstraite : Services, Commandes, Réservations
Information comportementale : Tâche, Fonction
5
Une classe est l’abstraction d’un ensemble d’objets ayant une des
caractéristiques communes
C’est une entité ayant une identité (nom), un état (valeurs des attributs) et
d’un comportement (régi par les méthodes)
6
2. 2. Caractéristique d’une classe
7
2.3. Structure d’une classe
Nom de la classe
8
Nom de la classe
9
La syntaxe est :
10
Listes des attributs
11
La syntaxe est :
[{<contrainte>}] ] [ = <valeur_par_défaut> ]
12
Type :
Multiplicité :
Contrainte :
13
Chaque objet, instancié de la classe, possède sa propre copie des
attributs de la classe
Pour indiquer qu’un attribut garde une valeur unique pour toutes les
instances de la classe (attribut de classe), il fallait souligner son nom
14
Les méthodes de la classe :
Au sein d’une même classe, une méthode doit être unique (pas de plusieurs
méthodes ayant le même nom et les même types et nombres de paramètres)
Au sein d’une même classe, on peut avoir des méthodes surchargées (même
nom et différents paramètres)
15
La syntaxe est :
[<type_renvoyé>] [{<propriétés>}]
16
Pour définir un paramètre, il fallait utiliser la syntaxe suivante :
17
Comme le cas des attributs, il est possible de définir des méthodes de
classe
18
Une méthode abstraite est une méthode dont on connaît la signature
seulement
Une classe est abstraite si elle contient au moins une méthode abstraite
ou si elle dérive d’une classe mère contenant une méthode abstraite non
définie
19
Visibilité :
Public / + : Accès possible par tous les objets des autres classes
Protected / # : Accès possible que par les objets des classes héritées
Package/ ~ / rien : Accès possible que par les objets des classes
appartenant au même package
20
Exemple :
Personne
- nom : String
- prenom : String
+ salaire() : float
21
3. Relation entre les classes
3. 1.Notions d’association
Une association est une relation entre deux ou plusieurs classes, qui
représente le type des connexions entre leurs instances
Une association reflète les liens entre les objets de toutes les classes
associées
22
3.2. Paramétrage d’une association
Nom : Une association peut avoir un nom qui s’écrit près de la terminaison
Visibilité : Une association, comme pour les attributs, a une visibilité qui s’écrit
à proximité de la terminaison ou bien devant le nom de la terminaison
Multiplicité : Une association, comme pour les attributs, peut avoir une
multiplicité (nombre de valeurs). Elle doit s’écrire, obligatoirement, à côté de la
terminaison
Navigabilité : La navigabilité peut être précisée
23
Rôle : il décrit la manière avec laquelle l’objet participe à l’association.
Exemple
Plusieurs employés travaillent différemment au sein d’un même projet.
24
3.3. Association réflexive
C’est une association qui lie les objets appartenant à une même classe.
25
3.4. Association binaire et n-aire
Une association est dite binaire si elle relie deux classes
Une relation est dite n-aire si elle relie plusieurs classe
Une association n-aire est présentée par un losange avec des
chemins vers les classes participantes
26
3.5. Multiplicité / cardinalité
27
3.6. Navigabilité
Par défaut, une association est navigable dans les deux sens.
28
La terminaison près de la classe Polygone n’est pas navigable : les
instances de la classe Point ne sauvegarde pas de liste d’objets
polygones
La terminaison près de la classe Point est navigable : chaque objet
Polygone sauvegarde une liste de Points
29
3.7. Qualification
Dans le cas d’une association binaire, il est utile dans certain cas de
limiter la portée de l’association à quelques attributs de la classe
Ces attributs ciblés sont appelés un qualificatif
L’objet ayant la valeur du qualificatif est dit objet cible
L’association est dite alors association qualifiée
Un qualificatif apparait toujours dans le cas d’une association dont la
multiplicité est * du côté cible
30
quantificateur Client
Num_cmd
1
1
Commande
31
Banque Banque
* compte
*
* 0..2
Personne Personne
32
3. 8. Classe association
Prenons l’exemple suivant : l’association Emploie qui lie la
classe société et la classe personne a comme propriétés le salaire
et la date d’embauche.
salaire et la date d’embauche n’appartiennent ni à la classe
société, ni à la classe personnes.
Il s’agit alors d’une propriétés de l’association Emploie.
Les associations, en UML, ne possèdent pas de propriété. il
fallait un nouveau concept pour modéliser cette situation :
classe-association.
Une classe-association a les caractéristiques des classes et
des associations à la fois : elle se connecte à deux ou plusieurs
classes et possède également des attributs et des opérations.
33
34
3. 9. Agrégation et composition
Agrégation:
C’est la modélisation d’une relation tout/partie où une classe est un
élément plus grand (tout) composé d’éléments plus petit (partie).
35
36
Composition:
La composition reflète une contenance entre les objets.
la destruction de l’objet composite implique la destruction de
ses composants.
Une instance du coté partie appartient au plus à une instance
Du coté composite : la multiplicité du composite ne doit pas être
supérieure à 1 (i.e. 1 ou 0..1).
Graphiquement, une composition est modélisée par un losange
plein du côté de l’agrégat.
37
Composition : si le livre est détruit
alors chapitre n’existe plus
Livre 1..1
L Chapitre
L
1..*
38
3. 10. Généralisation et héritage
39
La classe fille hérite toutes les informations de la classe mère.
La classe fille ne peut pas accéder aux informations privées de la
classe mère.
Une classe fille peut redéfinir les méthodes de la classe mère.
Les associations de la classe mère sont appliquées sur les classes
filles.
Une classe peut avoir plusieurs parents, on parle alors d’héritage
Multiple.
40
41
La généralisation peut être effectuée selon des critères. Chaque
critère de généralisation est indiqué en associant un discriminant.
Véhicule
Motorisation Milieu
42
Des contraintes peuvent appliquées sur les relations de généralisation
Personne Animal
{inclusif} {exclusif}
Cours
{incomplet}
Maths Français
43
3. 11. Interface
44
45
4. Transformation d’un diagramme de classes en Java
46
4.2 Transformation des associations et relations en Java
47
Implémentation de l’héritage en Java
class Voiture
Voiture { public void seDeplace()
seDeplacer() {
}
}
class VoitureAEssence extends Voiture
{
VoitureAEssence }
48
Implémentation d’une interface en Java
49
Implémentation des associations entre classes en Java
50
Association unidirectionnelle de 1 vers 1
class Emplacement { }
class Exemplaire
Exemplaire { private Emplacement rangée;
public void setEmplacement(Emplacement emplacement)
{this.rangée = emplacement;}
public Emplacement getEmplacement()
rangée {return rangée;}
public static void main(string [] args)
Emplacement {Emplacement emplacement = new Emplacement();
Exemplaire exemplaire = new Exemplaire();
exemplaire.setEmplacement(emplacement);
Exemplaire place = exemplaire.getEmplacement();
}
}
51
Association bidirectionnelle de 1 vers 1
class Voiture
{ Conducteur conducteur;
public void addConducteur (Conducteur conducteur)
Voiture { this.conducteur = conducteur ;
conducteur.voiture = this;}
public class Conducteur
{Voiture voiture;
public void addVoiture(Voiture voiture)
{ if (voiture != null)
Conducteur { this.voiture = voiture;
voiture.conducteur = this;}
}
public static void main (string [] args)
{ Voiture voiture = new voiture();
Conducteur conducteur = new Conducteur();
conducteur.addVoiture (voiture);
}}
52
Association unidirectionnelle de 1 vers plusieurs
import java.util.Vector ;
class Client { }
class Entreprise{
Entreprise private Vector clients= new Vector();
public void addClient (Client client)
{clients.addElement(client);}
public void removeClient(Client client)
1..* clients {clients.removeElement(client)}
public static void main(string [] args)
Client {Entreprise monEntreprise= new Entreprise();
Client client = new Client();
monEntreprise.addClient(client);
monEntreprise.removeClient(client);
}}
53
Association bidirectionnelle de 1 vers plusieurs
import java.util.Vector ;
class Œuvre {
Vector exemplaires = new Vector();
Œuvre
public void addExemplaire (Exemplaire exemplaire)
œuvre { if (exemplaires.contains(exemplaire)==false)
exemplaires.addElement(exemplaire);
}
1..* exemplaire public void removeExemplaire (Exemplaire exemplaire)
{ if (exemplaires.removeElement(exemplaire)==true)
Exemplaire
exemplaire.œuvre=null;
}
public static void main(string [] args)
{Œuvre ev= new Œuvre();
Exemplaire exemplaire = new Exemplaire();
ev.addExemplaire(exemplaire);
}
}
54
class Exemplaire{
int numero;
Œuvre œuvre;
public Exemplaire(int numero)
{this.numero=numero;}
public void addŒuvre (Œuvre œuvre)
{ if (œuvre) !=null)
œuvre.exemplaires.addElement(this);
this.œuvre = null; }
public void removeŒuvre(Œuvre œuvre)
{ if (œuvre.exemplaires.removeElement(this)==true)
this.œuvre=null;}
public boolean equals(Object obj)
{if ((obj!=null)&&(obj instanceof Exemplaire))
return numero==((Exemplaire)obj).numero;
else return false;}}
55