Chapitre 4-2021

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 55

Chapitre 4

Diagramme de classes

1
1. Introduction

 Le diagramme de classes est le diagramme le plus important dans la


conception orientée objet

 Le diagramme de classes représente :


 La structure interne de l’application à modéliser
 de façon abstraite des objets du système

 L’interaction entre ces objets représente les cas d’utilisation

 C’est une représentation qui ne prend pas compte le facteur temporel

2
Les composants de cette vue statique sont :

Les classes :

- Attributs et méthodes

Les relations :

- Association, généralisation, réalisation et utilisation

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

 Un objet est une instance de la classe

 C’est une entité ayant une identité (nom), un état (valeurs des attributs) et
d’un comportement (régi par les méthodes)

 Si Voiture est une classe ayant comme attribut couleur,


immatriculation et kilométrage, on dit que la POLO 5 ayant une
couleur rouge, une immatriculation 5438 et un kilométrage égale à
22000 km est une instance de la classe Voiture

6
2. 2. Caractéristique d’une classe

 Les caractéristiques d’une classe sont les caractéristiques communes


entre ces objets

 Ces caractéristiques spécifient l’état et le comportement des objets

État d’un objet :


 Défini par les attributs qui décrivent l’état d’un objet
 Ces attributs prennent des valeurs pures, le moment de
l’instanciation de la classe

Comportement d’un objet :


 Déterminer par les méthodes lors de leurs invocations
 Ces méthodes peuvent modifier les valeurs des attributs

7
2.3. Structure d’une classe

Une classe est modélisée par 3 compartiments :

Nom de la classe

Liste des attributs

Liste des méthodes

8
 Nom de la classe

 Le nom de la classe reflète généralement le concept décrit par la classe

 Il doit commencer par une majuscule

 Il est possible d’ajouter des informations auxiliaires telles que le nom de


concepteur, la date, etc.

 Si la classe est abstraite, il fallait ajouter le mot-clé abstract

9
La syntaxe est :

[<Nom_du_paquetage_1>: ... : <Nom_du_paquetage_N> ]

<Nom_de_la_classe> [ { [abstract], [<concepteur>], ... } ]

10
 Listes des attributs

 Les attributs évoquent les informations encapsulées dans les objets

 Chaque attribut possède un nom, un type de données, une visibilité et


probablement une valeur d’initialisation

 Le nom de l’attribut fallait être unique dans la classe

11
La syntaxe est :

<visibilité> [ / ] <nom_attribut> : <type> [ '['<multiplicité>']'

[{<contrainte>}] ] [ = <valeur_par_défaut> ]

12
Type :

Types des valeurs que peut prendre l’attribut lors de l’instanciation

Il peut être de type prédéfini, un nom de classe ou un nom d’interface

Multiplicité :

C’est le nombre de valeurs que l’attribut peut contenir

Contrainte :

Ajouter pour une multiplicité supérieur à 1 pour indiquer si les valeurs


doivent être ordonnées (ordered) ou par (list)

13
Chaque objet, instancié de la classe, possède sa propre copie des
attributs de la classe

Les valeurs des attributs changent d’un objet à un autre

Pour indiquer qu’un attribut garde une valeur unique pour toutes les
instances de la classe (attribut de classe), il fallait souligner son nom

Un attribut de classe n’est pas une propriété de l’objet mais une


propriété de la classe

14
 Les méthodes de la classe :

 Elle définie le comportement des objets 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)

 La déclaration d’une méthode doit indiquer le type retourné par la méthode et


les types de ses paramètres

15
La syntaxe est :

<visibilité> <nom_méthode> ([<paramètre_1>, ... ,<paramètre_N>]):

[<type_renvoyé>] [{<propriétés>}]

16
Pour définir un paramètre, il fallait utiliser la syntaxe suivante :

[<direction>] <nom_paramètre>:<type> ['['<multiplicité>']']


[=<valeur_par_défaut>]

La direction peut être :


In : Paramètre d’entrée
Les modifications de ce paramètre ne sont pas disponibles pour l’appelant.

Out : Paramètre de sortie


Il n’y a pas de valeur d’entrée et la valeur finale est disponible pour l’appelant

Inout : Paramètre d’entrée/sortie


La valeur finale est disponible pour l’appelant

17
 Comme le cas des attributs, il est possible de définir des méthodes de
classe

 Ce type de méthode se manipule que par les attributs de classe et par


ses propres paramètres

 L’utilisation à une méthode de classe ne nécessite pas l’utilisation des


objets de cette classe

 Pour indiquer qu’une méthode est une méthode de classe, il fallait


souligner son nom

18
Une méthode abstraite est une méthode dont on connaît la signature
seulement

Une méthode abstraite ne contient pas un corps

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

On ne peut pas instancier une classe abstraite

Pour définir une classe abstraite, il fallait écrire le mot-clef abstract


après son nom

19
 Visibilité :

 Public / + : Accès possible par tous les objets des autres classes

 Private / - : Accès possible que par les objets de la classe


Ils sont manipulés aussi que par les méthodes de la classe

 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é

 Exactement un: 1 ou 1..1


 plusieurs: * ou 0..*
 au moins un: 1..*
 de un à six: 1..6

Au sein d’une association binaire, la cardinalité d’une classe


source reflète le nombre d’objets de cette classe cible qui
peuvent être reliés à un seul objet de l’autre classe de
l’association

27
3.6. Navigabilité

 La navigabilité reflète la possibilité de traverser une association.

 Elle est présentée par :


 Une flèche près de la terminaison navigable.
 Une croix près de la terminaison non navigable.

 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).

C’est une association présentant une relation d’inclusion d’un élément


dans un ensemble.

Graphiquement, on modélise une agrégation par un losange vide du


côté de l’agrégat.

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

 La généralisation expose une relation entre une classe générale et


une classe spécialisée.
 La classe spécialisée est totalement harmonieuse avec la classe
générale, mais elle a des informations supplémentaires.
 L’instance de la classe spécialisée est utilisé partout là où l’instance
de la classe générale est autorisé.
 La relation de généralisation s’exprime par le concept d’héritage.
 Graphiquement, un héritage ou une généralisation se modélise par
une flèche avec un trait plein dont la pointe est un triangle fermé
signalant le cas le plus général.

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

Avoile Amoteur Terrestre Marin

42
Des contraintes peuvent appliquées sur les relations de généralisation

Personne Animal

{inclusif} {exclusif}

Enseignant Etudiant Poisson Oiseau

Cours

{incomplet}

Maths Français

43
3. 11. Interface

 une interface est une représentation UML qui permet de


rassembler des propriétés et des opérations garantissant un service
cohérent.
 Le concept d’interface en UML est similaire au concept
interface en Java.
 Graphiquement, une interface est modélisée comme étant une
classe en ajoutant tout simplement le stéréotype « interface».
 Une interface doit être opérée par une ou plusieurs classe.
 Une classe peut opérer plusieurs interfaces.

44
45
4. Transformation d’un diagramme de classes en Java

4.1 Transformation classe, instance, attribut, méthode en Java

Une classe, une instance, un attribut ou une méthode


UML sera une classe, une instance, un attribut ou une
méthode en Java.

Il n’y a pas d’ambiguïté. Le passage est un-à-un.

46
4.2 Transformation des associations et relations en Java

Pour les associations UML, il y a plusieurs façons de faire.

Une association UML se traduira par un ou plusieurs


attributs. Ces attributs seront des références vers des objets.

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

public interface Vehicule


«interface » {
Vehicule public void seDeplace();
}
class Voiture implements Vehicule
{
public void seDeplace()
Voiture {
}
}

49
Implémentation des associations entre classes en Java

Java n’offre pas de technique particulière pour implémenter des


associations, des agrégations ou des compositions.

Ce type d’associations s’implémente en ajoutant des attributs dans des


classe.

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

Vous aimerez peut-être aussi