SlideShare une entreprise Scribd logo
1  sur  180
Télécharger pour lire hors ligne
UML : concept objet et diagramme de classes
Achref El Mouelhi
Docteur de l’université d’Aix-Marseille
Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel
elmouelhi.achref@gmail.com
H & H: Research and Training 1 / 125
Plan
1 Introduction
2 L’évolution des langages
3 Le concept objet
4 La notion de classe
5 L’encapsulation
6 Les relations entre classes
La navigabilité
Les rôles
Les classes liées par plusieurs associations
L’auto-association
Les associations n-aires
H & H: Research and Training 2 / 125
Plan
7 Les associations particulières
L’héritage
L’agrégation
La composition
La dépendance
8 La multiplicité
9 La classe d’association
10 Le polymorphisme
11 Les classes abstraite et finale
12 Les interfaces
13 Les contraintes avec UML
14 Comment construire un diagramme de classe?
H & H: Research and Training 3 / 125
© Achref EL MOUELHI ©
Introduction
Introduction
Diagramme de Classe
Le diagramme de structure le plus important dans la réalisation
d’un projet
Utilisant le concept objet
Pouvant être transformé, en respectant certaines règles, en MCD
(le modèle conceptuel de données de Merise)
H & H: Research and Training 4 / 125
© Achref EL MOUELHI ©
Introduction
Introduction
Les éléments de base dans un diagramme de classe
Classe
Attribut
Méthode
Association
Multiplicité
H & H: Research and Training 5 / 125
© Achref EL MOUELHI ©
L’évolution des langages
Introduction
Histoire de la programmation
Langage
machine
1ere
génération
1940
Assembleur
2eme
génération
Programmation
structurée
3eme
génération
Programmation
orientée objet
4eme
génération
H & H: Research and Training 6 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation
Langage machine
Le langage natif d’un processeur (langage de bas niveau)
Les traitements (les instructions) et les données (les variables)
sont tous codés en binaire (suite des 0 et 1)
H & H: Research and Training 7 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation
Langage machine
Le langage natif d’un processeur (langage de bas niveau)
Les traitements (les instructions) et les données (les variables)
sont tous codés en binaire (suite des 0 et 1)
Remarque
La lisibilité est extrêmement difficile
La réutilisation est quasi-impossible
La notion de module n’existe pas
H & H: Research and Training 7 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation
L’assembleur
Une réécriture plus lisible du langage machine
Une instruction est formée de nom de l’opération (mov, add...) et
d’une ou plusieurs opérandes (variables)
Un programme assembleur est traduit en langage machine
H & H: Research and Training 8 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation
L’assembleur
Une réécriture plus lisible du langage machine
Une instruction est formée de nom de l’opération (mov, add...) et
d’une ou plusieurs opérandes (variables)
Un programme assembleur est traduit en langage machine
Remarque
La lisibilité est légèrement meilleure mais reste difficile
La réutilisation est toujours quasi-impossible
La notion de module n’existe toujours pas
H & H: Research and Training 8 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation
La programmation structurée (ou procédurale)
Un programme est composé d’un ensemble d’appel à des
procédures réalisant chacune une tâche bien définie
Une procédure peut appeler plusieurs procédures (y compris
elle-même, on parle dans ce cas de récursivité)
H & H: Research and Training 9 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation
La programmation structurée (ou procédurale)
Un programme est composé d’un ensemble d’appel à des
procédures réalisant chacune une tâche bien définie
Une procédure peut appeler plusieurs procédures (y compris
elle-même, on parle dans ce cas de récursivité)
Remarque
La lisibilité est considérablement améliorée
Une procédure peut être appelée plusieurs fois par plusieurs
procédures différentes (la réutilisation est nettement améliorée)
Apparition de notion de module
H & H: Research and Training 9 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation
La programmation orientée objet
Tout concept, idée, opération... est considéré comme un objet
Un objet peut contenir certains autres objets et avoir des relations
avec certains autres
Chaque objet possède une structure interne et peut avoir
plusieurs états différents
H & H: Research and Training 10 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation
La programmation orientée objet
Tout concept, idée, opération... est considéré comme un objet
Un objet peut contenir certains autres objets et avoir des relations
avec certains autres
Chaque objet possède une structure interne et peut avoir
plusieurs états différents
Remarque
Tout passe par des objets. Un programme correspond à un
ensemble d’instanciation d’objets : facile à lire
Un objet peut être instancié et utilisé par plusieurs autres objets
(ce qui facilite la réutilisation des objets)
Amélioration de la notion de module (Package)
H & H: Research and Training 10 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation
Remarque
Certains compilateurs traduisent les codes soit en langage
machine, soit en assembleur, soit en langage de programmation
d’un niveau inférieur
Certains compilateurs sont implémentés avec d’autres langages
de programmation (par example la machine virtuelle de Java qui
est implémentée en C++...)
H & H: Research and Training 11 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation
Pourquoi autant de génération?
(Plus) de problème de mémoire
Des processeurs plus rapides
Besoins différents
COBOL : pour les systèmes de gestion
Java : pour les problèmes complexes
LISP : pour les programmes d’intelligence artificielle
PROLOG : pour les problèmes de logique
H & H: Research and Training 12 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation Orientée objet
Évolution de LOO
Simula (1967)
Smalltalk (1971 puis 1980)
C++ (1983)
Python (1989)
Java (1995)
C# (2002)
PHP (depuis la version 5 sortie en 2004)
...
H & H: Research and Training 13 / 125
© Achref EL MOUELHI ©
L’évolution des langages
L’historique de la programmation Orientée objet
Évolution de LOO
Simula (1967)
Smalltalk (1971 puis 1980)
C++ (1983)
Python (1989)
Java (1995)
C# (2002)
PHP (depuis la version 5 sortie en 2004)
...
La plupart des langages de programmation ont proposé une nouvelle
version orientée objet
H & H: Research and Training 13 / 125
© Achref EL MOUELHI ©
L’évolution des langages
La programmation orientée objet
Deux catégories de LOO
Les langages à classes : Java, C++, Python...
Les langages à prototypes : JavaScript
H & H: Research and Training 14 / 125
© Achref EL MOUELHI ©
L’évolution des langages
La programmation orientée objet
Pourquoi un LOO?
Supporté par tous les systèmes d’exploitation
Adopté par Microsoft
Adopté par les universitaires (en enseignement et en recherche)
Adopté par la communauté OPEN SOURCE
Adopté par les grandes entreprises
...
H & H: Research and Training 15 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Qu’est ce qu’un objet?
Une représentation miniature d’un objet réel
Tout concept du monde réel est modélisé par un objet
Un outil sur lequel se baser pour créer des choses qui n’existent
pas encore
Nous pouvons le considérer comme une boite noire : inaccessible
directement qu’à travers une interface
H & H: Research and Training 16 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Un objet est une entité autonome
véritable petit programme
possède une durée de vie
possède un état : un ensemble de valeurs
accessible au monde extérieur via une interface
H & H: Research and Training 17 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Un objet est une entité autonome
véritable petit programme
possède une durée de vie
possède un état : un ensemble de valeurs
accessible au monde extérieur via une interface
Un programme est composé de plusieurs objets autonomes qui vont
interagir entre eux
H & H: Research and Training 17 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
De quoi est composé un objet?
un ensemble d’attributs (chaque attribut a un nom et une valeur)
≡ données (qui définissent l’aspect statique de l’objet)
un ensemble de méthodes (des fonctions, comme en
programmation procédurale, dédiées à un type d’objet) ≡
traitements (qui définissent l’aspect dynamique de l’objet)
H & H: Research and Training 18 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Les attributs
un attribut, selon le contexte, peut être aussi appelé champ ou
variable d’instance
un attribut peut avoir un type (ce n’est pas une obligation, tout
dépend du langage de programmation)
chaı̂ne de caractère
entier
booléen
date
...
H & H: Research and Training 19 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Remarque
Un objet peut avoir comme attribut un autre objet
Comme les fonctions en programmation procédurale, une
méthode peut appeler plusieurs autres
Contrairement à la programmation procédurale, les données et les
traitements ne sont pas séparés
H & H: Research and Training 20 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Exemple : maVoiture
Une voiture peut avoir comme attribut
numéro d’immatriculation (chaı̂ne ou entier)
marque (chaı̂ne)
modèle (chaı̂ne ou entier)
puissance (entier)
couleur (chaı̂ne)
...
elle peut avoir comme méthode
avancer
reculer
freiner
klaxonner
...
H & H: Research and Training 21 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Exemple : voiture
numéro d’immatriculation : LY 069 ON
marque : Peugeot
modèle : 3008
puissance : 8
couleur : blanche
H & H: Research and Training 22 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Exemple : voiture
numéro d’immatriculation : LY 069 ON
marque : Peugeot
modèle : 3008
puissance : 8
couleur : blanche
L’ensemble de valeurs d’un objet définit son état
H & H: Research and Training 22 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Exemple : voiture
numéro d’immatriculation : LY 069 ON
marque : Peugeot
modèle : 3008
puissance : 8
couleur : blanche
L’ensemble de valeurs d’un objet définit son état
Si je repeins la voiture précédente en noir (couleur = noir) alors
nous disons que l’objet a changé d’état
H & H: Research and Training 22 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Exemple : voiture
numéro d’immatriculation : LY 069 ON
marque : Peugeot
modèle : 3008
puissance : 8
couleur : blanche
L’ensemble de valeurs d’un objet définit son état
Si je repeins la voiture précédente en noir (couleur = noir) alors
nous disons que l’objet a changé d’état
La voiture peut donc changer d’état mais il s’agit toujours du
même objet
H & H: Research and Training 22 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Attention
Ne pas confondre objets identiques et objets égaux
H & H: Research and Training 23 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Attention
Ne pas confondre objets identiques et objets égaux
Deux objets sont égaux si, au moment de comparaison, leurs
attributs respectifs ont les mêmes valeurs
H & H: Research and Training 23 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Attention
Ne pas confondre objets identiques et objets égaux
Deux objets sont égaux si, au moment de comparaison, leurs
attributs respectifs ont les mêmes valeurs
Deux objets sont identiques s’ils ont le même OID (Object
IDentifier)
H & H: Research and Training 23 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Attention
Ne pas confondre objets identiques et objets égaux
Deux objets sont égaux si, au moment de comparaison, leurs
attributs respectifs ont les mêmes valeurs
Deux objets sont identiques s’ils ont le même OID (Object
IDentifier)
Si deux objets sont identiques alors ils sont aussi égaux
H & H: Research and Training 23 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Attention
Ne pas confondre objets identiques et objets égaux
Deux objets sont égaux si, au moment de comparaison, leurs
attributs respectifs ont les mêmes valeurs
Deux objets sont identiques s’ils ont le même OID (Object
IDentifier)
Si deux objets sont identiques alors ils sont aussi égaux
La réciproque est bien évidemment fausse
H & H: Research and Training 23 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Exercice d’application
Définissons un objet monLivre de type Livre
H & H: Research and Training 24 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Exercice d’application
Définissons un objet monLivre de type Livre
Déterminons ses principaux attributs ainsi que leurs valeurs
H & H: Research and Training 24 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Exercice d’application
Définissons un objet monLivre de type Livre
Déterminons ses principaux attributs ainsi que leurs valeurs
Définissons ses méthodes de base
H & H: Research and Training 24 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Cycle de vie
Création : se réalise via une méthode spécifique dite
constructeur
H & H: Research and Training 25 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Cycle de vie
Création : se réalise via une méthode spécifique dite
constructeur
L’objet sera par la suite utilisé pour effectuer des tâches bien
précises
H & H: Research and Training 25 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Cycle de vie
Création : se réalise via une méthode spécifique dite
constructeur
L’objet sera par la suite utilisé pour effectuer des tâches bien
précises
Destruction : selon le LOO soit d’une façon implicite quand on ne
fait plus référence à l’objet (comme en Java, C#...), soit d’une
façon explicite en appelant une méthode bien spécifique
destructeur (comme en PHP, C++...)
H & H: Research and Training 25 / 125
© Achref EL MOUELHI ©
Le concept objet
Le concept objet
Le garbage collector (ramasse miettes)
C’est le destructeur d’objets en Java, C# et Smalltalk
Il détruit automatiquement les objets qui ne sont plus utilisés
Un objet n’est plus utilisé s’il n’est plus référencé
Lorsque le garbage collector se déclenche, il détruit les objets
non-utilisés
H & H: Research and Training 26 / 125
© Achref EL MOUELHI ©
La notion de classe
La notion de classe
Qu’est ce qu’une classe en POO?
Ça correspond à un plan, un moule, une usine...
C’est une description abstraite d’un type d’objets
Elle regroupe un ensemble d’objets ayant les mêmes propriétés
statiques (attributs) et dynamiques (méthodes)
Qu’est ce que c’est la notion d’instance?
Une instance correspond à un objet créé à partir d’une classe (via
le constructeur)
H & H: Research and Training 27 / 125
© Achref EL MOUELHI ©
La notion de classe
La notion de classe
Qu’est ce qu’une classe en POO?
Ça correspond à un plan, un moule, une usine...
C’est une description abstraite d’un type d’objets
Elle regroupe un ensemble d’objets ayant les mêmes propriétés
statiques (attributs) et dynamiques (méthodes)
Qu’est ce que c’est la notion d’instance?
Une instance correspond à un objet créé à partir d’une classe (via
le constructeur)
L’instanciation : création d’un objet d’une classe
H & H: Research and Training 27 / 125
© Achref EL MOUELHI ©
La notion de classe
La notion de classe
Qu’est ce qu’une classe en POO?
Ça correspond à un plan, un moule, une usine...
C’est une description abstraite d’un type d’objets
Elle regroupe un ensemble d’objets ayant les mêmes propriétés
statiques (attributs) et dynamiques (méthodes)
Qu’est ce que c’est la notion d’instance?
Une instance correspond à un objet créé à partir d’une classe (via
le constructeur)
L’instanciation : création d’un objet d’une classe
instance ≡ objet
H & H: Research and Training 27 / 125
© Achref EL MOUELHI ©
La notion de classe
La notion de classe
Dans un digramme de classes UML
Une classe est représentée par un classeur contenant trois parties :
première partie dédiée au nom de la classe
seconde partie dédiée aux attributs
dernière partie dédiée aux méthodes
NomClasse
les attributs
les méthodes
H & H: Research and Training 28 / 125
© Achref EL MOUELHI ©
La notion de classe
La notion de classe
De quoi est composé une classe?
Attribut : visibilité + nom + type
LOO faiblement typé, comme PHP, Pyhon..., n’exigent pas un type
pour les attributs
LOO fortement typé, comme Java, C++..., exigent un type pour
chaque attribut
Méthode : nom + arguments + valeur de retour ≡ signature :
exactement comme les fonctions en procédurale
H & H: Research and Training 29 / 125
© Achref EL MOUELHI ©
La notion de classe
La notion de classe
Remarque
Un attribut ou une méthode peut être de classe (static) ou
d’instance
Un attribut (ou une méthode) est dit static si sa valeur est
partagée par tous les objets de la classe
H & H: Research and Training 30 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Une classe
peut cacher son implémentation
ne montre aux autres objets que ce qu’elle autorise : interface
H & H: Research and Training 31 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Une classe
peut cacher son implémentation
ne montre aux autres objets que ce qu’elle autorise : interface
Propriétés
Les objets interagissent les uns avec les autres via les interfaces
Ce qui n’est pas dans l’interface n’est ni visible ni accessible aux
autres objets
H & H: Research and Training 31 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Une classe
peut cacher son implémentation
ne montre aux autres objets que ce qu’elle autorise : interface
Propriétés
Les objets interagissent les uns avec les autres via les interfaces
Ce qui n’est pas dans l’interface n’est ni visible ni accessible aux
autres objets
La dissociation de l’interface et de l’implémentation : encapsulation
H & H: Research and Training 31 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
L’encapsulation, pourquoi?
Protection des données
données inaccessibles de l’extérieur
accès uniquement via l’interface
possibilité de tracer tous les accès aux données
focalisation sur les services rendus par les objets plutôt que sur
leur structure
H & H: Research and Training 32 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
L’encapsulation, comment?
En définissant des niveaux de visibilité
Les méthodes comme les attributs sont concernés
(Trois) niveaux de visibilités
public : visible par tous les autres objets
protected : visible par certains objets (à voir plus tard)
private : visible seulement depuis l’intérieur de l’objet
H & H: Research and Training 33 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Dans un diagramme de classes
On peut utiliser
+ : pour indiquer que la propriété a une visibilité public
- : pour indiquer que la propriété a une visibilité private
# : pour indiquer que la propriété a une visibilité protected
H & H: Research and Training 34 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Livre
- titre
+ nbrPages
# datePublication
?
Dans cet exemple
titre a une visibilité private
nbrPages a une visibilité public
datePublication a une visibilité protected
H & H: Research and Training 35 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Certains langages, comme Smalltalk exige que :
les attributs soient private
les méthodes soient public
H & H: Research and Training 36 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Certains langages, comme Smalltalk exige que :
les attributs soient private
les méthodes soient public
En Java, PHP
C’est juste une convention (une bonne pratique)
H & H: Research and Training 36 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Personne
- nom
- prenom
- dateNaissance
+ getNom()
+ getPrenom()
+ calculerAge()
H & H: Research and Training 37 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Personne
- nom
- prenom
- dateNaissance
+ getNom()
+ getPrenom()
+ calculerAge()
Encapsulation
Seules les trois méthodes getNom(), getPrenom() et
calculerAge() sont visibles par les autres objets
Les autres objets ignorent l’existence de l’attribut
dateNaissance
H & H: Research and Training 37 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Les méthodes publiques
constituent l’interface de la classe
sont accessibles de l’extérieur
Les méthodes privées
sont déclenchées par le biais d’autres méthodes privées ou
publiques
ne sont pas accessibles depuis l’extérieur
ne sont accessible qu’au développeur de la classe
H & H: Research and Training 38 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Question
Si les attributs sont toujours privés, comment modifier leurs valeurs?
H & H: Research and Training 39 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Question
Si les attributs sont toujours privés, comment modifier leurs valeurs?
Réponse
Les getters (accesseurs) pour récupérer la valeur
(getNomAttribut())
Les setters (mutateurs) pour modifier la valeur
(setNomAttribut())
H & H: Research and Training 39 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Exercice
Définir les getters/setters de la classe Livre
Livre
- titre
- nbrPages
- datePublication
?
H & H: Research and Training 40 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Comment créer un objet d’une classe?
en utilisant le constructeur de la classe
en invoquant l’opérateur new
H & H: Research and Training 41 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Comment créer un objet d’une classe?
en utilisant le constructeur de la classe
en invoquant l’opérateur new
Qu’est ce qu’un constructeur?
une méthode particulière et spécifique à chaque classe
elle porte le nom de la classe et n’a pas de valeur de retour
H & H: Research and Training 41 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Exemple
En Java, C++, PHP, C#, TypeScript : new Personne();
En Smalltalk : Personne new
H & H: Research and Training 42 / 125
© Achref EL MOUELHI ©
L’encapsulation
La notion de classe
Récapitulons
Une classe a :
des attributs
des méthodes dont
le constructeur
les getters
les setters
H & H: Research and Training 43 / 125
© Achref EL MOUELHI ©
Les relations entre classes
Relations entre classes
Considérons la classe Adresse :
Adresse
rue
ville
codePostal
H & H: Research and Training 44 / 125
© Achref EL MOUELHI ©
Les relations entre classes
Relations entre classes
Considérons la classe Adresse :
Adresse
rue
ville
codePostal
Hypothèse
Supposant que chaque personne possède une adresse (objet créé à
partir de la classe Adresse)
H & H: Research and Training 44 / 125
© Achref EL MOUELHI ©
Les relations entre classes
Relations entre classes
Comment schématiser cela en UML?
En ajoutant dans la classe Personne un attribut adresse de type
Adresse?
Personne
nom
prenom
dateNaissance
adresse
Adresse
rue
ville
codePostal
H & H: Research and Training 45 / 125
© Achref EL MOUELHI ©
Les relations entre classes
Relations entre classes
Comment schématiser cela en UML?
En ajoutant dans la classe Personne un attribut adresse de type
Adresse?
Personne
nom
prenom
dateNaissance
adresse
Adresse
rue
ville
codePostal
H & H: Research and Training 45 / 125
© Achref EL MOUELHI ©
Les relations entre classes
Relations entre classes
En reliant les deux classes (sommets d’un graphe) par une arête
Personne
nom
prenom
dateNaissance
Adresse
rue
ville
codePostal
H & H: Research and Training 46 / 125
© Achref EL MOUELHI ©
Les relations entre classes
Relations entre classes
En reliant les deux classes (sommets d’un graphe) par une arête
Personne
nom
prenom
dateNaissance
Adresse
rue
ville
codePostal
Relation entre classes = association
H & H: Research and Training 46 / 125
© Achref EL MOUELHI ©
Les relations entre classes
Relations entre classes
L’association peut être nommée
Personne
nom
prenom
dateNaissance
Adresse
rue
ville
codePostal
possède
H & H: Research and Training 47 / 125
© Achref EL MOUELHI ©
Les relations entre classes
Relations entre classes
On peut aussi indiquer le sens de la lecture
Personne
nom
prenom
dateNaissance
Adresse
rue
ville
codePostal
possède >
H & H: Research and Training 48 / 125
© Achref EL MOUELHI ©
Les relations entre classes
Relations entre classes
On peut aussi ajouter deux noms à l’association : un pour chaque
sens de lecture
Personne
nom
prenom
dateNaissance
Adresse
rue
ville
codePostal
possède >
< appartient
H & H: Research and Training 49 / 125
© Achref EL MOUELHI ©
Les relations entre classes La navigabilité
Relations entre classes
Comment faire pour rendre la relation bidirectionnelle?
Pour une personne, on peut connaı̂tre son adresse
Et pour une adresse, on peut connaı̂tre son propriétaire
H & H: Research and Training 50 / 125
© Achref EL MOUELHI ©
Les relations entre classes La navigabilité
Relations entre classes
L’association est maintenant bidirectionnelle
Personne
nom
prenom
dateNaissance
Adresse
rue
ville
codePostal
possède
H & H: Research and Training 51 / 125
© Achref EL MOUELHI ©
Les relations entre classes La navigabilité
Les trois associations suivantes sont unidirectionnelles et équivalentes
Personne
nom
prenom
dateNaissance
Adresse
rue
ville
codePostal
Personne
nom
prenom
dateNaissance
Adresse
rue
ville
codePostal
Personne
nom
prenom
dateNaissance
Adresse
rue
ville
codePostal
H & H: Research and Training 52 / 125
© Achref EL MOUELHI ©
Les relations entre classes Les rôles
Relations entre classes
On peut définir des rôles
Personne
nom
prenom
dateNaissance
Université
nom
ville
enseigne >
employeur
enseignant
H & H: Research and Training 53 / 125
© Achref EL MOUELHI ©
Les relations entre classes Les rôles
Relations entre classes
On peut définir des rôles
Personne
nom
prenom
dateNaissance
Université
nom
ville
enseigne >
employeur
enseignant
Explication
Le rôle d’une Personne dans une Université est
enseignant
Le rôle d’une Université pour une Personne est employeur
H & H: Research and Training 53 / 125
© Achref EL MOUELHI ©
Les relations entre classes Les classes liées par plusieurs associations
Relations entre classes
On peut définir une ou plusieurs associations entre deux classes
Employé
nom
prenom
dateNaissance
Entreprise
nom
ville
travaille >
peut diriger >
H & H: Research and Training 54 / 125
© Achref EL MOUELHI ©
Les relations entre classes Les classes liées par plusieurs associations
Relations entre classes
On peut définir une ou plusieurs associations entre deux classes
Employé
nom
prenom
dateNaissance
Entreprise
nom
ville
travaille >
peut diriger >
Deux associations possibles entre Employé et Entreprise
Un Employé travaille dans une Entreprise
Un Employé peut diriger une Entreprise
H & H: Research and Training 54 / 125
© Achref EL MOUELHI ©
Les relations entre classes L’auto-association
Relations entre classes
Remarque
Une association peut concerner une seule classe
H & H: Research and Training 55 / 125
© Achref EL MOUELHI ©
Les relations entre classes L’auto-association
Relations entre classes
Exemple d’auto-association
Personne
nom
prenom
dateNaissance
est l’enfant >
est le parent >
H & H: Research and Training 56 / 125
© Achref EL MOUELHI ©
Les relations entre classes L’auto-association
Relations entre classes
Exemple d’auto-association
Personne
nom
prenom
dateNaissance
est l’enfant >
est le parent >
Comment lire ça?
Une personne est l’enfant d’une autre personne
Une personne est le parent d’une autre personne
H & H: Research and Training 56 / 125
© Achref EL MOUELHI ©
Les relations entre classes Les associations n-aires
Relations entre classes
Remarque
Toutes les associations, qu’on a vu, sont binaires
C’est-à-dire, elles relient au plus deux classes
On peut aussi utiliser des associations ternaires voire n-aires
H & H: Research and Training 57 / 125
© Achref EL MOUELHI ©
Les relations entre classes Les associations n-aires
Relations entre classes
Exemple d’association ternaire
Cours
Salle Étudiant
H & H: Research and Training 58 / 125
© Achref EL MOUELHI ©
Les relations entre classes Les associations n-aires
Relations entre classes
Exemple d’association ternaire
Cours
Salle Étudiant
Toute association non-binaire peut être transformée en un ensemble
d’associations binaires.
H & H: Research and Training 58 / 125
© Achref EL MOUELHI ©
Les associations particulières
Relations entre classes
Quatre associations particulières
héritage
agrégation
composition
dépendance
H & H: Research and Training 59 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
L’héritage, quand?
Lorsque deux ou plusieurs classes partagent plusieurs attributs
(et méthodes)
Lorsqu’une Classe1 est une sorte de Classe2
H & H: Research and Training 60 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Exemple
Un enseignant a un nom, un prénom, une date de naissance, un
salaire et une date de recrutement
H & H: Research and Training 61 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Exemple
Un enseignant a un nom, un prénom, une date de naissance, un
salaire et une date de recrutement
Un étudiant a aussi un nom, un prénom, une date de naissance et
un niveau
H & H: Research and Training 61 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Exemple
Un enseignant a un nom, un prénom, une date de naissance, un
salaire et une date de recrutement
Un étudiant a aussi un nom, un prénom, une date de naissance et
un niveau
Sémantiquement, enseignant et étudiant sont une sorte de
personne
H & H: Research and Training 61 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Exemple
Un enseignant a un nom, un prénom, une date de naissance, un
salaire et une date de recrutement
Un étudiant a aussi un nom, un prénom, une date de naissance et
un niveau
Sémantiquement, enseignant et étudiant sont une sorte de
personne
En plus, les deux partagent plusieurs attributs tels que nom,
prénom et date de naissance
H & H: Research and Training 61 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Exemple
Un enseignant a un nom, un prénom, une date de naissance, un
salaire et une date de recrutement
Un étudiant a aussi un nom, un prénom, une date de naissance et
un niveau
Sémantiquement, enseignant et étudiant sont une sorte de
personne
En plus, les deux partagent plusieurs attributs tels que nom,
prénom et date de naissance
Donc, on peut mettre en commun les attributs nom, prénom, date
de naissance dans une classe Personne
H & H: Research and Training 61 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Exemple
Un enseignant a un nom, un prénom, une date de naissance, un
salaire et une date de recrutement
Un étudiant a aussi un nom, un prénom, une date de naissance et
un niveau
Sémantiquement, enseignant et étudiant sont une sorte de
personne
En plus, les deux partagent plusieurs attributs tels que nom,
prénom et date de naissance
Donc, on peut mettre en commun les attributs nom, prénom, date
de naissance dans une classe Personne
Les classes Étudiant et Enseignant hériteront de la classe
Personne
H & H: Research and Training 61 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
L’héritage, pourquoi?
Pour :
réutiliser le code
éviter la duplication de constituants (attributs, méthodes)
H & H: Research and Training 62 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
L’héritage, pourquoi?
Pour :
réutiliser le code
éviter la duplication de constituants (attributs, méthodes)
Comment faire l’héritage en UML?
H & H: Research and Training 62 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Étape 1 : Mettre les propriétés en commun (nom, prenom et dateNaissance)
dans une nouvelle classe Personne
Personne
nom
prenom
dateNaissance
Enseignant
salaire
dateRecrutement
Étudiant
niveau
H & H: Research and Training 63 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Étape 2 : Relier par une flèche les deux classes Étudiant et Enseignant à la
classe Personne
Personne
nom
prenom
dateNaissance
Enseignant
salaire
dateRecrutement
Étudiant
niveau
H & H: Research and Training 64 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Terminologie
La classe Personne est appelée : classe mère, super classe,
classe parente, classe racine...
Les classes Étudiant et Enseignant sont appelées : classes
filles, sous-classes, classes dérivées...
On dit aussi que les classes Étudiant et Enseignant héritent
de la classe Personne
H & H: Research and Training 65 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
L’héritage, pourquoi?
Représenter l’ordre naturel des classes (hiérarchie)
Organiser sémantiquement et symboliquement les classes
Spécifier ou généraliser une classe
H & H: Research and Training 66 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
L’héritage, pourquoi?
Représenter l’ordre naturel des classes (hiérarchie)
Organiser sémantiquement et symboliquement les classes
Spécifier ou généraliser une classe
Qu’est ce que la généralisation?
ajouter une classe au dessus d’une autre
H & H: Research and Training 66 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
L’héritage, pourquoi?
Représenter l’ordre naturel des classes (hiérarchie)
Organiser sémantiquement et symboliquement les classes
Spécifier ou généraliser une classe
Qu’est ce que la généralisation?
ajouter une classe au dessus d’une autre
Qu’est ce que la spécialisation?
ajouter une classe au dessous d’une autre
H & H: Research and Training 66 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
L’héritage : propriétés
Transitivité : si A hérite de B et B hérite de C, alors A hérite de C
Non-réflexif : une classe n’hérite pas d’elle même
Non-symétrique : si A hérite de B, alors B n’hérite pas de A
Non-cyclique : si A hérite de B et B hérite de C, alors C ne peut
hériter de A
H & H: Research and Training 67 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Qu’est ce que l’héritage multiple?
le fait d’hériter de plusieurs classes au même temps
H & H: Research and Training 68 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Qu’est ce que l’héritage multiple?
le fait d’hériter de plusieurs classes au même temps
L’héritage multiple, est-il possible?
autorisé par certains LOO comme : OCaml, Eiffel...
interdit par certains autres : PHP, Java...
H & H: Research and Training 68 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Quel problème peut poser l’héritage multiple?
Un problème de confusion (nommage) : si une classe A hérite de deux
classes B et C qui ont un attribut ou une méthode en commun
H & H: Research and Training 69 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Quel problème peut poser l’héritage multiple?
Un problème de confusion (nommage) : si une classe A hérite de deux
classes B et C qui ont un attribut ou une méthode en commun
Les LOO qui interdisent l’héritage multiple proposent soit
les interfaces (PHP, Java, C#, TypeScript...)
les traits (PHP)
l’héritage virtuel (C++)
H & H: Research and Training 69 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
En Java
Une classe mère peut-elle accéder aux attributs de sa classe
fille?
Une classe mère peut-elle avoir plusieurs classes filles?
Deux classes héritant la même classe peuvent-elles avoir un
attribut qui n’est pas dans la classe mère?
Une classe fille peut-elle avoir comme uniques attributs et
méthodes ceux de la classe mère?
H & H: Research and Training 70 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Remarque
Dans certains LOO comme Java, C#..., toutes les classes héritent
d’une classe racine appelée Object
Object offre plusieurs services tels que la conversion d’un objet
en chaı̂ne de caractères, le clonage...
Object : cette classe racine n’existe pas en PHP...
H & H: Research and Training 71 / 125
© Achref EL MOUELHI ©
Les associations particulières L’héritage
Relations entre classes
Questions
Existera t-il une méthode (autre que le constructeur) dans un objet de type Poche?
La classe Broché n’a pas d’attribut propre, pourrait-elle être implémentée?
Pourrait-on ajouter une relation d’héritage entre Poche et Article?
Un livre peut-il être Broché et de Poche?
H & H: Research and Training 72 / 125
© Achref EL MOUELHI ©
Les associations particulières L’agrégation
Relations entre classes
L’agrégation
C’est une association non-symétrique
Modélisée par un losange vide coté agrégat
Elle représente une relation de type ensemble/élément
H & H: Research and Training 73 / 125
© Achref EL MOUELHI ©
Les associations particulières L’agrégation
Relations entre classes
Exemple d’agrégation
Voiture
marque
modèle
couleur
Pneu
dimension
poids
H & H: Research and Training 74 / 125
© Achref EL MOUELHI ©
Les associations particulières La composition
Relations entre classes
La composition
C’est une agrégation forte modélisée par un losange noir coté
agrégat
L’élément n’existe pas sans l’agrégat (l’élément est détruit lorsque
l’agrégat n’existe plus)
L’élément ne peut être en relation qu’avec un seul agrégat
H & H: Research and Training 75 / 125
© Achref EL MOUELHI ©
Les associations particulières La composition
Relations entre classes
Exemple de composition
Bâtiment
numéro
année
nbrÉtages
Appartement
numéro
type
H & H: Research and Training 76 / 125
© Achref EL MOUELHI ©
Les associations particulières La composition
Relations entre classes
Questions
Si une pièce est détruite, les chaises associées devraient-elles également être détruites?
Si une pièce est détruite, les portes associées devraient-elles également être détruites?
Si un bâtiment est détruit, les portes associées à ses pièces devraient-elles également
être détruites?
Si un bâtiment est détruit, les chaises associées à ses pièces devraient-elles également
être détruites?
H & H: Research and Training 77 / 125
© Achref EL MOUELHI ©
Les associations particulières La dépendance
Relations entre classes
La dépendance
Une première classe utilise une deuxième sans que cette dernière
soit un membre de la première
H & H: Research and Training 78 / 125
© Achref EL MOUELHI ©
Les associations particulières La dépendance
Relations entre classes
La dépendance
Une première classe utilise une deuxième sans que cette dernière
soit un membre de la première
Moyenne
note1
note2
calcul(Coefficient c)
Coefficient
coef1
coef2
H & H: Research and Training 78 / 125
© Achref EL MOUELHI ©
Les associations particulières La dépendance
Relations entre classes
Exercice d’application 1
Les classes suivantes sont liées par une agrégation ou une
composition?
but et gardien de but
voiture et moteur
forêt et arbre
paragraphe et ligne
cinéma et salle
salle et chaise
enseignant et cours
H & H: Research and Training 79 / 125
© Achref EL MOUELHI ©
Les associations particulières La dépendance
Relations entre classes
Exercice d’application 2
Identifier le type de relation (association, héritage, instanciation,
composition, agrégation) qui relie chacun des couples suivants :
Corps et Cœur
Ford et ConstructeurAutomobile
Tracteur et Véhicule
Rectangle et Carré
Homme et homme
Entier et Nombre
Chaı̂neDeCaractères et Caractère
Homme et Humain
H & H: Research and Training 80 / 125
© Achref EL MOUELHI ©
Les associations particulières La dépendance
Association
Agrégation
Composition
Pour récapituler
Une association est une relation entre deux classes de même niveau conceptuel (aucune
des deux n’est plus importante que l’autre) (uses a)
Une agrégation est une relation ensemble/élément (has a)
Une composition est une relation ensemble/élément tel que l’élément n’existe plus si
l’ensemble est détruit (owns a)
L’héritage est une relation entre deux classes dont une pouvant récupérer toutes les
propriétés de la deuxième (is a)
Une dépendance est une relation entre deux classes dont une propriété de la première fait
référence la deuxième (references a)
H & H: Research and Training 81 / 125
© Achref EL MOUELHI ©
La multiplicité
Multiplicité
Définition
permet de définir le nombre minimum et maximum de relation que
chaque objet de classe peut avoir avec un (ou plusieurs) objet d’une
(ou plusieurs) autre classe
H & H: Research and Training 82 / 125
© Achref EL MOUELHI ©
La multiplicité
Multiplicité
Définition
permet de définir le nombre minimum et maximum de relation que
chaque objet de classe peut avoir avec un (ou plusieurs) objet d’une
(ou plusieurs) autre classe
Équivalent en MCD : cardinalité
H & H: Research and Training 82 / 125
© Achref EL MOUELHI ©
La multiplicité
Multiplicité
Six multiplicités possibles avec UML
0..1 : aucune ou au plus un objet
1 : exactement un seul objet [par défaut]
0..* ou * : 0 ou plusieurs objets
1..* : au moins un ou plusieurs objets
x..x ou x : exactement x objets
m..n : Au moins m et au plus n objets
H & H: Research and Training 83 / 125
© Achref EL MOUELHI ©
La multiplicité
Multiplicité
Exemple
Une personne peut avoir zéro ou plusieurs adresses
Une adresse appartient à une ou plusieurs personnes
Personne
nom
prenom
dateNaissance
Adresse
rue
ville
codePostal
possède
0..*
1..*
H & H: Research and Training 84 / 125
© Achref EL MOUELHI ©
La multiplicité
Multiplicité
Exercice 1 : définir les multiplicités entre les deux classes suivantes
Une voiture comporte plusieurs pneus
Un pneu appartient à une seule voiture
Voiture Pneu
comporte
H & H: Research and Training 85 / 125
© Achref EL MOUELHI ©
La multiplicité
Multiplicité
Exercice 2 : définir les multiplicités entre les deux classes suivantes
Une voiture a un et un seul moteur
Un moteur appartient à une seule voiture
Voiture Moteur
possède
H & H: Research and Training 86 / 125
© Achref EL MOUELHI ©
La multiplicité
Multiplicité
Exercice 3 : définir les multiplicités entre les deux classes suivantes
Un étudiant est inscrit dans une et une seule université
Une université a plusieurs étudiants
Étudiant Université
étudie
H & H: Research and Training 87 / 125
© Achref EL MOUELHI ©
La multiplicité
Multiplicité
Exercice 4 : définir les multiplicités entre les deux classes suivantes
Un livre est écrit par un ou plusieurs auteurs
Un auteur a écrit un ou plusieurs livres
Livre Auteur
est écrit
H & H: Research and Training 88 / 125
© Achref EL MOUELHI ©
La multiplicité
Multiplicité
Exercice 5 : déterminer les multiplicités des associations suivantes
Mari Épouse
est marié
Homme Femme
est marié
Homme Femme
est ou a été marié
H & H: Research and Training 89 / 125
© Achref EL MOUELHI ©
La multiplicité
Multiplicité
Exercice 6 : déterminer les multiplicités des associations suivantes
Personne
nom
prenom
dateNaissance
est l’enfant >
est le parent >
H & H: Research and Training 90 / 125
© Achref EL MOUELHI ©
La classe d’association
La classe d’association
Étant donné l’exemple suivant
Article
codeArticle
prixUnitaire
quantitéEnStock
Commande
numéroCommande
dateCommande
0..*
1..*
H & H: Research and Training 91 / 125
© Achref EL MOUELHI ©
La classe d’association
La classe d’association
Étant donné l’exemple suivant
Article
codeArticle
prixUnitaire
quantitéEnStock
Commande
numéroCommande
dateCommande
0..*
1..*
Question
Où peut-on placer la quantitéCommandée?
H & H: Research and Training 91 / 125
© Achref EL MOUELHI ©
La classe d’association
La classe d’association
Dans Article?
Article
codeArticle
prixUnitaire
quantitéEnStock
quantitéCommandée
Commande
numéroCommande
dateCommande
0..*
1..*
H & H: Research and Training 92 / 125
© Achref EL MOUELHI ©
La classe d’association
La classe d’association
Dans Article?
Article
codeArticle
prixUnitaire
quantitéEnStock
quantitéCommandée
Commande
numéroCommande
dateCommande
0..*
1..*
Impossible
Ainsi, une seule quantitéCommandée pour tous ceux qui
commandent le même article
H & H: Research and Training 92 / 125
© Achref EL MOUELHI ©
La classe d’association
La classe d’association
Dans Commande?
Article
codeArticle
prixUnitaire
quantitéEnStock
Commande
numéroCommande
dateCommande
quantitéCommandée
0..*
1..*
H & H: Research and Training 93 / 125
© Achref EL MOUELHI ©
La classe d’association
La classe d’association
Dans Commande?
Article
codeArticle
prixUnitaire
quantitéEnStock
Commande
numéroCommande
dateCommande
quantitéCommandée
0..*
1..*
Impossible aussi
Ainsi, une seule quantitéCommandée pour tous les articles d’une
même commande
H & H: Research and Training 93 / 125
© Achref EL MOUELHI ©
La classe d’association
La classe d’association
Conclusion
La quantitéCommandée ne peut être ni dans Article ni dans
Commande
H & H: Research and Training 94 / 125
© Achref EL MOUELHI ©
La classe d’association
La classe d’association
Conclusion
La quantitéCommandée ne peut être ni dans Article ni dans
Commande
Solution : créer une classe d’association
Article
codeArticle
prixUnitaire
quantitéEnStock
Commande
numéroCommande
dateCommande
0..*
1..*
ArticleCommande
quantitéCommandée
H & H: Research and Training 94 / 125
© Achref EL MOUELHI ©
Le polymorphisme
Polymorphisme
Définition
En grec : prendre plusieurs formes
En POO : possibilité de définir plusieurs méthodes avec le même
nom
même si la même méthode existe dans la classe mère avec la
même signature
même si une méthode avec le nom existe dans la classe mais avec
une signature différente
H & H: Research and Training 95 / 125
© Achref EL MOUELHI ©
Le polymorphisme
Polymorphisme
Surcharge (overload)
Définir dans une classe plusieurs méthodes portant le même nom
et avec des signatures différentes
Autorisée en Java mais pas par tous les LOO (comme PHP...)
Redéfinition
Redéfinir une méthode, héritée, dans la classe fille
Autorisée par tous les LOO (un des objectifs de l’héritage)
La signature de la méthode redéfinie doit être identique à celle de
la méthode héritée dans la classe mère
H & H: Research and Training 96 / 125
© Achref EL MOUELHI ©
Le polymorphisme
Polymorphisme
Remarque
Lorsqu’une méthode est appelée, le compilateur commence par
regarder dans la classe de l’objet où la méthode a été appelée
S’il la retrouve, il l’exécute
Sinon il la repasse au niveau supérieure (classe mère directe)
H & H: Research and Training 97 / 125
© Achref EL MOUELHI ©
Les classes abstraite et finale
Classes abstraite
Classe abstraite
C’est une classe qu’on ne peut instancier
Par exemple, on sait qu’un être humain est soit homme soit
femme. Donc, la classe Humain peut être déclarée abstraite.
H & H: Research and Training 98 / 125
© Achref EL MOUELHI ©
Les classes abstraite et finale
Classes abstraite
En UML, on écrit le nom d’une classe abstraite en italique
Humain
Homme Femme
H & H: Research and Training 99 / 125
© Achref EL MOUELHI ©
Les classes abstraite et finale
Classes abstraite
Méthode abstraite
C’est une méthode indéfinie (elle n’est pas implémentée)
Si une classe contient une méthode abstraite, elle doit être aussi
déclarée abstraite
Si une classe hérite d’une classe abstraite, alors elle doit
implémenter les méthodes abstraites de cette dernière
Remarque
Certains LOO, comme le C++, permettent de proposer une
implémentation par défaut pour les méthodes abstraites
H & H: Research and Training 100 / 125
© Achref EL MOUELHI ©
Les classes abstraite et finale
Classes finale
Classe finale
C’est une classe qu’on ne peut hériter
Méthode finale
C’est une méthode que les classes filles ne peuvent redéfinir
H & H: Research and Training 101 / 125
© Achref EL MOUELHI ©
Les classes abstraite et finale
Classes abstraite et finale
Exercice
Une classe abstraite doit-elle avoir une ou plusieurs méthodes
abstraites?
Une classe finale peut-elle avoir une méthode abstraite?
Une classe abstraite peut-elle avoir une méthode finale?
Une classe finale doit-elle avoir une méthode finale?
Une classe finale peut-elle hériter d’une classe abstraite?
Une classe peut-elle être finale et abstraite à la fois?
H & H: Research and Training 102 / 125
© Achref EL MOUELHI ©
Les interfaces
Les interfaces
Une interface (un contrat)
Une classe abstraite définie par le mot clé interface et dont toutes
les méthodes sont abstraites.
H & H: Research and Training 103 / 125
© Achref EL MOUELHI ©
Les interfaces
Les interfaces
Une interface (un contrat)
Une classe abstraite définie par le mot clé interface et dont toutes
les méthodes sont abstraites.
En UML, une interface est schématisée ainsi
<< interface >>
ISalutation
direBonjour()
sayHello()
H & H: Research and Training 103 / 125
© Achref EL MOUELHI ©
Les interfaces
Les interfaces
En UML, voici comment dire qu’une classe hérite d’une interface
<< interface >>
ISalutation
direBonjour()
sayHello()
Personne
nom
prenom
dateNaissance
H & H: Research and Training 104 / 125
© Achref EL MOUELHI ©
Les interfaces
Les interfaces
Remarques
Une classe qui hérite d’une interface doit implémenter toutes ses
méthodes
Une classe peut hériter de plusieurs interfaces
Une interface peut hériter d’autres interfaces
H & H: Research and Training 105 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
Étant donné l’exemple suivant
Personne
nom
prenom
dateNaissance
Université
nom
ville
enseignant
étudiant
H & H: Research and Training 106 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
Étant donné l’exemple suivant
Personne
nom
prenom
dateNaissance
Université
nom
ville
enseignant
étudiant
Comment lire ça?
Une personne peut avoir le rôle d’enseignant dans une université
Une personne peut avoir le rôle d’étudiant dans une université
Mais, elle peut aussi avoir les deux rôles
H & H: Research and Training 106 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
Pour indiquer qu’une personne ne peut avoir les deux rôles à la
fois, on rajoute une contrainte
Personne
nom
prenom
dateNaissance
Université
nom
ville
enseignant
étudiant
{xor}
xor : eXclusive OR (OU exclusif)
H & H: Research and Training 107 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Étant donné l’exemple suivant
Personne
nom
prenom
dateNaissance
Entreprise
nom
ville
employé
dirigeant
H & H: Research and Training 108 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Étant donné l’exemple suivant
Personne
nom
prenom
dateNaissance
Entreprise
nom
ville
employé
dirigeant
Comment lire ça?
Une personne peut avoir le rôle d’employé dans une entreprise
Une personne peut avoir le rôle de dirigeant dans une entreprise
Mais est-ce qu’une personne qui n’est pas employé dans cette
entreprise peut la diriger?
D’après ce diagramme de classes : oui
H & H: Research and Training 108 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
Pour indiquer qu’une personne qui dirige une entreprise est
forcément un de ses employés, on rajoute la contrainte suivante
Personne
nom
prenom
dateNaissance
Entreprise
nom
ville
employé
dirigeant
{sous-ensemble}
H & H: Research and Training 109 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Étant donné l’exemple suivant
Client
nom
prenom
dateNaissance
Compte
numéro
solde
valMaxDecouvert
créditer(int x)
déditer(int x)
1..*
1..2
H & H: Research and Training 110 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Étant donné l’exemple suivant
Client
nom
prenom
dateNaissance
Compte
numéro
solde
valMaxDecouvert
créditer(int x)
déditer(int x)
1..*
1..2
Comment lire ça?
Un client peut avoir 1 ou plusieurs comptes bancaires
Un compte appartient à une ou deux clients
Mais comment dire que le solde de chaque compte peut être
négatif mais sans dépasser la valeur maximale de découvert?
H & H: Research and Training 110 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
Il faut ajouter une contrainte
Client
nom
prenom
dateNaissance
Compte
numéro
solde
valMaxDecouvert
créditer(int x)
déditer(int x)
{(Compte.solde + Compte.valMaxDecouvert)>=0} 1..*
1..2
Remarque
Si on ajoute le nom d’association + les rôles, l’association deviendra
trop dense et presque illisible.
H & H: Research and Training 111 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
Solution : utiliser OCL
Object Constraint Language
Initialement, un projet d’IBM
Appartenant à UML depuis UML 1.1
Langage formel d’expression
Permettant de définir des contraintes sur les différents diagrammes d’UML, et en
particulier le diagramme de classes
Basé sur la théorie des ensembles et la logique des prédicats
Permettant principalement d’exprimer 2 types de contraintes sur l’état d’un objet
ou d’un ensemble d’objets
Des invariants qui doivent être respectés en permanence
Des pré et post-conditions pour une opération
H & H: Research and Training 112 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
Deux versions d’OCL
OCL 1 : intégré dans UML 1.1 de l’OMG
OCL 2 : intégré dans UML 2.0 et pouvant être généralisé sur
d’autres modèles que ceux d’UML
H & H: Research and Training 113 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
Avec OCL, les contraintes peuvent être définies un peu loin de l’association
Dans ce cas, il faut
préciser le contexte
définir la contrainte
context Compte
inv : solde + valMaxDecouvert >= 0
H & H: Research and Training 114 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
Avec OCL, les contraintes peuvent être définies un peu loin de l’association
Dans ce cas, il faut
préciser le contexte
définir la contrainte
context Compte
inv : solde + valMaxDecouvert >= 0
Explication
context : indique l’élément concerné par la contrainte
inv (pour invariant) : exprime une contrainte sur un élément qui doit être
respectée en permanence.
H & H: Research and Training 114 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
On peut définir plusieurs contraintes
context Compte
inv : solde + valMaxDecouvert >= 0
context Compte::débiter(int somme )
pre : somme > 0 and solde + valMaxDecouvert >= somme
post : solde = solde@pre - somme
H & H: Research and Training 115 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
On peut définir plusieurs contraintes
context Compte
inv : solde + valMaxDecouvert >= 0
context Compte::débiter(int somme )
pre : somme > 0 and solde + valMaxDecouvert >= somme
post : solde = solde@pre - somme
Explication
context : indique l’élément concerné par la contrainte (ici la méthode
débiter() de la classe Compte)
pre : exprime une contrainte sur un élément qui doit être respectée pour
que l’appel de la méthode soit valide
post : exprime une contrainte sur un élément qui doit être respectée
après l’appel de la méthode
H & H: Research and Training 115 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Les contraintes avec UML
4 contraintes possibles pour les collections
Set : ensemble mathématique sans doublons et sans ordre
Ordered : ensemble mathématique sans doublons et avec ordre
Bag : ensemble mathématique avec possibilité de doublons et
sans ordre
Sequence : ensemble mathématique avec possibilité de doublons
et avec ordre
H & H: Research and Training 116 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Exemple 1 : un cours est composé d’une séquence ordonnée
(sans doublons) de séances
Séance Cours
{ordered}
1..* 1
H & H: Research and Training 117 / 125
© Achref EL MOUELHI ©
Les contraintes avec UML
Exemple 1 : un cours est composé d’une séquence ordonnée
(sans doublons) de séances
Séance Cours
{ordered}
1..* 1
Exemple 2 : un fichierPPT contient une suite ordonnée (avec
possibilité de doublons) de transparents
Transparent FichierPPT
{sequence} appartient
* 1
H & H: Research and Training 117 / 125
© Achref EL MOUELHI ©
Comment construire un diagramme de classe?
Comment construire un diagramme de classe?
Étapes
1 Préparer un dictionnaire de données
2 Identifier les classes et conserver les classes pertinentes
3 Identifier les associations et conserver les associations
pertinentes
4 Identifier les attributs
5 Vérifier s’il est possible de simplifier en utilisant l’héritage
6 Itérer et affiner le diagramme
H & H: Research and Training 118 / 125
© Achref EL MOUELHI ©
Comment construire un diagramme de classe?
Comment construire un diagramme de classe?
Étape 1 : Préparer un dictionnaire de données
Lire le texte
Extraire tout nom ou verbe pouvant participer à notre système
d’information
Garder les synonymes tant qu’on n’a pas fini la lecture du texte
Vérifier que la liste ne contient pas de doublons
H & H: Research and Training 119 / 125
© Achref EL MOUELHI ©
Comment construire un diagramme de classe?
Comment construire un diagramme de classe?
Étape 2 : Identifier les classes et conserver les classes pertinentes
Éviter d’être trop sélectif
Ne pas chercher l’héritage à cette étape
Éliminer les classes redondantes, les synonymes, les classes
vagues ou les classes sans lien avec le contexte
H & H: Research and Training 120 / 125
© Achref EL MOUELHI ©
Comment construire un diagramme de classe?
Comment construire un diagramme de classe?
Étape 3 : Identifier les associations et conserver les associations
pertinentes
Justifier l’existence d’un cycle car c’est souvent redondant
Décomposer les associations n-aires en associations binaires
Vérifier si les associations définies par rapport aux classes filles
peuvent être remontées à la classe mère
H & H: Research and Training 121 / 125
© Achref EL MOUELHI ©
Comment construire un diagramme de classe?
Comment construire un diagramme de classe?
Étape 4 : Identifier les attributs
Ne pas confondre attribut et classe
Ne pas pousser la recherche des attributs à l’extrême
Supprimer les synonymes
Faire attention aux attributs de classe association
Supprimer les attributs dérivés
Source : UML 2 De l’apprentissage à la pratique de Laurent Audibert
Les attributs dérivés peuvent être calculés à partir d’autres attributs et de formules de
calcul. Lors de la conception, un attribut dérivé peut être utilisé comme marqueur
jusqu’à ce que vous puissiez déterminer les règles à lui appliquer.
Les attributs dérivés sont symbolisés par l’ajout d’un  /  devant leur nom.
H  H: Research and Training 122 / 125
© Achref EL MOUELHI ©
Comment construire un diagramme de classe?
Comment construire un diagramme de classe?
Étape 5 : Vérifier s’il est possible de simplifier en utilisant l’héritage
Vérifier si certaines classes partagent certains attributs et/ou
méthodes
Éviter les raffinements excessifs
H  H: Research and Training 123 / 125
© Achref EL MOUELHI ©
Comment construire un diagramme de classe?
Comment construire un diagramme de classe?
Étape 6 : Itérer et affiner le diagramme
Ne pas chercher un diagramme complet à la première passe
Faire des itérations continuelles
Vérifier le diagramme de classe après avoir fini les diagrammes
d’états-transitions et de séquences
Revenir sur le diagramme de classe après avoir fini les
diagrammes d’états-transitions et de séquences
Garder la possibilité de corriger des éventuelles anomalies du
diagramme de classe pendant la phase de développement
H  H: Research and Training 124 / 125
© Achref EL MOUELHI ©
Comment construire un diagramme de classe?
Comment construire un diagramme de classe?
Citation 1 : Jan van de Sneptscheut
La différence entre la théorie et la pratique, c’est qu’en théorie, il n’y a
pas de différence entre la théorie et la pratique, mais qu’en pratique, il
y en a une.
Citation 2 : Albert Einstein
La théorie, c’est quand on sait tout et que rien ne fonctionne. La
pratique, c’est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et
personne ne sait pourquoi!
H  H: Research and Training 125 / 125

Contenu connexe

Similaire à coursUMLDiagrammeClasse.pdf

AUF11 - 01 Introduction
AUF11 - 01 IntroductionAUF11 - 01 Introduction
AUF11 - 01 Introductionotb
 
Algo vol.2 sujets
Algo vol.2   sujetsAlgo vol.2   sujets
Algo vol.2 sujetschrisdilane
 
Uml 2 pratique de la modélisation
Uml 2  pratique de la modélisationUml 2  pratique de la modélisation
Uml 2 pratique de la modélisationNassim Amine
 
Isabelle Dubois-Mejia (Thales) : témoignage sur un module e-learning accessible
Isabelle Dubois-Mejia (Thales) : témoignage sur un module e-learning accessibleIsabelle Dubois-Mejia (Thales) : témoignage sur un module e-learning accessible
Isabelle Dubois-Mejia (Thales) : témoignage sur un module e-learning accessibleFFFOD
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPkemenaran
 
Introduction of the most important design pattern
Introduction of the most important design patternIntroduction of the most important design pattern
Introduction of the most important design patternThierry Gayet
 
EIAH, les mots pour la recherche
EIAH, les mots pour la rechercheEIAH, les mots pour la recherche
EIAH, les mots pour la rechercheNicolas Balacheff
 
Xavier Hennequin (Kelis) : chaîne éditoriale et accessibilité
Xavier Hennequin (Kelis) : chaîne éditoriale et accessibilitéXavier Hennequin (Kelis) : chaîne éditoriale et accessibilité
Xavier Hennequin (Kelis) : chaîne éditoriale et accessibilitéFFFOD
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelleAssociation Agile Nantes
 
Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011agnes_crepet
 
Cycobj formation-initiation-a-la-programmation-objet
Cycobj formation-initiation-a-la-programmation-objetCycobj formation-initiation-a-la-programmation-objet
Cycobj formation-initiation-a-la-programmation-objetCERTyou Formation
 
Forum international HERACLES "centre de langues" (Sherbrooke juin 2013)
Forum international HERACLES "centre de langues" (Sherbrooke juin 2013)Forum international HERACLES "centre de langues" (Sherbrooke juin 2013)
Forum international HERACLES "centre de langues" (Sherbrooke juin 2013)Jean-Luc Bergey
 

Similaire à coursUMLDiagrammeClasse.pdf (20)

AUF11 - 01 Introduction
AUF11 - 01 IntroductionAUF11 - 01 Introduction
AUF11 - 01 Introduction
 
.NET
.NET.NET
.NET
 
Plasticitérecherche2015 2
Plasticitérecherche2015 2Plasticitérecherche2015 2
Plasticitérecherche2015 2
 
Algo vol.2 sujets
Algo vol.2   sujetsAlgo vol.2   sujets
Algo vol.2 sujets
 
Uml 2 pratique de la modélisation
Uml 2  pratique de la modélisationUml 2  pratique de la modélisation
Uml 2 pratique de la modélisation
 
Isabelle Dubois-Mejia (Thales) : témoignage sur un module e-learning accessible
Isabelle Dubois-Mejia (Thales) : témoignage sur un module e-learning accessibleIsabelle Dubois-Mejia (Thales) : témoignage sur un module e-learning accessible
Isabelle Dubois-Mejia (Thales) : témoignage sur un module e-learning accessible
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Cours de Génie Logiciel / ESIEA 2013-2014
Cours de Génie Logiciel / ESIEA 2013-2014 Cours de Génie Logiciel / ESIEA 2013-2014
Cours de Génie Logiciel / ESIEA 2013-2014
 
Introduction of the most important design pattern
Introduction of the most important design patternIntroduction of the most important design pattern
Introduction of the most important design pattern
 
Uml 2
Uml 2Uml 2
Uml 2
 
EIAH, les mots pour la recherche
EIAH, les mots pour la rechercheEIAH, les mots pour la recherche
EIAH, les mots pour la recherche
 
CM uml-concepts-avances
CM uml-concepts-avancesCM uml-concepts-avances
CM uml-concepts-avances
 
Xavier Hennequin (Kelis) : chaîne éditoriale et accessibilité
Xavier Hennequin (Kelis) : chaîne éditoriale et accessibilitéXavier Hennequin (Kelis) : chaîne éditoriale et accessibilité
Xavier Hennequin (Kelis) : chaîne éditoriale et accessibilité
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelle
 
Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011
 
Cycobj formation-initiation-a-la-programmation-objet
Cycobj formation-initiation-a-la-programmation-objetCycobj formation-initiation-a-la-programmation-objet
Cycobj formation-initiation-a-la-programmation-objet
 
Certification java oca
Certification java ocaCertification java oca
Certification java oca
 
Forum international HERACLES "centre de langues" (Sherbrooke juin 2013)
Forum international HERACLES "centre de langues" (Sherbrooke juin 2013)Forum international HERACLES "centre de langues" (Sherbrooke juin 2013)
Forum international HERACLES "centre de langues" (Sherbrooke juin 2013)
 
Intro ihm
Intro ihmIntro ihm
Intro ihm
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 

coursUMLDiagrammeClasse.pdf

  • 1. UML : concept objet et diagramme de classes Achref El Mouelhi Docteur de l’université d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ingénieur en génie logiciel elmouelhi.achref@gmail.com H & H: Research and Training 1 / 125
  • 2. Plan 1 Introduction 2 L’évolution des langages 3 Le concept objet 4 La notion de classe 5 L’encapsulation 6 Les relations entre classes La navigabilité Les rôles Les classes liées par plusieurs associations L’auto-association Les associations n-aires H & H: Research and Training 2 / 125
  • 3. Plan 7 Les associations particulières L’héritage L’agrégation La composition La dépendance 8 La multiplicité 9 La classe d’association 10 Le polymorphisme 11 Les classes abstraite et finale 12 Les interfaces 13 Les contraintes avec UML 14 Comment construire un diagramme de classe? H & H: Research and Training 3 / 125
  • 4. © Achref EL MOUELHI © Introduction Introduction Diagramme de Classe Le diagramme de structure le plus important dans la réalisation d’un projet Utilisant le concept objet Pouvant être transformé, en respectant certaines règles, en MCD (le modèle conceptuel de données de Merise) H & H: Research and Training 4 / 125
  • 5. © Achref EL MOUELHI © Introduction Introduction Les éléments de base dans un diagramme de classe Classe Attribut Méthode Association Multiplicité H & H: Research and Training 5 / 125
  • 6. © Achref EL MOUELHI © L’évolution des langages Introduction Histoire de la programmation Langage machine 1ere génération 1940 Assembleur 2eme génération Programmation structurée 3eme génération Programmation orientée objet 4eme génération H & H: Research and Training 6 / 125
  • 7. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation Langage machine Le langage natif d’un processeur (langage de bas niveau) Les traitements (les instructions) et les données (les variables) sont tous codés en binaire (suite des 0 et 1) H & H: Research and Training 7 / 125
  • 8. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation Langage machine Le langage natif d’un processeur (langage de bas niveau) Les traitements (les instructions) et les données (les variables) sont tous codés en binaire (suite des 0 et 1) Remarque La lisibilité est extrêmement difficile La réutilisation est quasi-impossible La notion de module n’existe pas H & H: Research and Training 7 / 125
  • 9. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation L’assembleur Une réécriture plus lisible du langage machine Une instruction est formée de nom de l’opération (mov, add...) et d’une ou plusieurs opérandes (variables) Un programme assembleur est traduit en langage machine H & H: Research and Training 8 / 125
  • 10. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation L’assembleur Une réécriture plus lisible du langage machine Une instruction est formée de nom de l’opération (mov, add...) et d’une ou plusieurs opérandes (variables) Un programme assembleur est traduit en langage machine Remarque La lisibilité est légèrement meilleure mais reste difficile La réutilisation est toujours quasi-impossible La notion de module n’existe toujours pas H & H: Research and Training 8 / 125
  • 11. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation La programmation structurée (ou procédurale) Un programme est composé d’un ensemble d’appel à des procédures réalisant chacune une tâche bien définie Une procédure peut appeler plusieurs procédures (y compris elle-même, on parle dans ce cas de récursivité) H & H: Research and Training 9 / 125
  • 12. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation La programmation structurée (ou procédurale) Un programme est composé d’un ensemble d’appel à des procédures réalisant chacune une tâche bien définie Une procédure peut appeler plusieurs procédures (y compris elle-même, on parle dans ce cas de récursivité) Remarque La lisibilité est considérablement améliorée Une procédure peut être appelée plusieurs fois par plusieurs procédures différentes (la réutilisation est nettement améliorée) Apparition de notion de module H & H: Research and Training 9 / 125
  • 13. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation La programmation orientée objet Tout concept, idée, opération... est considéré comme un objet Un objet peut contenir certains autres objets et avoir des relations avec certains autres Chaque objet possède une structure interne et peut avoir plusieurs états différents H & H: Research and Training 10 / 125
  • 14. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation La programmation orientée objet Tout concept, idée, opération... est considéré comme un objet Un objet peut contenir certains autres objets et avoir des relations avec certains autres Chaque objet possède une structure interne et peut avoir plusieurs états différents Remarque Tout passe par des objets. Un programme correspond à un ensemble d’instanciation d’objets : facile à lire Un objet peut être instancié et utilisé par plusieurs autres objets (ce qui facilite la réutilisation des objets) Amélioration de la notion de module (Package) H & H: Research and Training 10 / 125
  • 15. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation Remarque Certains compilateurs traduisent les codes soit en langage machine, soit en assembleur, soit en langage de programmation d’un niveau inférieur Certains compilateurs sont implémentés avec d’autres langages de programmation (par example la machine virtuelle de Java qui est implémentée en C++...) H & H: Research and Training 11 / 125
  • 16. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation Pourquoi autant de génération? (Plus) de problème de mémoire Des processeurs plus rapides Besoins différents COBOL : pour les systèmes de gestion Java : pour les problèmes complexes LISP : pour les programmes d’intelligence artificielle PROLOG : pour les problèmes de logique H & H: Research and Training 12 / 125
  • 17. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation Orientée objet Évolution de LOO Simula (1967) Smalltalk (1971 puis 1980) C++ (1983) Python (1989) Java (1995) C# (2002) PHP (depuis la version 5 sortie en 2004) ... H & H: Research and Training 13 / 125
  • 18. © Achref EL MOUELHI © L’évolution des langages L’historique de la programmation Orientée objet Évolution de LOO Simula (1967) Smalltalk (1971 puis 1980) C++ (1983) Python (1989) Java (1995) C# (2002) PHP (depuis la version 5 sortie en 2004) ... La plupart des langages de programmation ont proposé une nouvelle version orientée objet H & H: Research and Training 13 / 125
  • 19. © Achref EL MOUELHI © L’évolution des langages La programmation orientée objet Deux catégories de LOO Les langages à classes : Java, C++, Python... Les langages à prototypes : JavaScript H & H: Research and Training 14 / 125
  • 20. © Achref EL MOUELHI © L’évolution des langages La programmation orientée objet Pourquoi un LOO? Supporté par tous les systèmes d’exploitation Adopté par Microsoft Adopté par les universitaires (en enseignement et en recherche) Adopté par la communauté OPEN SOURCE Adopté par les grandes entreprises ... H & H: Research and Training 15 / 125
  • 21. © Achref EL MOUELHI © Le concept objet Le concept objet Qu’est ce qu’un objet? Une représentation miniature d’un objet réel Tout concept du monde réel est modélisé par un objet Un outil sur lequel se baser pour créer des choses qui n’existent pas encore Nous pouvons le considérer comme une boite noire : inaccessible directement qu’à travers une interface H & H: Research and Training 16 / 125
  • 22. © Achref EL MOUELHI © Le concept objet Le concept objet Un objet est une entité autonome véritable petit programme possède une durée de vie possède un état : un ensemble de valeurs accessible au monde extérieur via une interface H & H: Research and Training 17 / 125
  • 23. © Achref EL MOUELHI © Le concept objet Le concept objet Un objet est une entité autonome véritable petit programme possède une durée de vie possède un état : un ensemble de valeurs accessible au monde extérieur via une interface Un programme est composé de plusieurs objets autonomes qui vont interagir entre eux H & H: Research and Training 17 / 125
  • 24. © Achref EL MOUELHI © Le concept objet Le concept objet De quoi est composé un objet? un ensemble d’attributs (chaque attribut a un nom et une valeur) ≡ données (qui définissent l’aspect statique de l’objet) un ensemble de méthodes (des fonctions, comme en programmation procédurale, dédiées à un type d’objet) ≡ traitements (qui définissent l’aspect dynamique de l’objet) H & H: Research and Training 18 / 125
  • 25. © Achref EL MOUELHI © Le concept objet Le concept objet Les attributs un attribut, selon le contexte, peut être aussi appelé champ ou variable d’instance un attribut peut avoir un type (ce n’est pas une obligation, tout dépend du langage de programmation) chaı̂ne de caractère entier booléen date ... H & H: Research and Training 19 / 125
  • 26. © Achref EL MOUELHI © Le concept objet Le concept objet Remarque Un objet peut avoir comme attribut un autre objet Comme les fonctions en programmation procédurale, une méthode peut appeler plusieurs autres Contrairement à la programmation procédurale, les données et les traitements ne sont pas séparés H & H: Research and Training 20 / 125
  • 27. © Achref EL MOUELHI © Le concept objet Le concept objet Exemple : maVoiture Une voiture peut avoir comme attribut numéro d’immatriculation (chaı̂ne ou entier) marque (chaı̂ne) modèle (chaı̂ne ou entier) puissance (entier) couleur (chaı̂ne) ... elle peut avoir comme méthode avancer reculer freiner klaxonner ... H & H: Research and Training 21 / 125
  • 28. © Achref EL MOUELHI © Le concept objet Le concept objet Exemple : voiture numéro d’immatriculation : LY 069 ON marque : Peugeot modèle : 3008 puissance : 8 couleur : blanche H & H: Research and Training 22 / 125
  • 29. © Achref EL MOUELHI © Le concept objet Le concept objet Exemple : voiture numéro d’immatriculation : LY 069 ON marque : Peugeot modèle : 3008 puissance : 8 couleur : blanche L’ensemble de valeurs d’un objet définit son état H & H: Research and Training 22 / 125
  • 30. © Achref EL MOUELHI © Le concept objet Le concept objet Exemple : voiture numéro d’immatriculation : LY 069 ON marque : Peugeot modèle : 3008 puissance : 8 couleur : blanche L’ensemble de valeurs d’un objet définit son état Si je repeins la voiture précédente en noir (couleur = noir) alors nous disons que l’objet a changé d’état H & H: Research and Training 22 / 125
  • 31. © Achref EL MOUELHI © Le concept objet Le concept objet Exemple : voiture numéro d’immatriculation : LY 069 ON marque : Peugeot modèle : 3008 puissance : 8 couleur : blanche L’ensemble de valeurs d’un objet définit son état Si je repeins la voiture précédente en noir (couleur = noir) alors nous disons que l’objet a changé d’état La voiture peut donc changer d’état mais il s’agit toujours du même objet H & H: Research and Training 22 / 125
  • 32. © Achref EL MOUELHI © Le concept objet Le concept objet Attention Ne pas confondre objets identiques et objets égaux H & H: Research and Training 23 / 125
  • 33. © Achref EL MOUELHI © Le concept objet Le concept objet Attention Ne pas confondre objets identiques et objets égaux Deux objets sont égaux si, au moment de comparaison, leurs attributs respectifs ont les mêmes valeurs H & H: Research and Training 23 / 125
  • 34. © Achref EL MOUELHI © Le concept objet Le concept objet Attention Ne pas confondre objets identiques et objets égaux Deux objets sont égaux si, au moment de comparaison, leurs attributs respectifs ont les mêmes valeurs Deux objets sont identiques s’ils ont le même OID (Object IDentifier) H & H: Research and Training 23 / 125
  • 35. © Achref EL MOUELHI © Le concept objet Le concept objet Attention Ne pas confondre objets identiques et objets égaux Deux objets sont égaux si, au moment de comparaison, leurs attributs respectifs ont les mêmes valeurs Deux objets sont identiques s’ils ont le même OID (Object IDentifier) Si deux objets sont identiques alors ils sont aussi égaux H & H: Research and Training 23 / 125
  • 36. © Achref EL MOUELHI © Le concept objet Le concept objet Attention Ne pas confondre objets identiques et objets égaux Deux objets sont égaux si, au moment de comparaison, leurs attributs respectifs ont les mêmes valeurs Deux objets sont identiques s’ils ont le même OID (Object IDentifier) Si deux objets sont identiques alors ils sont aussi égaux La réciproque est bien évidemment fausse H & H: Research and Training 23 / 125
  • 37. © Achref EL MOUELHI © Le concept objet Le concept objet Exercice d’application Définissons un objet monLivre de type Livre H & H: Research and Training 24 / 125
  • 38. © Achref EL MOUELHI © Le concept objet Le concept objet Exercice d’application Définissons un objet monLivre de type Livre Déterminons ses principaux attributs ainsi que leurs valeurs H & H: Research and Training 24 / 125
  • 39. © Achref EL MOUELHI © Le concept objet Le concept objet Exercice d’application Définissons un objet monLivre de type Livre Déterminons ses principaux attributs ainsi que leurs valeurs Définissons ses méthodes de base H & H: Research and Training 24 / 125
  • 40. © Achref EL MOUELHI © Le concept objet Le concept objet Cycle de vie Création : se réalise via une méthode spécifique dite constructeur H & H: Research and Training 25 / 125
  • 41. © Achref EL MOUELHI © Le concept objet Le concept objet Cycle de vie Création : se réalise via une méthode spécifique dite constructeur L’objet sera par la suite utilisé pour effectuer des tâches bien précises H & H: Research and Training 25 / 125
  • 42. © Achref EL MOUELHI © Le concept objet Le concept objet Cycle de vie Création : se réalise via une méthode spécifique dite constructeur L’objet sera par la suite utilisé pour effectuer des tâches bien précises Destruction : selon le LOO soit d’une façon implicite quand on ne fait plus référence à l’objet (comme en Java, C#...), soit d’une façon explicite en appelant une méthode bien spécifique destructeur (comme en PHP, C++...) H & H: Research and Training 25 / 125
  • 43. © Achref EL MOUELHI © Le concept objet Le concept objet Le garbage collector (ramasse miettes) C’est le destructeur d’objets en Java, C# et Smalltalk Il détruit automatiquement les objets qui ne sont plus utilisés Un objet n’est plus utilisé s’il n’est plus référencé Lorsque le garbage collector se déclenche, il détruit les objets non-utilisés H & H: Research and Training 26 / 125
  • 44. © Achref EL MOUELHI © La notion de classe La notion de classe Qu’est ce qu’une classe en POO? Ça correspond à un plan, un moule, une usine... C’est une description abstraite d’un type d’objets Elle regroupe un ensemble d’objets ayant les mêmes propriétés statiques (attributs) et dynamiques (méthodes) Qu’est ce que c’est la notion d’instance? Une instance correspond à un objet créé à partir d’une classe (via le constructeur) H & H: Research and Training 27 / 125
  • 45. © Achref EL MOUELHI © La notion de classe La notion de classe Qu’est ce qu’une classe en POO? Ça correspond à un plan, un moule, une usine... C’est une description abstraite d’un type d’objets Elle regroupe un ensemble d’objets ayant les mêmes propriétés statiques (attributs) et dynamiques (méthodes) Qu’est ce que c’est la notion d’instance? Une instance correspond à un objet créé à partir d’une classe (via le constructeur) L’instanciation : création d’un objet d’une classe H & H: Research and Training 27 / 125
  • 46. © Achref EL MOUELHI © La notion de classe La notion de classe Qu’est ce qu’une classe en POO? Ça correspond à un plan, un moule, une usine... C’est une description abstraite d’un type d’objets Elle regroupe un ensemble d’objets ayant les mêmes propriétés statiques (attributs) et dynamiques (méthodes) Qu’est ce que c’est la notion d’instance? Une instance correspond à un objet créé à partir d’une classe (via le constructeur) L’instanciation : création d’un objet d’une classe instance ≡ objet H & H: Research and Training 27 / 125
  • 47. © Achref EL MOUELHI © La notion de classe La notion de classe Dans un digramme de classes UML Une classe est représentée par un classeur contenant trois parties : première partie dédiée au nom de la classe seconde partie dédiée aux attributs dernière partie dédiée aux méthodes NomClasse les attributs les méthodes H & H: Research and Training 28 / 125
  • 48. © Achref EL MOUELHI © La notion de classe La notion de classe De quoi est composé une classe? Attribut : visibilité + nom + type LOO faiblement typé, comme PHP, Pyhon..., n’exigent pas un type pour les attributs LOO fortement typé, comme Java, C++..., exigent un type pour chaque attribut Méthode : nom + arguments + valeur de retour ≡ signature : exactement comme les fonctions en procédurale H & H: Research and Training 29 / 125
  • 49. © Achref EL MOUELHI © La notion de classe La notion de classe Remarque Un attribut ou une méthode peut être de classe (static) ou d’instance Un attribut (ou une méthode) est dit static si sa valeur est partagée par tous les objets de la classe H & H: Research and Training 30 / 125
  • 50. © Achref EL MOUELHI © L’encapsulation La notion de classe Une classe peut cacher son implémentation ne montre aux autres objets que ce qu’elle autorise : interface H & H: Research and Training 31 / 125
  • 51. © Achref EL MOUELHI © L’encapsulation La notion de classe Une classe peut cacher son implémentation ne montre aux autres objets que ce qu’elle autorise : interface Propriétés Les objets interagissent les uns avec les autres via les interfaces Ce qui n’est pas dans l’interface n’est ni visible ni accessible aux autres objets H & H: Research and Training 31 / 125
  • 52. © Achref EL MOUELHI © L’encapsulation La notion de classe Une classe peut cacher son implémentation ne montre aux autres objets que ce qu’elle autorise : interface Propriétés Les objets interagissent les uns avec les autres via les interfaces Ce qui n’est pas dans l’interface n’est ni visible ni accessible aux autres objets La dissociation de l’interface et de l’implémentation : encapsulation H & H: Research and Training 31 / 125
  • 53. © Achref EL MOUELHI © L’encapsulation La notion de classe L’encapsulation, pourquoi? Protection des données données inaccessibles de l’extérieur accès uniquement via l’interface possibilité de tracer tous les accès aux données focalisation sur les services rendus par les objets plutôt que sur leur structure H & H: Research and Training 32 / 125
  • 54. © Achref EL MOUELHI © L’encapsulation La notion de classe L’encapsulation, comment? En définissant des niveaux de visibilité Les méthodes comme les attributs sont concernés (Trois) niveaux de visibilités public : visible par tous les autres objets protected : visible par certains objets (à voir plus tard) private : visible seulement depuis l’intérieur de l’objet H & H: Research and Training 33 / 125
  • 55. © Achref EL MOUELHI © L’encapsulation La notion de classe Dans un diagramme de classes On peut utiliser + : pour indiquer que la propriété a une visibilité public - : pour indiquer que la propriété a une visibilité private # : pour indiquer que la propriété a une visibilité protected H & H: Research and Training 34 / 125
  • 56. © Achref EL MOUELHI © L’encapsulation La notion de classe Livre - titre + nbrPages # datePublication ? Dans cet exemple titre a une visibilité private nbrPages a une visibilité public datePublication a une visibilité protected H & H: Research and Training 35 / 125
  • 57. © Achref EL MOUELHI © L’encapsulation La notion de classe Certains langages, comme Smalltalk exige que : les attributs soient private les méthodes soient public H & H: Research and Training 36 / 125
  • 58. © Achref EL MOUELHI © L’encapsulation La notion de classe Certains langages, comme Smalltalk exige que : les attributs soient private les méthodes soient public En Java, PHP C’est juste une convention (une bonne pratique) H & H: Research and Training 36 / 125
  • 59. © Achref EL MOUELHI © L’encapsulation La notion de classe Personne - nom - prenom - dateNaissance + getNom() + getPrenom() + calculerAge() H & H: Research and Training 37 / 125
  • 60. © Achref EL MOUELHI © L’encapsulation La notion de classe Personne - nom - prenom - dateNaissance + getNom() + getPrenom() + calculerAge() Encapsulation Seules les trois méthodes getNom(), getPrenom() et calculerAge() sont visibles par les autres objets Les autres objets ignorent l’existence de l’attribut dateNaissance H & H: Research and Training 37 / 125
  • 61. © Achref EL MOUELHI © L’encapsulation La notion de classe Les méthodes publiques constituent l’interface de la classe sont accessibles de l’extérieur Les méthodes privées sont déclenchées par le biais d’autres méthodes privées ou publiques ne sont pas accessibles depuis l’extérieur ne sont accessible qu’au développeur de la classe H & H: Research and Training 38 / 125
  • 62. © Achref EL MOUELHI © L’encapsulation La notion de classe Question Si les attributs sont toujours privés, comment modifier leurs valeurs? H & H: Research and Training 39 / 125
  • 63. © Achref EL MOUELHI © L’encapsulation La notion de classe Question Si les attributs sont toujours privés, comment modifier leurs valeurs? Réponse Les getters (accesseurs) pour récupérer la valeur (getNomAttribut()) Les setters (mutateurs) pour modifier la valeur (setNomAttribut()) H & H: Research and Training 39 / 125
  • 64. © Achref EL MOUELHI © L’encapsulation La notion de classe Exercice Définir les getters/setters de la classe Livre Livre - titre - nbrPages - datePublication ? H & H: Research and Training 40 / 125
  • 65. © Achref EL MOUELHI © L’encapsulation La notion de classe Comment créer un objet d’une classe? en utilisant le constructeur de la classe en invoquant l’opérateur new H & H: Research and Training 41 / 125
  • 66. © Achref EL MOUELHI © L’encapsulation La notion de classe Comment créer un objet d’une classe? en utilisant le constructeur de la classe en invoquant l’opérateur new Qu’est ce qu’un constructeur? une méthode particulière et spécifique à chaque classe elle porte le nom de la classe et n’a pas de valeur de retour H & H: Research and Training 41 / 125
  • 67. © Achref EL MOUELHI © L’encapsulation La notion de classe Exemple En Java, C++, PHP, C#, TypeScript : new Personne(); En Smalltalk : Personne new H & H: Research and Training 42 / 125
  • 68. © Achref EL MOUELHI © L’encapsulation La notion de classe Récapitulons Une classe a : des attributs des méthodes dont le constructeur les getters les setters H & H: Research and Training 43 / 125
  • 69. © Achref EL MOUELHI © Les relations entre classes Relations entre classes Considérons la classe Adresse : Adresse rue ville codePostal H & H: Research and Training 44 / 125
  • 70. © Achref EL MOUELHI © Les relations entre classes Relations entre classes Considérons la classe Adresse : Adresse rue ville codePostal Hypothèse Supposant que chaque personne possède une adresse (objet créé à partir de la classe Adresse) H & H: Research and Training 44 / 125
  • 71. © Achref EL MOUELHI © Les relations entre classes Relations entre classes Comment schématiser cela en UML? En ajoutant dans la classe Personne un attribut adresse de type Adresse? Personne nom prenom dateNaissance adresse Adresse rue ville codePostal H & H: Research and Training 45 / 125
  • 72. © Achref EL MOUELHI © Les relations entre classes Relations entre classes Comment schématiser cela en UML? En ajoutant dans la classe Personne un attribut adresse de type Adresse? Personne nom prenom dateNaissance adresse Adresse rue ville codePostal H & H: Research and Training 45 / 125
  • 73. © Achref EL MOUELHI © Les relations entre classes Relations entre classes En reliant les deux classes (sommets d’un graphe) par une arête Personne nom prenom dateNaissance Adresse rue ville codePostal H & H: Research and Training 46 / 125
  • 74. © Achref EL MOUELHI © Les relations entre classes Relations entre classes En reliant les deux classes (sommets d’un graphe) par une arête Personne nom prenom dateNaissance Adresse rue ville codePostal Relation entre classes = association H & H: Research and Training 46 / 125
  • 75. © Achref EL MOUELHI © Les relations entre classes Relations entre classes L’association peut être nommée Personne nom prenom dateNaissance Adresse rue ville codePostal possède H & H: Research and Training 47 / 125
  • 76. © Achref EL MOUELHI © Les relations entre classes Relations entre classes On peut aussi indiquer le sens de la lecture Personne nom prenom dateNaissance Adresse rue ville codePostal possède > H & H: Research and Training 48 / 125
  • 77. © Achref EL MOUELHI © Les relations entre classes Relations entre classes On peut aussi ajouter deux noms à l’association : un pour chaque sens de lecture Personne nom prenom dateNaissance Adresse rue ville codePostal possède > < appartient H & H: Research and Training 49 / 125
  • 78. © Achref EL MOUELHI © Les relations entre classes La navigabilité Relations entre classes Comment faire pour rendre la relation bidirectionnelle? Pour une personne, on peut connaı̂tre son adresse Et pour une adresse, on peut connaı̂tre son propriétaire H & H: Research and Training 50 / 125
  • 79. © Achref EL MOUELHI © Les relations entre classes La navigabilité Relations entre classes L’association est maintenant bidirectionnelle Personne nom prenom dateNaissance Adresse rue ville codePostal possède H & H: Research and Training 51 / 125
  • 80. © Achref EL MOUELHI © Les relations entre classes La navigabilité Les trois associations suivantes sont unidirectionnelles et équivalentes Personne nom prenom dateNaissance Adresse rue ville codePostal Personne nom prenom dateNaissance Adresse rue ville codePostal Personne nom prenom dateNaissance Adresse rue ville codePostal H & H: Research and Training 52 / 125
  • 81. © Achref EL MOUELHI © Les relations entre classes Les rôles Relations entre classes On peut définir des rôles Personne nom prenom dateNaissance Université nom ville enseigne > employeur enseignant H & H: Research and Training 53 / 125
  • 82. © Achref EL MOUELHI © Les relations entre classes Les rôles Relations entre classes On peut définir des rôles Personne nom prenom dateNaissance Université nom ville enseigne > employeur enseignant Explication Le rôle d’une Personne dans une Université est enseignant Le rôle d’une Université pour une Personne est employeur H & H: Research and Training 53 / 125
  • 83. © Achref EL MOUELHI © Les relations entre classes Les classes liées par plusieurs associations Relations entre classes On peut définir une ou plusieurs associations entre deux classes Employé nom prenom dateNaissance Entreprise nom ville travaille > peut diriger > H & H: Research and Training 54 / 125
  • 84. © Achref EL MOUELHI © Les relations entre classes Les classes liées par plusieurs associations Relations entre classes On peut définir une ou plusieurs associations entre deux classes Employé nom prenom dateNaissance Entreprise nom ville travaille > peut diriger > Deux associations possibles entre Employé et Entreprise Un Employé travaille dans une Entreprise Un Employé peut diriger une Entreprise H & H: Research and Training 54 / 125
  • 85. © Achref EL MOUELHI © Les relations entre classes L’auto-association Relations entre classes Remarque Une association peut concerner une seule classe H & H: Research and Training 55 / 125
  • 86. © Achref EL MOUELHI © Les relations entre classes L’auto-association Relations entre classes Exemple d’auto-association Personne nom prenom dateNaissance est l’enfant > est le parent > H & H: Research and Training 56 / 125
  • 87. © Achref EL MOUELHI © Les relations entre classes L’auto-association Relations entre classes Exemple d’auto-association Personne nom prenom dateNaissance est l’enfant > est le parent > Comment lire ça? Une personne est l’enfant d’une autre personne Une personne est le parent d’une autre personne H & H: Research and Training 56 / 125
  • 88. © Achref EL MOUELHI © Les relations entre classes Les associations n-aires Relations entre classes Remarque Toutes les associations, qu’on a vu, sont binaires C’est-à-dire, elles relient au plus deux classes On peut aussi utiliser des associations ternaires voire n-aires H & H: Research and Training 57 / 125
  • 89. © Achref EL MOUELHI © Les relations entre classes Les associations n-aires Relations entre classes Exemple d’association ternaire Cours Salle Étudiant H & H: Research and Training 58 / 125
  • 90. © Achref EL MOUELHI © Les relations entre classes Les associations n-aires Relations entre classes Exemple d’association ternaire Cours Salle Étudiant Toute association non-binaire peut être transformée en un ensemble d’associations binaires. H & H: Research and Training 58 / 125
  • 91. © Achref EL MOUELHI © Les associations particulières Relations entre classes Quatre associations particulières héritage agrégation composition dépendance H & H: Research and Training 59 / 125
  • 92. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes L’héritage, quand? Lorsque deux ou plusieurs classes partagent plusieurs attributs (et méthodes) Lorsqu’une Classe1 est une sorte de Classe2 H & H: Research and Training 60 / 125
  • 93. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Exemple Un enseignant a un nom, un prénom, une date de naissance, un salaire et une date de recrutement H & H: Research and Training 61 / 125
  • 94. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Exemple Un enseignant a un nom, un prénom, une date de naissance, un salaire et une date de recrutement Un étudiant a aussi un nom, un prénom, une date de naissance et un niveau H & H: Research and Training 61 / 125
  • 95. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Exemple Un enseignant a un nom, un prénom, une date de naissance, un salaire et une date de recrutement Un étudiant a aussi un nom, un prénom, une date de naissance et un niveau Sémantiquement, enseignant et étudiant sont une sorte de personne H & H: Research and Training 61 / 125
  • 96. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Exemple Un enseignant a un nom, un prénom, une date de naissance, un salaire et une date de recrutement Un étudiant a aussi un nom, un prénom, une date de naissance et un niveau Sémantiquement, enseignant et étudiant sont une sorte de personne En plus, les deux partagent plusieurs attributs tels que nom, prénom et date de naissance H & H: Research and Training 61 / 125
  • 97. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Exemple Un enseignant a un nom, un prénom, une date de naissance, un salaire et une date de recrutement Un étudiant a aussi un nom, un prénom, une date de naissance et un niveau Sémantiquement, enseignant et étudiant sont une sorte de personne En plus, les deux partagent plusieurs attributs tels que nom, prénom et date de naissance Donc, on peut mettre en commun les attributs nom, prénom, date de naissance dans une classe Personne H & H: Research and Training 61 / 125
  • 98. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Exemple Un enseignant a un nom, un prénom, une date de naissance, un salaire et une date de recrutement Un étudiant a aussi un nom, un prénom, une date de naissance et un niveau Sémantiquement, enseignant et étudiant sont une sorte de personne En plus, les deux partagent plusieurs attributs tels que nom, prénom et date de naissance Donc, on peut mettre en commun les attributs nom, prénom, date de naissance dans une classe Personne Les classes Étudiant et Enseignant hériteront de la classe Personne H & H: Research and Training 61 / 125
  • 99. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes L’héritage, pourquoi? Pour : réutiliser le code éviter la duplication de constituants (attributs, méthodes) H & H: Research and Training 62 / 125
  • 100. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes L’héritage, pourquoi? Pour : réutiliser le code éviter la duplication de constituants (attributs, méthodes) Comment faire l’héritage en UML? H & H: Research and Training 62 / 125
  • 101. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Étape 1 : Mettre les propriétés en commun (nom, prenom et dateNaissance) dans une nouvelle classe Personne Personne nom prenom dateNaissance Enseignant salaire dateRecrutement Étudiant niveau H & H: Research and Training 63 / 125
  • 102. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Étape 2 : Relier par une flèche les deux classes Étudiant et Enseignant à la classe Personne Personne nom prenom dateNaissance Enseignant salaire dateRecrutement Étudiant niveau H & H: Research and Training 64 / 125
  • 103. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Terminologie La classe Personne est appelée : classe mère, super classe, classe parente, classe racine... Les classes Étudiant et Enseignant sont appelées : classes filles, sous-classes, classes dérivées... On dit aussi que les classes Étudiant et Enseignant héritent de la classe Personne H & H: Research and Training 65 / 125
  • 104. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes L’héritage, pourquoi? Représenter l’ordre naturel des classes (hiérarchie) Organiser sémantiquement et symboliquement les classes Spécifier ou généraliser une classe H & H: Research and Training 66 / 125
  • 105. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes L’héritage, pourquoi? Représenter l’ordre naturel des classes (hiérarchie) Organiser sémantiquement et symboliquement les classes Spécifier ou généraliser une classe Qu’est ce que la généralisation? ajouter une classe au dessus d’une autre H & H: Research and Training 66 / 125
  • 106. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes L’héritage, pourquoi? Représenter l’ordre naturel des classes (hiérarchie) Organiser sémantiquement et symboliquement les classes Spécifier ou généraliser une classe Qu’est ce que la généralisation? ajouter une classe au dessus d’une autre Qu’est ce que la spécialisation? ajouter une classe au dessous d’une autre H & H: Research and Training 66 / 125
  • 107. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes L’héritage : propriétés Transitivité : si A hérite de B et B hérite de C, alors A hérite de C Non-réflexif : une classe n’hérite pas d’elle même Non-symétrique : si A hérite de B, alors B n’hérite pas de A Non-cyclique : si A hérite de B et B hérite de C, alors C ne peut hériter de A H & H: Research and Training 67 / 125
  • 108. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Qu’est ce que l’héritage multiple? le fait d’hériter de plusieurs classes au même temps H & H: Research and Training 68 / 125
  • 109. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Qu’est ce que l’héritage multiple? le fait d’hériter de plusieurs classes au même temps L’héritage multiple, est-il possible? autorisé par certains LOO comme : OCaml, Eiffel... interdit par certains autres : PHP, Java... H & H: Research and Training 68 / 125
  • 110. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Quel problème peut poser l’héritage multiple? Un problème de confusion (nommage) : si une classe A hérite de deux classes B et C qui ont un attribut ou une méthode en commun H & H: Research and Training 69 / 125
  • 111. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Quel problème peut poser l’héritage multiple? Un problème de confusion (nommage) : si une classe A hérite de deux classes B et C qui ont un attribut ou une méthode en commun Les LOO qui interdisent l’héritage multiple proposent soit les interfaces (PHP, Java, C#, TypeScript...) les traits (PHP) l’héritage virtuel (C++) H & H: Research and Training 69 / 125
  • 112. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes En Java Une classe mère peut-elle accéder aux attributs de sa classe fille? Une classe mère peut-elle avoir plusieurs classes filles? Deux classes héritant la même classe peuvent-elles avoir un attribut qui n’est pas dans la classe mère? Une classe fille peut-elle avoir comme uniques attributs et méthodes ceux de la classe mère? H & H: Research and Training 70 / 125
  • 113. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Remarque Dans certains LOO comme Java, C#..., toutes les classes héritent d’une classe racine appelée Object Object offre plusieurs services tels que la conversion d’un objet en chaı̂ne de caractères, le clonage... Object : cette classe racine n’existe pas en PHP... H & H: Research and Training 71 / 125
  • 114. © Achref EL MOUELHI © Les associations particulières L’héritage Relations entre classes Questions Existera t-il une méthode (autre que le constructeur) dans un objet de type Poche? La classe Broché n’a pas d’attribut propre, pourrait-elle être implémentée? Pourrait-on ajouter une relation d’héritage entre Poche et Article? Un livre peut-il être Broché et de Poche? H & H: Research and Training 72 / 125
  • 115. © Achref EL MOUELHI © Les associations particulières L’agrégation Relations entre classes L’agrégation C’est une association non-symétrique Modélisée par un losange vide coté agrégat Elle représente une relation de type ensemble/élément H & H: Research and Training 73 / 125
  • 116. © Achref EL MOUELHI © Les associations particulières L’agrégation Relations entre classes Exemple d’agrégation Voiture marque modèle couleur Pneu dimension poids H & H: Research and Training 74 / 125
  • 117. © Achref EL MOUELHI © Les associations particulières La composition Relations entre classes La composition C’est une agrégation forte modélisée par un losange noir coté agrégat L’élément n’existe pas sans l’agrégat (l’élément est détruit lorsque l’agrégat n’existe plus) L’élément ne peut être en relation qu’avec un seul agrégat H & H: Research and Training 75 / 125
  • 118. © Achref EL MOUELHI © Les associations particulières La composition Relations entre classes Exemple de composition Bâtiment numéro année nbrÉtages Appartement numéro type H & H: Research and Training 76 / 125
  • 119. © Achref EL MOUELHI © Les associations particulières La composition Relations entre classes Questions Si une pièce est détruite, les chaises associées devraient-elles également être détruites? Si une pièce est détruite, les portes associées devraient-elles également être détruites? Si un bâtiment est détruit, les portes associées à ses pièces devraient-elles également être détruites? Si un bâtiment est détruit, les chaises associées à ses pièces devraient-elles également être détruites? H & H: Research and Training 77 / 125
  • 120. © Achref EL MOUELHI © Les associations particulières La dépendance Relations entre classes La dépendance Une première classe utilise une deuxième sans que cette dernière soit un membre de la première H & H: Research and Training 78 / 125
  • 121. © Achref EL MOUELHI © Les associations particulières La dépendance Relations entre classes La dépendance Une première classe utilise une deuxième sans que cette dernière soit un membre de la première Moyenne note1 note2 calcul(Coefficient c) Coefficient coef1 coef2 H & H: Research and Training 78 / 125
  • 122. © Achref EL MOUELHI © Les associations particulières La dépendance Relations entre classes Exercice d’application 1 Les classes suivantes sont liées par une agrégation ou une composition? but et gardien de but voiture et moteur forêt et arbre paragraphe et ligne cinéma et salle salle et chaise enseignant et cours H & H: Research and Training 79 / 125
  • 123. © Achref EL MOUELHI © Les associations particulières La dépendance Relations entre classes Exercice d’application 2 Identifier le type de relation (association, héritage, instanciation, composition, agrégation) qui relie chacun des couples suivants : Corps et Cœur Ford et ConstructeurAutomobile Tracteur et Véhicule Rectangle et Carré Homme et homme Entier et Nombre Chaı̂neDeCaractères et Caractère Homme et Humain H & H: Research and Training 80 / 125
  • 124. © Achref EL MOUELHI © Les associations particulières La dépendance Association Agrégation Composition Pour récapituler Une association est une relation entre deux classes de même niveau conceptuel (aucune des deux n’est plus importante que l’autre) (uses a) Une agrégation est une relation ensemble/élément (has a) Une composition est une relation ensemble/élément tel que l’élément n’existe plus si l’ensemble est détruit (owns a) L’héritage est une relation entre deux classes dont une pouvant récupérer toutes les propriétés de la deuxième (is a) Une dépendance est une relation entre deux classes dont une propriété de la première fait référence la deuxième (references a) H & H: Research and Training 81 / 125
  • 125. © Achref EL MOUELHI © La multiplicité Multiplicité Définition permet de définir le nombre minimum et maximum de relation que chaque objet de classe peut avoir avec un (ou plusieurs) objet d’une (ou plusieurs) autre classe H & H: Research and Training 82 / 125
  • 126. © Achref EL MOUELHI © La multiplicité Multiplicité Définition permet de définir le nombre minimum et maximum de relation que chaque objet de classe peut avoir avec un (ou plusieurs) objet d’une (ou plusieurs) autre classe Équivalent en MCD : cardinalité H & H: Research and Training 82 / 125
  • 127. © Achref EL MOUELHI © La multiplicité Multiplicité Six multiplicités possibles avec UML 0..1 : aucune ou au plus un objet 1 : exactement un seul objet [par défaut] 0..* ou * : 0 ou plusieurs objets 1..* : au moins un ou plusieurs objets x..x ou x : exactement x objets m..n : Au moins m et au plus n objets H & H: Research and Training 83 / 125
  • 128. © Achref EL MOUELHI © La multiplicité Multiplicité Exemple Une personne peut avoir zéro ou plusieurs adresses Une adresse appartient à une ou plusieurs personnes Personne nom prenom dateNaissance Adresse rue ville codePostal possède 0..* 1..* H & H: Research and Training 84 / 125
  • 129. © Achref EL MOUELHI © La multiplicité Multiplicité Exercice 1 : définir les multiplicités entre les deux classes suivantes Une voiture comporte plusieurs pneus Un pneu appartient à une seule voiture Voiture Pneu comporte H & H: Research and Training 85 / 125
  • 130. © Achref EL MOUELHI © La multiplicité Multiplicité Exercice 2 : définir les multiplicités entre les deux classes suivantes Une voiture a un et un seul moteur Un moteur appartient à une seule voiture Voiture Moteur possède H & H: Research and Training 86 / 125
  • 131. © Achref EL MOUELHI © La multiplicité Multiplicité Exercice 3 : définir les multiplicités entre les deux classes suivantes Un étudiant est inscrit dans une et une seule université Une université a plusieurs étudiants Étudiant Université étudie H & H: Research and Training 87 / 125
  • 132. © Achref EL MOUELHI © La multiplicité Multiplicité Exercice 4 : définir les multiplicités entre les deux classes suivantes Un livre est écrit par un ou plusieurs auteurs Un auteur a écrit un ou plusieurs livres Livre Auteur est écrit H & H: Research and Training 88 / 125
  • 133. © Achref EL MOUELHI © La multiplicité Multiplicité Exercice 5 : déterminer les multiplicités des associations suivantes Mari Épouse est marié Homme Femme est marié Homme Femme est ou a été marié H & H: Research and Training 89 / 125
  • 134. © Achref EL MOUELHI © La multiplicité Multiplicité Exercice 6 : déterminer les multiplicités des associations suivantes Personne nom prenom dateNaissance est l’enfant > est le parent > H & H: Research and Training 90 / 125
  • 135. © Achref EL MOUELHI © La classe d’association La classe d’association Étant donné l’exemple suivant Article codeArticle prixUnitaire quantitéEnStock Commande numéroCommande dateCommande 0..* 1..* H & H: Research and Training 91 / 125
  • 136. © Achref EL MOUELHI © La classe d’association La classe d’association Étant donné l’exemple suivant Article codeArticle prixUnitaire quantitéEnStock Commande numéroCommande dateCommande 0..* 1..* Question Où peut-on placer la quantitéCommandée? H & H: Research and Training 91 / 125
  • 137. © Achref EL MOUELHI © La classe d’association La classe d’association Dans Article? Article codeArticle prixUnitaire quantitéEnStock quantitéCommandée Commande numéroCommande dateCommande 0..* 1..* H & H: Research and Training 92 / 125
  • 138. © Achref EL MOUELHI © La classe d’association La classe d’association Dans Article? Article codeArticle prixUnitaire quantitéEnStock quantitéCommandée Commande numéroCommande dateCommande 0..* 1..* Impossible Ainsi, une seule quantitéCommandée pour tous ceux qui commandent le même article H & H: Research and Training 92 / 125
  • 139. © Achref EL MOUELHI © La classe d’association La classe d’association Dans Commande? Article codeArticle prixUnitaire quantitéEnStock Commande numéroCommande dateCommande quantitéCommandée 0..* 1..* H & H: Research and Training 93 / 125
  • 140. © Achref EL MOUELHI © La classe d’association La classe d’association Dans Commande? Article codeArticle prixUnitaire quantitéEnStock Commande numéroCommande dateCommande quantitéCommandée 0..* 1..* Impossible aussi Ainsi, une seule quantitéCommandée pour tous les articles d’une même commande H & H: Research and Training 93 / 125
  • 141. © Achref EL MOUELHI © La classe d’association La classe d’association Conclusion La quantitéCommandée ne peut être ni dans Article ni dans Commande H & H: Research and Training 94 / 125
  • 142. © Achref EL MOUELHI © La classe d’association La classe d’association Conclusion La quantitéCommandée ne peut être ni dans Article ni dans Commande Solution : créer une classe d’association Article codeArticle prixUnitaire quantitéEnStock Commande numéroCommande dateCommande 0..* 1..* ArticleCommande quantitéCommandée H & H: Research and Training 94 / 125
  • 143. © Achref EL MOUELHI © Le polymorphisme Polymorphisme Définition En grec : prendre plusieurs formes En POO : possibilité de définir plusieurs méthodes avec le même nom même si la même méthode existe dans la classe mère avec la même signature même si une méthode avec le nom existe dans la classe mais avec une signature différente H & H: Research and Training 95 / 125
  • 144. © Achref EL MOUELHI © Le polymorphisme Polymorphisme Surcharge (overload) Définir dans une classe plusieurs méthodes portant le même nom et avec des signatures différentes Autorisée en Java mais pas par tous les LOO (comme PHP...) Redéfinition Redéfinir une méthode, héritée, dans la classe fille Autorisée par tous les LOO (un des objectifs de l’héritage) La signature de la méthode redéfinie doit être identique à celle de la méthode héritée dans la classe mère H & H: Research and Training 96 / 125
  • 145. © Achref EL MOUELHI © Le polymorphisme Polymorphisme Remarque Lorsqu’une méthode est appelée, le compilateur commence par regarder dans la classe de l’objet où la méthode a été appelée S’il la retrouve, il l’exécute Sinon il la repasse au niveau supérieure (classe mère directe) H & H: Research and Training 97 / 125
  • 146. © Achref EL MOUELHI © Les classes abstraite et finale Classes abstraite Classe abstraite C’est une classe qu’on ne peut instancier Par exemple, on sait qu’un être humain est soit homme soit femme. Donc, la classe Humain peut être déclarée abstraite. H & H: Research and Training 98 / 125
  • 147. © Achref EL MOUELHI © Les classes abstraite et finale Classes abstraite En UML, on écrit le nom d’une classe abstraite en italique Humain Homme Femme H & H: Research and Training 99 / 125
  • 148. © Achref EL MOUELHI © Les classes abstraite et finale Classes abstraite Méthode abstraite C’est une méthode indéfinie (elle n’est pas implémentée) Si une classe contient une méthode abstraite, elle doit être aussi déclarée abstraite Si une classe hérite d’une classe abstraite, alors elle doit implémenter les méthodes abstraites de cette dernière Remarque Certains LOO, comme le C++, permettent de proposer une implémentation par défaut pour les méthodes abstraites H & H: Research and Training 100 / 125
  • 149. © Achref EL MOUELHI © Les classes abstraite et finale Classes finale Classe finale C’est une classe qu’on ne peut hériter Méthode finale C’est une méthode que les classes filles ne peuvent redéfinir H & H: Research and Training 101 / 125
  • 150. © Achref EL MOUELHI © Les classes abstraite et finale Classes abstraite et finale Exercice Une classe abstraite doit-elle avoir une ou plusieurs méthodes abstraites? Une classe finale peut-elle avoir une méthode abstraite? Une classe abstraite peut-elle avoir une méthode finale? Une classe finale doit-elle avoir une méthode finale? Une classe finale peut-elle hériter d’une classe abstraite? Une classe peut-elle être finale et abstraite à la fois? H & H: Research and Training 102 / 125
  • 151. © Achref EL MOUELHI © Les interfaces Les interfaces Une interface (un contrat) Une classe abstraite définie par le mot clé interface et dont toutes les méthodes sont abstraites. H & H: Research and Training 103 / 125
  • 152. © Achref EL MOUELHI © Les interfaces Les interfaces Une interface (un contrat) Une classe abstraite définie par le mot clé interface et dont toutes les méthodes sont abstraites. En UML, une interface est schématisée ainsi << interface >> ISalutation direBonjour() sayHello() H & H: Research and Training 103 / 125
  • 153. © Achref EL MOUELHI © Les interfaces Les interfaces En UML, voici comment dire qu’une classe hérite d’une interface << interface >> ISalutation direBonjour() sayHello() Personne nom prenom dateNaissance H & H: Research and Training 104 / 125
  • 154. © Achref EL MOUELHI © Les interfaces Les interfaces Remarques Une classe qui hérite d’une interface doit implémenter toutes ses méthodes Une classe peut hériter de plusieurs interfaces Une interface peut hériter d’autres interfaces H & H: Research and Training 105 / 125
  • 155. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML Étant donné l’exemple suivant Personne nom prenom dateNaissance Université nom ville enseignant étudiant H & H: Research and Training 106 / 125
  • 156. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML Étant donné l’exemple suivant Personne nom prenom dateNaissance Université nom ville enseignant étudiant Comment lire ça? Une personne peut avoir le rôle d’enseignant dans une université Une personne peut avoir le rôle d’étudiant dans une université Mais, elle peut aussi avoir les deux rôles H & H: Research and Training 106 / 125
  • 157. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML Pour indiquer qu’une personne ne peut avoir les deux rôles à la fois, on rajoute une contrainte Personne nom prenom dateNaissance Université nom ville enseignant étudiant {xor} xor : eXclusive OR (OU exclusif) H & H: Research and Training 107 / 125
  • 158. © Achref EL MOUELHI © Les contraintes avec UML Étant donné l’exemple suivant Personne nom prenom dateNaissance Entreprise nom ville employé dirigeant H & H: Research and Training 108 / 125
  • 159. © Achref EL MOUELHI © Les contraintes avec UML Étant donné l’exemple suivant Personne nom prenom dateNaissance Entreprise nom ville employé dirigeant Comment lire ça? Une personne peut avoir le rôle d’employé dans une entreprise Une personne peut avoir le rôle de dirigeant dans une entreprise Mais est-ce qu’une personne qui n’est pas employé dans cette entreprise peut la diriger? D’après ce diagramme de classes : oui H & H: Research and Training 108 / 125
  • 160. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML Pour indiquer qu’une personne qui dirige une entreprise est forcément un de ses employés, on rajoute la contrainte suivante Personne nom prenom dateNaissance Entreprise nom ville employé dirigeant {sous-ensemble} H & H: Research and Training 109 / 125
  • 161. © Achref EL MOUELHI © Les contraintes avec UML Étant donné l’exemple suivant Client nom prenom dateNaissance Compte numéro solde valMaxDecouvert créditer(int x) déditer(int x) 1..* 1..2 H & H: Research and Training 110 / 125
  • 162. © Achref EL MOUELHI © Les contraintes avec UML Étant donné l’exemple suivant Client nom prenom dateNaissance Compte numéro solde valMaxDecouvert créditer(int x) déditer(int x) 1..* 1..2 Comment lire ça? Un client peut avoir 1 ou plusieurs comptes bancaires Un compte appartient à une ou deux clients Mais comment dire que le solde de chaque compte peut être négatif mais sans dépasser la valeur maximale de découvert? H & H: Research and Training 110 / 125
  • 163. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML Il faut ajouter une contrainte Client nom prenom dateNaissance Compte numéro solde valMaxDecouvert créditer(int x) déditer(int x) {(Compte.solde + Compte.valMaxDecouvert)>=0} 1..* 1..2 Remarque Si on ajoute le nom d’association + les rôles, l’association deviendra trop dense et presque illisible. H & H: Research and Training 111 / 125
  • 164. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML Solution : utiliser OCL Object Constraint Language Initialement, un projet d’IBM Appartenant à UML depuis UML 1.1 Langage formel d’expression Permettant de définir des contraintes sur les différents diagrammes d’UML, et en particulier le diagramme de classes Basé sur la théorie des ensembles et la logique des prédicats Permettant principalement d’exprimer 2 types de contraintes sur l’état d’un objet ou d’un ensemble d’objets Des invariants qui doivent être respectés en permanence Des pré et post-conditions pour une opération H & H: Research and Training 112 / 125
  • 165. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML Deux versions d’OCL OCL 1 : intégré dans UML 1.1 de l’OMG OCL 2 : intégré dans UML 2.0 et pouvant être généralisé sur d’autres modèles que ceux d’UML H & H: Research and Training 113 / 125
  • 166. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML Avec OCL, les contraintes peuvent être définies un peu loin de l’association Dans ce cas, il faut préciser le contexte définir la contrainte context Compte inv : solde + valMaxDecouvert >= 0 H & H: Research and Training 114 / 125
  • 167. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML Avec OCL, les contraintes peuvent être définies un peu loin de l’association Dans ce cas, il faut préciser le contexte définir la contrainte context Compte inv : solde + valMaxDecouvert >= 0 Explication context : indique l’élément concerné par la contrainte inv (pour invariant) : exprime une contrainte sur un élément qui doit être respectée en permanence. H & H: Research and Training 114 / 125
  • 168. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML On peut définir plusieurs contraintes context Compte inv : solde + valMaxDecouvert >= 0 context Compte::débiter(int somme ) pre : somme > 0 and solde + valMaxDecouvert >= somme post : solde = solde@pre - somme H & H: Research and Training 115 / 125
  • 169. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML On peut définir plusieurs contraintes context Compte inv : solde + valMaxDecouvert >= 0 context Compte::débiter(int somme ) pre : somme > 0 and solde + valMaxDecouvert >= somme post : solde = solde@pre - somme Explication context : indique l’élément concerné par la contrainte (ici la méthode débiter() de la classe Compte) pre : exprime une contrainte sur un élément qui doit être respectée pour que l’appel de la méthode soit valide post : exprime une contrainte sur un élément qui doit être respectée après l’appel de la méthode H & H: Research and Training 115 / 125
  • 170. © Achref EL MOUELHI © Les contraintes avec UML Les contraintes avec UML 4 contraintes possibles pour les collections Set : ensemble mathématique sans doublons et sans ordre Ordered : ensemble mathématique sans doublons et avec ordre Bag : ensemble mathématique avec possibilité de doublons et sans ordre Sequence : ensemble mathématique avec possibilité de doublons et avec ordre H & H: Research and Training 116 / 125
  • 171. © Achref EL MOUELHI © Les contraintes avec UML Exemple 1 : un cours est composé d’une séquence ordonnée (sans doublons) de séances Séance Cours {ordered} 1..* 1 H & H: Research and Training 117 / 125
  • 172. © Achref EL MOUELHI © Les contraintes avec UML Exemple 1 : un cours est composé d’une séquence ordonnée (sans doublons) de séances Séance Cours {ordered} 1..* 1 Exemple 2 : un fichierPPT contient une suite ordonnée (avec possibilité de doublons) de transparents Transparent FichierPPT {sequence} appartient * 1 H & H: Research and Training 117 / 125
  • 173. © Achref EL MOUELHI © Comment construire un diagramme de classe? Comment construire un diagramme de classe? Étapes 1 Préparer un dictionnaire de données 2 Identifier les classes et conserver les classes pertinentes 3 Identifier les associations et conserver les associations pertinentes 4 Identifier les attributs 5 Vérifier s’il est possible de simplifier en utilisant l’héritage 6 Itérer et affiner le diagramme H & H: Research and Training 118 / 125
  • 174. © Achref EL MOUELHI © Comment construire un diagramme de classe? Comment construire un diagramme de classe? Étape 1 : Préparer un dictionnaire de données Lire le texte Extraire tout nom ou verbe pouvant participer à notre système d’information Garder les synonymes tant qu’on n’a pas fini la lecture du texte Vérifier que la liste ne contient pas de doublons H & H: Research and Training 119 / 125
  • 175. © Achref EL MOUELHI © Comment construire un diagramme de classe? Comment construire un diagramme de classe? Étape 2 : Identifier les classes et conserver les classes pertinentes Éviter d’être trop sélectif Ne pas chercher l’héritage à cette étape Éliminer les classes redondantes, les synonymes, les classes vagues ou les classes sans lien avec le contexte H & H: Research and Training 120 / 125
  • 176. © Achref EL MOUELHI © Comment construire un diagramme de classe? Comment construire un diagramme de classe? Étape 3 : Identifier les associations et conserver les associations pertinentes Justifier l’existence d’un cycle car c’est souvent redondant Décomposer les associations n-aires en associations binaires Vérifier si les associations définies par rapport aux classes filles peuvent être remontées à la classe mère H & H: Research and Training 121 / 125
  • 177. © Achref EL MOUELHI © Comment construire un diagramme de classe? Comment construire un diagramme de classe? Étape 4 : Identifier les attributs Ne pas confondre attribut et classe Ne pas pousser la recherche des attributs à l’extrême Supprimer les synonymes Faire attention aux attributs de classe association Supprimer les attributs dérivés Source : UML 2 De l’apprentissage à la pratique de Laurent Audibert Les attributs dérivés peuvent être calculés à partir d’autres attributs et de formules de calcul. Lors de la conception, un attribut dérivé peut être utilisé comme marqueur jusqu’à ce que vous puissiez déterminer les règles à lui appliquer. Les attributs dérivés sont symbolisés par l’ajout d’un / devant leur nom. H H: Research and Training 122 / 125
  • 178. © Achref EL MOUELHI © Comment construire un diagramme de classe? Comment construire un diagramme de classe? Étape 5 : Vérifier s’il est possible de simplifier en utilisant l’héritage Vérifier si certaines classes partagent certains attributs et/ou méthodes Éviter les raffinements excessifs H H: Research and Training 123 / 125
  • 179. © Achref EL MOUELHI © Comment construire un diagramme de classe? Comment construire un diagramme de classe? Étape 6 : Itérer et affiner le diagramme Ne pas chercher un diagramme complet à la première passe Faire des itérations continuelles Vérifier le diagramme de classe après avoir fini les diagrammes d’états-transitions et de séquences Revenir sur le diagramme de classe après avoir fini les diagrammes d’états-transitions et de séquences Garder la possibilité de corriger des éventuelles anomalies du diagramme de classe pendant la phase de développement H H: Research and Training 124 / 125
  • 180. © Achref EL MOUELHI © Comment construire un diagramme de classe? Comment construire un diagramme de classe? Citation 1 : Jan van de Sneptscheut La différence entre la théorie et la pratique, c’est qu’en théorie, il n’y a pas de différence entre la théorie et la pratique, mais qu’en pratique, il y en a une. Citation 2 : Albert Einstein La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi! H H: Research and Training 125 / 125