Vous êtes sur la page 1sur 48

Outline

Modélisation et programmation orientée objet

GSTR1 - GM1

R.J.

Printemps 2020

R.J. Modélisation et programmation orientée objet 1/47


Outline

2 UML (suite)

R.J. Modélisation et programmation orientée objet 2/47


UML Diagramme de classes

Diagramme de classes

R.J. Modélisation et programmation orientée objet 3/47


UML Diagramme de classes

Le diagramme de classe sert à représenter l’ensemble des informations


qui sont stockées dans le système. Ces informations sont structurées,
i.e., regroupées, dans des classes.
Le diagramme de classes exprime la structure interne du système, en
termes de classes et d’éventuelles relations entre ces classes.
Une classe d’un système est un concept abstrait qui représente un des
constituants de ce système.
Une classe est la description formelle d’un ensemble d’objets du
système ayant une sémantique et des caractéristiques communes.
Notez bien qu’un objet représente une instance de sa classe.
Remarque : Quand on fait de la modélisation orientée objet, on se doit
d’utiliser le diagramme de classes pour concevoir une base de données.

R.J. Modélisation et programmation orientée objet 4/47


UML Diagramme de classes

Graphiquement parlant, les classes sont représentées par des rectan-


gles divisés en des compartiments :
– – le 1er compartiment représente le nom de la classe,
– – le 2ème compartiment représente l’/les attribut(s) de la classe,
– – le 3ème compartiment représente l’/les opération(s) de la classe.
Remarques :
– – On peut ajouter un compartiment des responsabilités pour énumérer
l’ensemble des tâches devant être assurées par la classe concernée,
mais pour lesquelles on ne dispose pas encore assez d’informations.
– – On peut ajouter un compartiment des exceptions pour énumérer les
situations exceptionnelles devant être gérées par la classe en question.

R.J. Modélisation et programmation orientée objet 5/47


UML Diagramme de classes

Formalisme

R.J. Modélisation et programmation orientée objet 6/47


UML Diagramme de classes

Une classe correspond à un concept global d’une information


(générale) qu’on décompose (souvent) en un ensemble d’informations
élémentaires, appelées chacune un attribut.
Le nom d’une classe doit évoquer le concept décrit par celle ci. Le nom
doit commencer par une majuscule.
Un attribut constitue la modélisation d’une information élémentaire qui
sera représentée par un nom et un type de données.
Définition : L’identifiant est un attribut particulier qui permet de
différencier les instances de la classe en question, i.e., de différencier
les objets d’une même classe.

R.J. Modélisation et programmation orientée objet 7/47


UML Diagramme de classes

Un attribut peut être du type :


– – byte : peut contenir un nombre entier codé généralement sur 1 octet,
– – short : peut contenir un nombre entier codé généralement sur 2
octets,
– – integer : peut contenir un nombre entier codé généralement sur 4
octets,
– – long : peut contenir un nombre entier codé généralement sur 8
octets,
– – float : peut contenir un nombre réel codé généralement sur 4 octets,
– – double : peut contenir un nombre réel codé généralement sur 8
octets,
– – boolean : ne peut contenir que true ou false,
– – char : peut contenir un caractère,
– – string : peut contenir une chaı̂ne de caractères,
– – date : peut contenir une date,
– – undefined : pour un type indéfini,
– – le type de l’attribut peut être le nom d’une autre classe.

R.J. Modélisation et programmation orientée objet 8/47


UML Diagramme de classes

Sachez que UML définit différents niveaux de visibilité pour les attributs
:
– – public (public) : signifie que tout le monde peut avoir accès à l’attribut,
sans aucune restriction.
On représente la visibilité publique par l’ajout du symbole + avant le nom
de l’attribut.
– – protégé (protected) : signifie que cet attribut ne pourra être accessi-
ble que de l’intérieur de sa classe ou d’une classe dérivée.
On représente la visibilité protégée par l’ajout du symbole # avant le nom
de l’attribut.
– – privé (private) : signifie que cet attribut ne pourra être accessible que
de l’intérieur de sa classe ; il est inaccessible en dehors de sa classe.
On représente la visibilité privée par l’ajout du symbole - avant le nom
de l’attribut.
– – package (package) : signifie que l’accès peut être fait de l’intérieur
de n’importe quelle classe déclarée dans le même paquetage que notre
classe.
On représente la visibilité package par l’ajout du symbole ∼ avant le nom
de l’attribut.
– – On peut opter pour une visibilité indéfinie (undefined). Dans ce cas
là, le nom de l’attribut n’est précédé d’aucun symbole.

R.J. Modélisation et programmation orientée objet 9/47


UML Diagramme de classes

Une opération (une méthode) est une fonction assurée par la classe en
question.
La déclaration des opérations peut préciser des paramètres en entrée
(arguments) et/ou le type de la valeur de retour.
Le mode de passage d’un paramètre peut être :
– – in : le paramètre transmet l’information vers l’opération ; le paramètre
est rentrant. C’est le comportement par défaut.
– – out : le paramètre transmet l’information depuis l’opération ; le
paramètre est sortant.
– – inout : le paramètre transmet l’information vers et depuis l’opération
; le paramètre est rentrant et sortant.
Sachez que UML définit pour les opérations les niveaux de visibilité :
public, protégé, privé, package et indéfini.

R.J. Modélisation et programmation orientée objet 10/47


UML Diagramme de classes

Exemple

R.J. Modélisation et programmation orientée objet 11/47


UML Diagramme de classes

La multiplicité d’un attribut précise le nombre de valeurs que l’attribut


peut contenir. Par défaut on a 1 (multiplicité min = multiplicité max = 1),
mais on peut avoir d’autres valeurs.

R.J. Modélisation et programmation orientée objet 12/47


UML Diagramme de classes

On peut définir un ”attribut de classe” qui est un attribut qui va garder


une valeur qui sera partagée par toutes les instances de la classe.
Graphiquement parlant, les attributs de classe sont des attributs qui sont
soulignés.
On peut avoir un ”attribut dérivé” qui est un attribut qui va être calculé à
partir d’autres attributs.
Les attributs dérivés sont symbolisés par l’ajout d’un / avant leurs noms.

R.J. Modélisation et programmation orientée objet 13/47


UML Diagramme de classes

Il est possible d’avoir des opérations de classe. Une ”opération de


classe” est une opération qui ne peut manipuler que des attributs de
classe et ses propres variables.
Graphiquement parlant, une opération de classe est une opération qui
est soulignée.
Une opération est dite abstraite (abstract) lorsqu’on connaı̂t son en-tête
mais pas la manière dont elle peut être réalisée (sa définition).
Une classe est dite abstraite lorsqu’elle définit au moins une ”opération
abstraite” ou lorsqu’une classe parent contient une opération abstraite
non encore réalisée.
Graphiquement parlant, les noms d’une opération abstraite et d’une
”classe abstraite” sont écrits en italique.

R.J. Modélisation et programmation orientée objet 14/47


UML Diagramme de classes

On a généralement des relations entre des classes. Ces relations peu-


vent être du type :
– – association,
– – généralisation,
– – dépendance.
Remarque : Les liens entre des objets sont considérés comme des in-
stances des relations qui existent entre leurs classes respectives.

R.J. Modélisation et programmation orientée objet 15/47


UML Diagramme de classes

Dans le cas général, une association est une relation N-aire (N-ary),
i.e., elle relie plusieurs classes entre elles. Mais le plus souvent les
associations sont juste binaires, i.e., elles relient juste deux classes entre
elles.
Attention : L’association est introduite pour montrer une structure, et non
pour montrer des échanges de données.
Une association N-aire possède N rôles qui sont les points terminaux
de l’association ou terminaisons. Chaque classe qui participe à
l’association joue un rôle.
Notez bien que les rôles peuvent porter un nom ou pas. Notez bien
également qu’une association peut elle aussi porter un nom ou pas.

R.J. Modélisation et programmation orientée objet 16/47


UML Diagramme de classes

Les rôles sont définis par 2 propriétés :


– – La multiplicité : elle définit le nombre d’instances de l’association
pour une instance de la classe. La multiplicité est définie par un nombre
entier (N ou *) ou un intervalle de valeurs (N..M ou N..*). Les multiplicités
sont notées côté terminaisons.
– – la navigabilité : Par défaut, les associations sont dits ”navigables”
dans les 2 sens. Mais dans certains cas, une seule direction de naviga-
tion est utile ; l’extrémité de l’association vers laquelle la navigation est
possible porte alors une flèche. Une navigabilité placée sur une termi-
naison cible indique si ce rôle est accessible à partir de la source.

R.J. Modélisation et programmation orientée objet 17/47


UML Diagramme de classes

Exemple 1

R.J. Modélisation et programmation orientée objet 18/47


UML Diagramme de classes

Exemple 2

R.J. Modélisation et programmation orientée objet 19/47


UML Diagramme de classes

Exemple 3

R.J. Modélisation et programmation orientée objet 20/47


UML Diagramme de classes

Remarque : Si on prend une association ternaire entre des classes A,


B et C, la multiplicité de la terminaison C indique le nombre d’objets
C qui peuvent apparaı̂tre dans l’association avec une paire particulière
d’objets A et B.

R.J. Modélisation et programmation orientée objet 21/47


UML Diagramme de classes

Dans le cas normal, les attributs d’une classe dépendent fonctionnelle-


ment de l’identifiant de la classe. Mais on peut avoir des attributs
qui dépendent fonctionnellement des identifiants de 2 ou de plusieurs
classes différentes.
Exemple :
Un attribut qui sert à stocker la quantité commandée d’un produit dépend
fonctionnellement de l’attribut numéro de commande (identifiant de la
classe Commande) et de l’attribut code du produit (identifiant de la
classe Produit).
Il y aura donc une association ”contenir” entre les classes Commande et
Produit, qui va avoir l’attribut quantité commandée.

R.J. Modélisation et programmation orientée objet 22/47


UML Diagramme de classes

R.J. Modélisation et programmation orientée objet 23/47


UML Diagramme de classes

Une association qui a un/des attribut(s), dite aussi porteuse d’un/d’ at-
tribut(s), est appelée une ”classe association” (class association).
Notez bien qu’une classe association possède également des
opérations.

R.J. Modélisation et programmation orientée objet 24/47


UML Diagramme de classes

Une classe peut être associée à elle même, en utilisant une ”association
réflexive”.
Notez bien que lorsqu’une classe est associée à elle même, ceci ne
veut pas dire qu’une instance de cette classe est associée à elle même,
mais plutôt qu’une instance de cette classe est associée à une/plusieurs
autre(s) instance(s) de la classe en fonction de la multiplicité.

R.J. Modélisation et programmation orientée objet 25/47


UML Diagramme de classes

Exemple

R.J. Modélisation et programmation orientée objet 26/47


UML Diagramme de classes

UML supporte également ce qu’on appelle une ”association qualifiée”.


Une association qualifiée met en relation deux classes sur la base d’une
clef, qu’on appelle un qualificatif ou aussi un qualifieur (qualifier).
Prenons un exemple d’illustration qui montre la transformation d’un dia-
gramme de classes en adoptant une association qualifiée (transforma-
tion d’un attribut en un qualificatif) :

R.J. Modélisation et programmation orientée objet 27/47


UML Diagramme de classes

Une instance du couple {Répertoire , nom fichier} est en association avec


zéro à une instance unique de la classe Fichier. Autrement dit, étant donnés
un répertoire et un nom de fichier, il y a au plus un fichier ayant ce nom dans
ce répertoire.

R.J. Modélisation et programmation orientée objet 28/47


UML Diagramme de classes

L’agrégation est une variante de l’association qui représente une rela-


tion d’inclusion structurelle ou comportementale d’un élément dans un
ensemble. L’agrégation décrit la notion d’appartenance.
Dans une relation d’agrégation, on va avoir une classe (qu’on appelle
l’agrégat qui symbolise un ”tout”) qui regroupe une autre classe (qui
symbolise une ”partie”). Un objet de la première classe peut utiliser
une/plusieurs instance(s) de l’autre classe.
Si on a une expression du genre ”est une partie de” ou ”fait partie de”
dans la description en langage naturel du système à concevoir, il faut
utiliser l’agrégation.
Remarque : La multiplicité du côté de l’agrégat peut être supérieure à 1.

R.J. Modélisation et programmation orientée objet 29/47


UML Diagramme de classes

Exemple

R.J. Modélisation et programmation orientée objet 30/47


UML Diagramme de classes

La composition est un cas particulier de l’agrégation dans laquelle la vie


des parties (des composants) est liée à celle du tout (qu’on appelle à
présent le composé ou le composite ou encore le conteneur). La de-
struction du composé implique automatiquement la destruction de tous
les composants liés.
La composition fait souvent donc référence à une contenance physique.
Si on a une expression du genre ”est composé de” ou ”est constitué de”
dans la description en langage naturel du système à concevoir, il faut
utiliser la composition.
Attention : Une instance d’un composant appartient toujours à au plus
une seule instance de l’élément composé, i.e., la multiplicité du côté
composé ne doit pas être supérieure à 1 (1 ou 0..1).

R.J. Modélisation et programmation orientée objet 31/47


UML Diagramme de classes

Exemple

R.J. Modélisation et programmation orientée objet 32/47


UML Diagramme de classes

Notez bien que l’association avec toutes ses formes est la relation qui
est la plus courante et la plus riche du point de vue sémantique.

R.J. Modélisation et programmation orientée objet 33/47


UML Diagramme de classes

Exercice 1

Élaborez un diagramme de classes correspondant au texte ci-dessous :


L’université souhaite mieux gérer les formations dispensées dans ses facultés.
Pour cela, on stockera pour chaque faculté son nom et son adresse. Chaque
faculté est structurée en des départements, qui regroupent chacun des pro-
fesseurs. Parmi ces professeurs, l’un d’eux est chef du département con-
cerné. On stockera pour chaque département son nom. On stockera pour
chaque professeur : un code personnel, son nom et son prénom, et son
numéro de téléphone. Chaque professeur enseigne au minimum 10 mod-
ules. Un module donné peut être enseigné par plusieurs professeurs, mais a
toujours lieu dans une même salle de cours. Chaque salle de cours porte un
numéro spécifique et se caractérise par le nombre de places possibles (ces
informations devront être stockées dans le système). Pour chaque module,
on stocke un code unique et son nom. Les étudiants suivent quant à eux 30
modules et reçoivent une note pour chacun d’eux. En plus de stocker ses
notes, on stocke pour chaque étudiant : le CNE, et le nom et le prénom.

R.J. Modélisation et programmation orientée objet 34/47


UML Diagramme de classes

Solution de l’exercice 1

R.J. Modélisation et programmation orientée objet 35/47


UML Diagramme de classes

La généralisation décrit une relation entre une classe générale (dite


aussi une classe parent, une classe mère, une classe générique ou une
classe de base) et une classe spécialisée (on parle aussi d’une classe
enfant, d’une classe fille, d’une classe spécifique, d’une classe dérivée,
d’une classe descendante ou d’une sous-classe).
La relation de généralisation (ou de spécialisation dans l’autre sens) se
traduit par le concept d’héritage. On parle donc également de relation
d’héritage.
Une classe spécialisée hérite tous les attributs, toutes les opérations
et toutes les relations qu’a sa classe générale, et peut avoir d’autres
attributs et opérations et relations supplémentaires.
La généralisation induit une notion de classification des objets ; on con-
stitue une hiérarchie de classes avec la généralisation.

R.J. Modélisation et programmation orientée objet 36/47


UML Diagramme de classes

D’un point de vue pratique, on part de classes identifiées pour créer


de nouvelles classes qui regroupent leurs parties communes, ou on
part de classes identifiées pour en dériver de nouvelles classes plus
spécialisées en spécifiant simplement les différences.
Remarque : Une classe enfant peut avoir plusieurs parents ; on parle
alors d’un héritage multiple.

R.J. Modélisation et programmation orientée objet 37/47


UML Diagramme de classes

Exemple 1

R.J. Modélisation et programmation orientée objet 38/47


UML Diagramme de classes

Exemple 2

R.J. Modélisation et programmation orientée objet 39/47


UML Diagramme de classes

D’une façon générale, la dépendance entre deux classes est utilisée


pour montrer le couplage entre celles ci lorsqu’il n’existe pas un lien
sémantiquement plus riche que la dépendance, i.e., ni l’association ni la
généralisation ne suffisent pour représenter la relation.
Plus précisément, on utilise la dépendance quand par exemple :
– – Un objet d’une classe doit utiliser un/des objet(s) d’une autre classe,
– – un objet d’une classe sert à créer des objets d’une autre classe.
Graphiquement parlant, une dépendance est représentée par une flèche
discontinu. La dépendance est souvent stéréotypée pour mieux ex-
pliciter le lien sémantique entre les deux classes concernées.
On utilise en français comme stéréotypes :
<<Utilise>> , <<Appelle>> , <<Crée>> , <<Instancie>> ,
<<Réalise>> , <<Raffine>> , <<Trace>> , <<Dérive>> ,
<<Lie>> , <<Ami>> .

R.J. Modélisation et programmation orientée objet 40/47


UML Diagramme de classes

Exemple

R.J. Modélisation et programmation orientée objet 41/47


UML Diagramme de classes

Exercice 2

Élaborez un diagramme de classes correspondant au texte ci-dessous :


La Ligue de Football Professionnel (LFP) désire informatiser son système
d’information, en stockant l’ensemble des informations dont elle dispose dans
une base de données. La LFP gère les championnats ”Botola Pro Maroc Tele-
com D1”, ”Botola Pro Maroc Telecom D2” et ”Elite Espoirs”. Chaque champi-
onnat regroupe 16 équipes. Chaque équipe comporte au minimum 14 joueurs.
Chaque équipe est entraı̂née par un entraı̂neur et a un président. On stockera
pour chaque joueur son nom et son prénom, et sa position sur le terrain. On
stockera les noms et prénoms et les numéros de téléphone des entraı̂neurs
et des présidents d’équipes. On stockera également les adresses et les CIN
de tout le monde. On stockera finalement pour chaque match joué entre 2
équipes, le score final et le lieu de la tenue de la rencontre.

R.J. Modélisation et programmation orientée objet 42/47


UML Diagramme de classes

Solution de l’exercice 2

R.J. Modélisation et programmation orientée objet 43/47


UML Diagramme de classes

Solution de l’exercice 2

Avec cette conception, comment va t on savoir le score du match entre


les équipes X et Y ???

R.J. Modélisation et programmation orientée objet 44/47


UML Diagramme de classes

Solution de l’exercice 2

Avec cette conception, comment va t on savoir le score du match entre


les équipes X et Y ???
⇒ Déjà la question est mal posée. Ce que normalement on aimerait savoir,
c’est le score du match entre les équipes X et Y qui s’est déroulé dans tel jour.
Il faut rectifier la conception comme suit (notez bien au passage que je vais
modifier le type de l’attribut score match, en optant cette fois ci pour un type
plus adéquat) :

R.J. Modélisation et programmation orientée objet 44/47


UML Diagramme de classes

Solution de l’exercice 2

R.J. Modélisation et programmation orientée objet 45/47


UML Diagramme de classes

Exercice 3

Élaborez un diagramme de classes correspondant au texte ci-dessous :


Le groupe Royal Air Maroc veut élaborer une base de données unique qui
va centraliser toutes les données du groupe, à savoir les données de ces 3
filiales : ”RAM International”, ”RAM Express” et ”RAM Cargo”. Chacune de
ces filiales opère quotidiennement une multitude de vols, en exploitant les
58 avions que possède le groupe. Chaque vol est caractérisé par un code,
l’aéroport de départ, l’aéroport d’arrivé, l’heure de départ et l’heure d’arrivée.
Chaque aéroport est caractérisé par un code, un nom, et la ville dans laquelle
il se trouve. Chaque vol est assuré par un personnel naviguant qui comporte 2
pilotes et au minimum 3 hôtesses de l’air. Pour chaque personne du personnel
naviguant, on stocke le CIN, le nom et le prénom. On stocke également pour
les pilotes le nombre d’heures de vol, et pour les hôtesses de l’air le nombre
d’années d’expérience. Chaque avion est caractérisé par un code, la date
de sa fabrication et son type. La base de données doit être conçue de telle
sorte à ce qu’on puisse savoir exactement les avions exploités par chacune
des filiales.

R.J. Modélisation et programmation orientée objet 46/47


UML Diagramme de classes

Solution de l’exercice 3

R.J. Modélisation et programmation orientée objet 47/47

Vous aimerez peut-être aussi