Cours Modélisation UML
Cours Modélisation UML
Pré-requis
●Programmation système,
Processus concurrents,
●Méthode MERISE,
●Grafcets et automates.
INTRODUCTION
Pour faire face à la complexité croissante des systèmes d’information, de nouvelles
méthodes et outils ont été créées. La principale avancée des deux dernières décennies réside
dans la programmation orientée objet (P.O.O.).
Face à ce nouveau mode de programmation, les méthodes de modélisation classique (telle
MERISE) ont rapidement montré certaines limites et ont dû s’adapter (cf. MERISE/2).
De très nombreuses méthodes ont également vu le jour comme Booch, OMT … Dans ce
contexte et devant le foisonnement de nouvelles méthodes de conception « orientée objet »,
l’Object Management Group (OMG) a eu comme objectif de définir une notation standard
utilisable dans les développements informatiques basés sur l’objet. C’est ainsi qu’est apparu
UML (Unified Modified Language « langage de modélisation objet unifié »), qui est issu de la
fusion des méthodes Booch, OMT (Object Modelling Technique) et OOSE (Object Oriented
Software Engineering).
Issu du terrain et fruit d'un travail d'experts reconnus, UML est le résultat d'un large
consensus. De très nombreux acteurs industriels de renom ont adopté UML et participent à
son développement.
En l'espace d'une poignée d'années seulement, UML est devenu un standard incontournable.
Ceci nous amène à nous questionner sur :
- les apports réels d’UML dans la modélisation
- la place des méthodes dites « traditionnelles » telle que MERISE.
UML est en effet apparu très tardivement, car l’approche objet se pratique depuis de très
nombreuses années déjà. Simula, premier langage de programmation à implémenter le
concept de type abstrait à l'aide de classes, date de 1967 ! En 1976 déjà, Smalltalk
implémente les concepts fondateurs de l'approche objet : encapsulation, agrégation,
héritage. Les premiers compilateurs C++ datent du début des années 80 et de nombreux
langages orientés objets "académiques" ont étayé les concepts objets (Eiffel, Objective C,
Loops...). Il y donc déjà longtemps que l'approche objet est devenue une réalité. Les concepts
de base de l'approche objet sont stables et largement éprouvés. De nos jours, programmer
"objet", c'est bénéficier d'une panoplie d'outils et de langages performants. L'approche objet
est une solution technologique incontournable. Ce n'est plus une mode, mais un réflexe
COURS MODELISATION AVEC UML
quasi-automatique dès lors qu'on cherche à concevoir des logiciels complexes qui doivent
"résister" à des évolutions incessantes.
Toutefois, l’approche objet n’est pas une panacée :
- elle est moins intuitive que l'approche fonctionnelle.
Malgré les apparences, il est plus naturel pour l'esprit humain de décomposer un problème
informatique sous forme d'une hiérarchie de fonctions atomiques et de données, qu'en
terme d'objets et d'interaction entre ces objets. Or, rien dans les concepts de base de
l'approche objet ne dicte comment modéliser la structure objet d'un système de manière
pertinente. Quels moyens doit-on alors utiliser pour mener une analyse qui respecte les
concepts objet ? Sans un cadre méthodologique approprié, la dérive fonctionnelle de la
conception est inévitable...
- l'application des concepts objet nécessite une très grande rigueur.
Le vocabulaire précis est un facteur d'échec important dans la mise en œuvre d'une approche
objet (risques d'ambiguïtés et d'incompréhensions). Beaucoup de développeurs (même
expérimentés) ne pensent souvent objet qu'à travers un langage de programmation. Or, les
langages orientés objet ne sont que des outils qui proposent une manière particulière
d'implémenter certains concepts objet. Ils ne valident en rien l'utilisation de ces moyens
techniques pour concevoir un système conforme à la philosophie objet. Connaître C++ ou
Java n'est donc pas une fin en soi, il faut aussi savoir se servir de ces langages à bon escient.
La question est donc de savoir "qui va nous guider dans l'utilisation des concepts objet, si ce
ne sont pas les langages orientés objet ?".
Enfin, comment comparer deux solutions de découpe objet d'un système si l'on ne dispose
pas d'un moyen de représentation adéquat ? Il est très simple de décrire le résultat d'une
analyse fonctionnelle, mais qu'en est-il d'une découpe objet ?
Pour remédier à ces inconvénients majeurs de l'approche objet, il faut donc :
1) un langage (pour s'exprimer clairement à l'aide des concepts objets)
Le langage doit permettre de représenter des concepts abstraits (graphiquement par
exemple), limiter les ambiguïtés (parler un langage commun, au vocabulaire précis,
indépendant des langages orientés objet), faciliter l'analyse (simplifier la comparaison et
l'évaluation de solutions).
2) une démarche d'analyse et de conception objet
Une démarche d’analyse et de conception objet est nécessaire afin de ne pas effectuer une
analyse fonctionnelle et se contenter d'une implémentation objet, mais penser objet dès le
départ, définir les vues qui permettent de décrire tous les aspects d'un système avec des
concepts objets.
Il faut donc disposer d'un outil qui donne une dimension méthodologique à l'approche
objet et qui permette de mieux maîtriser sa richesse. La prise de conscience de l'importance
d'une méthode spécifiquement objet ("comment structurer un système sans centrer l'analyse
uniquement sur les données ou uniquement sur les traitements, mais sur les deux"), ne date
pas d'hier. Plus de 50 méthodes objet sont apparues durant le milieu des années 90 (Booch,
Classe-Relation, Fusion, HOOD, OMT, OOA, OOD, OOM, OOSE...). Aucune ne s'est réellement
imposée.
L'absence de consensus sur une méthode d'analyse objet a longtemps freiné l'essor des
technologies objet. Ce n'est que récemment que les grands acteurs du monde informatique
ont pris conscience de ce problème. L'unification et la normalisation des méthodes objet
dominantes (OMT, Booch et OOSE) ne datent que de 1995. UML est le fruit de cette fusion.
COURS MODELISATION AVEC UML
UML, ainsi que les méthodes dont il est issu, s'accordent sur un point : une analyse objet
passe par une modélisation objet.
Qu’est-ce qu’un modèle ?
Un modèle est une abstraction de la réalité. L'abstraction est un des piliers de l'approche
objet. Il s'agit d'un processus qui consiste à identifier les caractéristiques intéressantes d'une
entité en vue d'une utilisation précise. L'abstraction désigne aussi le résultat de ce processus,
c'est-à-dire l'ensemble des caractéristiques essentielles d'une entité, retenues par un
observateur.
Un modèle est une vue subjective, mais pertinente de la réalité. Un modèle définit une
frontière entre la réalité et la perspective de l'observateur. Ce n'est pas "la réalité", mais une
vue très subjective de la réalité. Bien qu'un modèle ne représente pas une réalité absolue, un
modèle reflète des aspects importants de la réalité, il en donne donc une vue juste et
pertinente.
Le caractère abstrait d'un modèle doit notamment permettre de faciliter la compréhension
du système étudié. Il réduit la complexité du système étudié, permet de simuler le système,
le représente et reproduit ses comportements. Concrètement, un modèle réduit
(décompose) la réalité, dans le but de disposer d'éléments de travail exploitables par des
moyens mathématiques ou informatiques.
UML permet donc de modéliser une application selon une vision objet.
L’appréhension d’UML est complexe car UML est à la fois :
- une norme,
- un langage de modélisation objet,
- un support de communication,
- un cadre méthodologique.
UML est une norme
Fin 1997, UML est devenu une norme OMG (Object Management Group). L'OMG est un
organisme à but non lucratif, créé en 1989 à l'initiative de grandes sociétés (HP, Sun, Unisys,
American Airlines, Philips...). Aujourd'hui, l'OMG fédère plus de 850 acteurs du monde
informatique. Son rôle est de promouvoir des standards qui garantissent l'interopérabilité
entre applications orientées objet, développées sur des réseaux hétérogènes. L'OMG propose
notamment l'architecture CORBA (Common Object Request Broker Architecture), un modèle
standard pour la construction d'applications à objets distribués (répartis sur un réseau).
CORBA fait partie d'une vision globale de la construction d'applications réparties, appelée
OMA (Object Management Architecture) et définie par l'OMG. Sans rentrer dans les détails,
on peut résumer cette vision par la volonté de favoriser l'essor industriel des technologies
objet, en offrant un ensemble de solutions technologiques non propriétaires, qui
suppriment les clivages techniques.
UML a été adopté (normalisé) par l'OMG et intégré à l'OMA, car il participe à cette vision et
parce qu'il répond à la "philosophie" OMG.
UML est un langage de modélisation objet.
Pour penser et concevoir objet, il faut savoir "prendre de la hauteur", jongler avec des
concepts abstraits, indépendants des langages d'implémentation et des contraintes
purement techniques. Les langages de programmation ne sont pas un support d'analyse
adéquat pour "concevoir objet". Ils ne permettent pas de décrire des solutions en terme de
concepts abstraits et constituent un cadre trop rigide pour mener une analyse itérative. Pour
conduire une analyse objet cohérente, il ne faut pas directement penser en terme de
pointeurs, d'attributs et de tableaux, mais en terme d'association, de propriétés et de
COURS MODELISATION AVEC UML
cardinalités... Utiliser le langage de programmation comme support de conception ne revient
bien souvent qu'à juxtaposer de manière fonctionnelle un ensemble de mécanismes
d'implémentation, pour résoudre un problème qui nécessite en réalité une modélisation
objet. L’approche objet nécessite une analyse réfléchie, qui passe par différentes phases
exploratoires.
Bien que raisonner en terme d'objets semble naturel, l'approche fonctionnelle reste la plus
intuitive pour nos esprits cartésiens... Voilà pourquoi il ne faut pas se contenter d'une
implémentation objet, mais se discipliner à "penser objet" au cours d'une phase d'analyse
préalable.
Toutes les dérives fonctionnelles de code objet ont pour origine le non-respect des concepts
de base de l'approche objet (encapsulation...) ou une utilisation détournée de ces concepts
(héritage sans classification...). Ces dérives ne sont pas dues à de mauvaises techniques de
programmation ; la racine du mal est bien plus profonde : programmer en C++ ou en Java
n'implique pas forcément concevoir objet...
Les difficultés de mise en œuvre d'une approche "réellement objet" ont engendré bien
souvent des déceptions, ce qui a longtemps constitué un obstacle important à l'essor des
technologies objet. Beaucoup ont cédé au leurre des langages de programmation orientés
objet et oublié que le code n'est qu'un "moyen". Le respect des concepts fondamentaux de
l'approche objet prime sur la manière dont on les implémente. Ne penser qu'à travers un
langage de programmation objet détourne de l'essentiel. Pour sortir les technologies objet de
cette impasse, l'OMG propose UML.
UML comble une lacune importante des technologies objet. Il permet d'exprimer et
d'élaborer des modèles objet, indépendamment de tout langage de programmation. Il a été
pensé pour servir de support à une analyse basée sur les concepts objet.
UML est un langage formel, défini par un métamodèle.
Le métamodèle d'UML décrit de manière très précise tous les éléments de modélisation (les
concepts véhiculés et manipulés par le langage) et la sémantique de ces éléments (leur
définition et le sens de leur utilisation). En d'autres termes : UML normalise les concepts
objet. Un métamodèle permet de limiter les ambiguïtés et encourage la constructiond'outils.
Il permet aussi de classer les différents concepts du langage (selon leur niveau d'abstraction
ou leur domaine d'application) et expose ainsi clairement sa structure. Enfin, on peut noter
que le métamodèle d'UML est lui-même décrit par un méta-métamodèle de manière
standardisée, à l'aide de MOF (Meta Object Facility : norme OMG de description des
métamodèles).
Véritable clé de voûte de l'OMA, UML est donc un outil indispensable pour tous ceux qui ont
compris que programmer objet, c'est d'abord concevoir objet. UML n'est pas à l'origine des
concepts objets, mais il en constitue une étape majeure, car il unifie les différentes approches
et en donne une définition plus formelle.
UML est un support de communication
UML est avant tout un support de communication performant, qui facilite la représentation
et la compréhension de solutions objet. Sa notation graphique permet d'exprimer
visuellement une solution objet, ce qui facilite la comparaison et l'évaluation de solutions.
L'aspect formel de sa notation limite les ambiguïtés et les incompréhensions. Son
indépendance par rapport aux langages de programmation, aux domaines d'application et
aux processus, en font un langage universel. La notation graphique d'UML n'est que le
support du langage. La véritable force d'UML, c'est qu'il repose sur un métamodèle. En
COURS MODELISATION AVEC UML
d'autres termes : la puissance et l'intérêt d'UML, c'est qu'il normalise la sémantique des
concepts qu'il véhicule !
Qu'une association d'héritage entre deux classes soit représentée par une flèche terminée
par un triangle ou un cercle, n'a que peu d'importance par rapport au sens que cela donne à
votre modèle. La notation graphique est essentiellement guidée par des considérations
esthétiques, même si elle a été pensée dans ses moindres détails.
Par contre, utiliser une relation d'héritage, reflète l'intention de donner à votre modèle un
sens particulier. Un "bon" langage de modélisation doit permettre à n'importe qui de
déchiffrer cette intention de manière non équivoque. Il est donc primordial de s'accorder sur
la sémantique des éléments de modélisation, bien avant de s'intéresser à la manière de les
représenter. Le métamodèle UML apporte une solution à ce problème fondamental. UML est
donc bien plus qu'un simple outil qui permet de "dessiner" des représentations mentales... Il
permet de parler un langage commun, normalisé mais accessible, car visuel.
UML est un cadre méthodologique pour une analyse objet
Une autre caractéristique importante d'UML, est qu'il cadre l'analyse. UML permet de
représenter un système selon différentes vues complémentaires : les diagrammes. Un
diagramme UML est une représentation graphique, qui s'intéresse à un aspect précis du
modèle ; c'est une perspective du modèle. Chaque type de diagramme UML possède une
structure (les types des éléments de modélisation qui le composent sont prédéfinis) et
véhicule une sémantique précise (il offre toujours la même vue d'un système). Combinés, les
différents types de diagrammes UML offrent une vue complète des aspects statiques et
dynamiques d'un système. Les diagrammes permettent donc d'inspecter un modèle selon
différentes perspectives et guident l'utilisation des éléments de modélisation (les concepts
objet), car ils possèdent une structure. Une caractéristique importante des diagrammes UML,
est qu'ils supportent l'abstraction. Cela permet de mieux contrôler la complexité dans
l'expression et l'élaboration des solutions objet.
UML opte en effet pour l'élaboration des modèles, plutôt que pour une approche qui impose
une barrière stricte entre analyse et conception. Les modèles d'analyse et de conception ne
diffèrent que par leur niveau de détail, il n'y a pas de différence dans les concepts utilisés.
UML n'introduit pas d'éléments de modélisation propres à une activité (analyse,
conception...) ; le langage reste le même à tous les niveaux d'abstraction. Cette approche
simplificatrice facilite le passage entre les niveaux d'abstraction. L'élaboration encourage une
approche non linéaire, les "retours en arrière" entre niveaux d'abstraction différents sont
facilités et la traçabilité entre modèles de niveaux différents est assurée par l'unicité du
langage.
UML favorise donc le prototypage, et c'est là une de ses forces. En effet, modéliser une
application n'est pas une activité linéaire. Il s'agit d'une tâche très complexe, qui nécessite
une approche itérative, car il est plus efficace de construire et valider par étapes, ce qui est
difficile à cerner et maîtriser. UML permet donc non seulement de représenter et de
manipuler les concepts objet, il sous-entend une démarche d'analyse qui permet de
concevoir une solution objet de manière itérative, grâce aux diagrammes, qui supportent
l'abstraction.
UML n'est pas une méthode
UML est un langage qui permet de représenter des modèles, mais il ne définit pas le
processus d'élaboration des modèles. Qualifier UML de "méthode objet" n'est donc pas tout
à fait approprié. Une méthode propose aussi un processus, qui régit notamment
l'enchaînement des activités de production d'une entreprise. Or UML n'a pas été pensé pour
COURS MODELISATION AVEC UML
régir les activités de l'entreprise. Les auteurs d'UML sont tout à fait conscients de
l'importance du processus, mais ce sujet a été intentionnellement exclu des travaux de
l'OMG. Comment prendre en compte toutes les organisations et cultures d'entreprises ? Un
processus est adapté (donc très lié) au domaine d'activité de l'entreprise ; même s'il constitue
un cadre général, il faut l'adapter au contexte de l'entreprise. Bref, améliorer un processus
est une discipline à part entière, c'est un objectif qui dépasse très largement le cadre de
l'OMA. Cependant, même si pour l'OMG, l'acceptabilité industrielle de la modélisation objet
passe d'abord par la disponibilité d'un langage d'analyse objet performant et standard, les
auteurs d'UML préconisent d'utiliser une démarche :
- guidée par les besoins des utilisateurs du système,
- centrée sur l'architecture logicielle,
- itérative et incrémentale.
D'après les auteurs d'UML, un processus de développement qui possède ces qualités
fondamentales "devrait" favoriser la réussite d'un projet. Une source fréquente de
malentendus sur UML a pour origine la faculté d'UML de modéliser un processus, pour le
documenter et l'optimiser par exemple. En fin de compte, qu'est-ce qu'un processus ? Un
ensemble d'activités coordonnées et régulées, en partie ordonnées, dont le but est de créer
un produit (matériel ou intellectuel). UML permet tout à fait de modéliser les activités (c'est-
à-dire la dynamique) d'un processus, de décrire le rôle des acteurs du processus, la structure
des éléments manipulés et produits, etc...
Une extension d'UML ("UML extension for business modeling") propose d'ailleurs un certain
nombre de stéréotypes standards (extensions du métamodèle) pour mieux décrire les
processus.
Le RUP ("Rational Unified Process"), processus de développement "clé en main", proposé par
Rational Software, est lui aussi modélisé (documenté) avec UML. Il offre un cadre
méthodologique générique qui repose sur UML et la suite d'outils Rational.
Conclusion
Comme UML n'impose pas de méthode de travail particulière, il peut être intégré à n'importe
quel processus de développement logiciel de manière transparente. UML est une sorte de
boîte à outils, qui permet d'améliorer progressivement vos méthodes de travail, tout en
préservant vos modes de fonctionnement.
Intégrer UML par étapes dans un processus, de manière pragmatique, est tout à fait possible.
La faculté d'UML de se fondre dans le processus courant, tout en véhiculant une démarche
méthodologique, facilite son intégration et limite de nombreux risques (rejet des utilisateurs,
coûts...).
Intégrer UML dans un processus ne signifie donc pas révolutionner ses méthodes de travail,
mais cela devrait être l’occasion de se remettre en question.
- d'adapter les traitements, qui ne manipulaient à l'origine qu'un seul type de document (des
livres).
Il faudra donc modifier toutes les portions de code qui utilisent la base documentaire, pour
gérer les données et les actions propres aux différents types de documents. Il faudra par
exemple modifier la fonction qui réalise l'édition des "lettres de rappel" (une lettre de rappel
est une mise en demeure, qu'on envoie automatiquement aux personnes qui tardent à
rendre un ouvrage emprunté). Si l'on désire que le délai avant rappel varie selon le type de
document emprunté, il faut prévoir une règle de calcul pour chaque type de document.
En fait, c'est la quasi-totalité de l'application qui devra être adaptée, pour gérer les nouvelles
données et réaliser les traitements correspondants. Et cela, à chaque fois qu'on décidera de
gérer un nouveau type de document !
1ère amélioration : rassembler les valeurs qui caractérisent un type, dans le type
Une solution relativement élégante à la multiplication des branches conditionnelles et des
redondances dans le code (conséquence logique d'une trop grande ouverture des données),
consiste tout simplement à centraliser dans les structures de données, les valeurs qui leurs
sont propres.
Par exemple, le délai avant rappel peut être défini pour chaque type de document. Cela
permet donc de créer une fonction plus générique qui s’applique à tous les types de
documents.
2ème amélioration : centraliser les traitements associés à un type, auprès du type
Pourquoi ne pas aussi rassembler dans une même unité physique les types de données et
tous les traitements associés ? Que se passerait-il par exemple si l'on centralisait dans un
même fichier, la structure de données qui décrit les documents et la fonction de calcul du
COURS MODELISATION AVEC UML
délai avant rappel ? Cela nous permettrait de retrouver immédiatement la partie de code qui
est chargée de calculer le délai avant rappel d'un document, puisqu'elle se trouve au plus
près de la structure de données concernée.
Ainsi, si notre médiathèque devait gérer un nouveau type d'ouvrage, il suffirait de modifier
une seule fonction (qu'on sait retrouver instantanément), pour assurer la prise en compte de
ce nouveau type de document dans le calcul du délai avant rappel. Plus besoin de fouiller
partout dans le code...
Ecrit en ces termes, le logiciel serait plus facile à maintenir et bien plus lisible. Le stockage et
le calcul du délai avant rappel des documents, serait désormais assuré par une seule et
unique unité physique (quelques lignes de code, rapidement identifiables).
Pour accéder à la caractéristique "délai avant rappel" d'un document, il suffit de récupérer la
valeur correspondante parmi les champs qui décrivent le document. Pour assurer la prise en
compte d'un nouveau type de document dans le calcul du délai avant rappel, il suffit de
modifier une seule fonction, située au même endroit que la structure de données qui décrit
les documents.
Document
Code Document
Nom Document
Type Document
Centraliser les données d'un type et les traitements associés, dans une même unité physique,
permet de limiter les points de maintenance dans le code et facilite l'accès à l'information en
cas d'évolution du logiciel.
I.1.2) L’approche objet
Le concept d’objet
Les modifications qui ont été apportées au logiciel de gestion de médiathèque, nous ont
amené à transformer ce qui était à l'origine une structure de données, manipulée par des
fonctions, en une entité autonome, qui regroupe un ensemble de propriétés cohérentes et de
traitements associés. Une telle entité s'appelle... un objet et constitue le concept fondateur
de l'approche du même nom.
Un objet est une entité aux frontières précises qui possède une identité (un nom). Un
ensemble d'attributs caractérise l'état de l'objet. Un ensemble d'opérations (méthodes) en
définissent le comportement.
Un objet est une instance de classe (une occurrence d'un type abstrait).
Une classe est un type de données abstrait, caractérisé par des propriétés (attributs et
méthodes) communes à des objets et permettant de créer des objets possédant ces
propriétés.
COURS MODELISATION AVEC UML
Document
MERISE_UML_Document
C1
Support de Cours
• le polymorphisme
Le polymorphisme représente la faculté d'une même opération de s'exécuter différemment
suivant le contexte de la classe où elle se trouve.
Ainsi, une opération définie dans une superclasse peut s'exécuter de façon différente selon la
sous-classe où elle est héritée.
Ex : exécution d'une opération de calcul des salaires dans 2 sous-classes spécialisées : une
pour les cadres, l'autre pour les non-cadres.
Le polymorphisme augmente la généricité du code.
COURS MODELISATION AVEC UML
• l’agrégation
Il s'agit d'une relation entre deux classes, spécifiant que les objets d'une classe sont des
composants de l'autre classe.
Une relation d'agrégation permet donc de définir des objets composés d'autres objets.
L'agrégation permet d'assembler des objets de base, afin de construire des objets plus
complexes.
UML est donc le résultat d’un large consensus et tient compte des dernières avancées en
matière de modélisation et de développement logiciel. L'OMG RTF (nombreux acteurs
industriels) centralise et normalise les évolutions d'UML au niveau international et de
nombreux groupes d'utilisateurs UML favorisent le partage des expériences.
I.2.2) Cadre d’utilisation d’UML
UML n'est pas une méthode ou un processus
Si l'on parle de méthode objet pour UML, c'est par abus de langage. Ce constat vaut aussi
pour OMT ou d'autres techniques / langages de modélisation. Une méthode propose aussi un
processus, qui régit notamment l'enchaînement des activités de production d'une entreprise.
Or, UML a été pensé pour permettre de modéliser les activités de l'entreprise, pas pour les
régir.
Des méthodes orientées objet les plus connues, seules les méthodes OOSE et BOOCH incluent
cet aspect « processus » de manière explicite et formelle. Ces 2 auteurs se sont d’ailleurs
toujours démarqués des autres sur ce point.
Par leur nature, les processus doivent être adaptés aux organisations, à leurs domaines
d’activité, à leur culture … De ce fait, ni la normalisation ni la standardisation d’un processus
de développement logiciel ne peut faire l’objet d’un consensus international suffisant pour
aboutir à un standard acceptable et utilisable.
UML est un langage de modélisation
UML est un langage de modélisation au sens de la théorie des langages. Il contient de ce fait
les éléments constitutifs de tout langage, à savoir : des concepts, une syntaxe et une
sémantique.
De plus, UML a choisi une notation supplémentaire : il s’agit d’une forme visuelle fondée sur
des diagrammes. Si l’unification d’une notation est secondaire par rapports aux éléments
constituant le langage, elle reste cependant primordiale pour la communication et la
compréhension.
UML décrit un méta modèle
UML est fondé sur un métamodèle, qui définit :
- les éléments de modélisation (les concepts manipulés par le langage),
COURS MODELISATION AVEC UML
- la sémantique de ces éléments (leur définition et le sens de leur utilisation).
Un métamodèle est une description très formelle de tous les concepts d'un langage. Il limite
les ambiguïtés et encourage la construction d'outils.
Le métamodèle d'UML permet de classer les concepts du langage (selon leur niveau
d'abstraction ou domaine d'application) et expose sa structure.
Le métamodèle UML est lui-même décrit par un méta-métamodèle (OMG-MOF).
UML propose aussi une notation, qui permet de représenter graphiquement les éléments de
modélisation du métamodèle. Cette notation graphique est le support du langage UML.
UML offre :
- différentes vues (perspectives) complémentaires d'un système, qui guident l'utilisation des
concept objets
- plusieurs niveaux d'abstraction, qui permettent de mieux contrôler la complexité dans
l'expression des solutions objets.
UML est un support de communication
Sa notation graphique permet d'exprimer visuellement une solution objet.
L'aspect formel de sa notation limite les ambiguïtés et les incompréhensions.
Son aspect visuel facilite la comparaison et l'évaluation de solutions.
Son indépendance (par rapport aux langages d'implémentation, domaine d'application,
processus...) en font un langage universel.
I.2.3) Points forts d’UML
UML est un langage formel et normalisé
Il permet ainsi :
- un gain de précision
- un gage de stabilité
- l'utilisation d'outils
* Diagrammes comportementaux
Les diagrammes comportementaux rassemblent :
- Diagramme des cas d'utilisation: il permet d'identifier les possibilités d'interaction entre le
système et les acteurs (intervenants extérieurs au système), c'est-à-dire toutes les
fonctionnalités que doit fournir le système.
- Diagramme états-transitions: permet de décrire sous forme de machine à états finis le
comportement du système ou de ses composants.
- Diagramme d'activité: permet de décrire sous forme de flux ou d'enchaînement d'activités
le comportement du système ou de ses composants.
- Diagramme de séquence: représentation séquentielle du déroulement des traitements et
des interactions entre les éléments du système et/ou de ses acteurs.
- Diagramme de communication : depuis UML 2.x, représentation simplifiée d'un diagramme
de séquence se concentrant sur les échanges de messages entre les objets.
- Diagramme global d'interaction: depuis UML 2.x, permet de décrire les enchaînements
possibles entre les scénarios préalablement identifiés sous forme de diagrammes de
séquences.
- Diagramme de temps : depuis UML 2.3, permet de décrire les variations d'une donnée au
cours du temps.
COURS MODELISATION AVEC UML
a- Notion de classeur
Un classeur est un élément de modèle qui est doté d’une identité, possède des
caractéristiques structurelles (attributs, participation à des relations) et comportementales
(opérations). Exemple de classeur structuré montrant qu'un classeur Moteur est en fait
constitué d'un Allumage et de quatre Bougies :
c- Stéréotype
Un stéréotype est une annotation s'appliquant sur un élément de modèle. Il n'a pas de
définition formelle, mais permet de mieux caractériser des variétés d'un même concept. Il
permet donc d'adapter le langage à des situations particulières. Il est représenté par une
chaîne de caractères entre guillemets (<< >>) dans, ou à proximité du symbole de l'élément
de modèle de base. UML utilise aussi les rectangles pour représenter les classes. La notation
n'est cependant pas ambiguë grâce à la présence du stéréotype << use case >>.
Voici un exemple de représentation d’un acteur sous la forme d'un classeur stéréotypé <<
actor >> :
COURS MODELISATION AVEC UML
d- Note ou Commentaire
Une note contient une information textuelle comme un commentaire, un corps de méthode
ou une contrainte. Graphiquement, elle est représentée par un rectangle dont l'angle
supérieur droit est plié. Le texte contenu dans le rectangle n'est pas contraint par UML. Une
note n'indique pas explicitement le type d'élément qu'elle contient, toute l'intelligibilité d'une
note doit être contenue dans le texte même. On peut relier une note à l'élément qu'elle
décrit grâce à une ligne en pointillés. Si elle décrit plusieurs éléments, on dessine une ligne
vers chacun d'entre eux. L'exemple ci-après montre une note exprimant une contrainte sur
un attribut.
e- Contraintes
Une contrainte constitue une condition ou une restriction sémantique exprimée sous forme
d'instruction dans un langage textuel qui peut être naturel ou formel. En général, une
contrainte peut être attachée à n'importe quel élément de modèle ou liste d'éléments de
modèle. Une contrainte désigne une restriction qui doit être appliquée par une
implémentation correcte du système. On représente une contrainte sous la forme d'une
chaîne de texte placée entre accolades ({}). La chaîne constitue le corps écrit dans un langage
de contrainte qui peut être :
• naturel ;
• dédié, comme OCL ;
• ou encore directement issu d'un langage de programmation.
Exemple 1 :
Ce diagramme exprime que : une personne est née dans un pays, et que cette association ne
peut être modifiée ; une personne a visité un certain nombre de pays, dans un ordre donné,
et que le nombre de pays visités ne peut que croître ; une personne aimerait encore visiter
toute une liste de pays, et que cette liste est ordonnée (probablement par ordre de
préférence).
COURS MODELISATION AVEC UML
Exemple 2 :
Sur ces deux diagrammes, la contrainte porte sur un attribut qui doit être positif. En bas à
gauche, la contrainte {frozen} précise que le nombre de roues d'un véhicule ne peut pas
varier. Au milieu, la contrainte {subset} précise que le président est également un membre du
comité. Enfin, en bas à droite, la contrainte {xor} (ou exclusif) précise que les employés de
l'hôtel n'ont pas le droit de prendre une chambre dans ce même hôtel.
f- Espace de noms
Les espaces de noms sont des paquetages, des classeurs, etc. On peut déterminer un élément
nommé de façon unique par son nom qualifié, qui est constitué de la série des noms des
paquetages ou des autres espaces de noms depuis la racine jusqu'à l'élément en question.
Dans un nom qualifié, chaque espace de nom est séparé par deux doubles points (::). Par
exemple, si un paquetage B est inclus dans un paquetage A et contient une classe X, il faut
écrire A::B::X pour pouvoir utiliser la classe X en dehors du contexte du paquetage B.
Une classe est une représentation abstraite d’un d’ensemble d’objets, elle contient les
informations nécessaires à la construction de l’objet (c'est-à-dire la définition des attributs et
des méthodes).
COURS MODELISATION AVEC UML
La classe peut donc être considérée comme le modèle, le moule ou la notice qui va permette
la construction d’un objet. Nous pouvons encore parler de type (comme pour une donnée).
On dit également qu’un objet est l’instance d’une classe (la concrétisation d’une classe).
III.2.1) Représentation des classes
Une classe est représentée par un rectangle (appelé aussi classeur) divisé en 3
compartiments. Le premier compartiment contient le nom de la classe qui représente le type
d’objet instancié et débute par une lettre majuscule. Le nom est centré dans le compartiment
supérieur de la classe et écrit en caractère gras. Il est en italique si la classe est abstraite
(IMPOSSIBLE d’instancié un objet).
Le deuxième compartiment contient les attributs. Le troisième compartiment contient les
méthodes.
Si la modélisation ne s’intéresse qu’aux relations entre les différentes classes du système (et
pas au contenu des classes), nous pouvons ne pas représenter les attributs et les méthodes
de chaque classe (nous ne mettons rien dans le deuxième et troisième compartiment).
Exemples :
Les contraintes :
Une contrainte est une condition écrite entre 2 accolades. Elle peut être exprimée dans :
✗ Un langage naturel (description textuelle)
✗ Un langage formel (C++, java, OCL…).
Remarques : OCL (Object Contraint Language) est un langage spécialement conçu pour
exprimer des contraintes. En voici quelques unes qui peuvent être bien utiles :
✗ {readOnly} : si une telle contrainte est appliquée à un attribut, alors la valeur de celui-ci ne
peut plus être modifiée une fois la valeur initiale fixée (équivalent à un attribut constant).
✗ {query} : une méthode peut être déclarée comme étant de type requête (query) si le code
implémentant celle-ci ne modifie nullement l’état de l’objet, donc aucun de ses attributs.
✗ {ordered} {list} : lorsqu’une multiplicité supérieure à 1 est précisée, il est possible d’ajouter
une contrainte pour préciser si les valeurs sont ordonnées {ordered} ou pas {list}. Très
souvent, dans ce dernier cas, nous ne précisons même pas cette deuxième contrainte, c’est le
mode par défaut.
✗ {unique} : on demande cette fois-ci qu’il n’y ait aucun doublon dans les valeurs de la
collection.
✗ {not null} : L’attribut doit à tout prix être initialisé (utile dans le cas des pointeurs).
Exemple : Une station météo doit relever la température à intervalle de temps régulier. Elle
doit pouvoir stocker 100 relevés.
Constructeur et destructeurs :
Les stéréotypes peuvent être utilisés pour identifier des opérations particulières comme les
constructeurs (stéréotype « create ») et le destructeur (stéréotype « destroy »).
Exemple : Il est possible de mettre en place une gestion de notes, avec le calcul de la
moyenne, de la valeur maxi, etc. au travers d’une classe adaptée nommée Notes.
Les énumérations :
COURS MODELISATION AVEC UML
Une énumération est un type possédant un nombre fini et arbitraires de valeurs possibles,
construite sur mesure par le développeur, pour typer des variables bien particulières, comme
le représentation des jours de la semaine ou des mois de l’année.
Représentation : En UML, une énumération ne se définit pas par une classe, mais par un
classeur stéréotypé « enumeration ». Il s’agit d’un type de données, possédant un nom, et
utilisé pour énumérer un ensemble de littéraux correspondant à toutes les valeurs possibles
que peut prendre une expression de ce type.
Cette relation est plus forte. Elle indique qu’une classe est en relation avec une autre pendant
un certain laps de temps. La durée de vie des deux objets concernés n’est cependant pas
associée étroitement (un objet peut être détruit sans que l’autre le soit nécessairement).
L’association est représentée par un simple trait continu, reliant les deux classes. Le fait que
deux instances soient ainsi liées permet la navigation d’une instance vers l’autre, et vice versa
(chaque classe possède un attribut qui fait référence à l’autre classe).
Exemple :
Le nom de l’association :
L’association peut être ornée d’un texte, avec un éventuel sens de lecture, qui permet de
nous informer de l’intérêt de cette relation. Nous rajoutons une phrase courte permettant de
préciser le contexte de cette association.
Le rôle :
Chaque extrémité d’une association peut être nommée. Ce nom est appelé rôle et indique la
manière dont l’objet est vu de l’autre côté de l’association. Lorsqu’un objet A est lié à un
autre objet B par une association, cela se traduit souvent par un attribut supplémentaire dans
A qui portera le nom du rôle B. (et inversement).
Une association qui lie une classe avec elle-même est une association réflexive.
COURS MODELISATION AVEC UML
Contraintes et associations :
Nous avons déjà vu la notion de contrainte appliquées à des attributs. Nous pouvons aussi
proposer des contraintes au niveau des associations.
Exemples :
la navigabilité :
La navigabilité indique s'il est possible de traverser une association. On représente
graphiquement la navigabilité par une flèche du côté de la terminaison navigable et on
empêche la navigabilité par une croix du côté de la terminaison non navigable. Par défaut,
une association est navigable dans les deux sens.
Par exemple, sur la figure, la terminaison du côté de la classe Commande n'est pas navigable :
cela signifie que les instances de la classe Produit ne stockent pas de liste d'objets du type
Commande. Inversement, la terminaison du côté de la classe Produit est navigable : chaque
objet commande contient une liste de produits.
COURS MODELISATION AVEC UML
Lorsque l'on représente la navigabilité uniquement sur l'une des extrémités d'une
association, il faut remarquer que, implicitement, les trois associations représentées sur la
figure 3.8 ont la même signification : l'association ne peut être traversée que dans un sens.
Voici deux modélisations équivalentes :
remplacer par
Classe-Association :
Une association peut apporter de nouvelles informations (attributs et méthodes) qui
n’appartiennent à aucune des deux classes qu’elle relie et qui sont spécifiques à l’association.
Ces nouvelles informations peuvent être représentées par une nouvelle classe attachée à
l’association via un trait en pointillés.
Exemple 1 :
COURS MODELISATION AVEC UML
Remarque : Comme pour l’association ternaire, nous pouvons convertir la classe association
en un ensemble d’associations binaires.
Autres exemples :
COURS MODELISATION AVEC UML
III.2.2.3) Les Associations particulières : Composition et Agrégation
La composition et l’agrégation sont des cas particuliers d’association.
La composition indique qu’un objet A (appelé conteneur) est constitué d’un autre objet B.
Cet objet A n’appartient qu’a l’objet B et ne peut pas être partagé avec un autre objet C’est
une relation très forte, si l’objet A disparaît, alors l’objet B disparaît aussi. Ex : Un cheval
possède une tête et 4 jambes. Elle se représente par un losange plein du côté de l’objet
conteneur.
L’agrégation indique qu’un objet A possède un autre objet B, mais contrairement à la
composition, l’objet B peut exister indépendamment de l’objet A. La suppression de l’objet A
n’entraîne pas la suppression de l’objet B. L’objet A est plutôt à la fois possesseur et
utilisateur de l’objet B. Ex : Un cheval possède une selle sur son dos. Elle se représente par un
losange vide du côté de l’objet conteneur.
Par contre, une Composition est une Agrégation forte dans laquelle la
Création/Copie/Destruction du composite entraîne la Création/Copie/Destruction de ses
composants. Un composant appartient à au plus un composite (multiplicité maxi côté
conteneur = 1)
COURS MODELISATION AVEC UML
{overlapping} précise ici qu’il existe des véhicules amphibies qui sont issus d’un croisement
des sous classes de véicules.
. {complete} (liste exhaustive de classe) ou {incomplete} (les sous-classes spécifiées ne
couvrent pas la super-classe)
COURS MODELISATION AVEC UML
{incomplete} exprime ici l’idée que des instances de la Classe Personne sont des avocats, des
vendeurs, des enseignants ou d’autres personnes. {complete} exprime l’idée qu’un
enseignant ne peut être autre chose qu’un permanent ou un vacataire.
Ici, un Média peut être transporté, dupliqué, affiché. Le transport et la duplication sont
indépendants du type de Média (copie de fichiers). Par contre, tout Média peut être affiché
et ce n’est pas la même chose pour le Livre, la Vidéo, le Graphique ou le Texte. Un Média ne
peut pas définir comment il s’affiche tant qu’il ne sait pas ce qu’il est.
COURS MODELISATION AVEC UML
Il n’existe pas d’instance de la classe Média. Un Média n’existe qu’en tant que Livre, Texte,
Graphique ou Vidéo.
III.2.2.6) Les Interfaces et les Relations de réalisation
Le lien de réalisation qui est aussi (de manière non adéquate) appelé lien d’implantation
entre une classe abstraite et une classe concrète est modélisé similairement au lien
d’héritage, la différence étant le trait qui est en pointillé. Il est possible de spécifier des
hiérarchies d’interfaces, ainsi que des hiérarchies impliquant des interfaces, des classes
abstraites et des classes concrètes. Bien sûr, dans de telles hiérarchies, une interface ne peut
pas hériter d’une classe, qu’elle soit abstraite ou concrète ; c’est toujours l’inverse, c’est-à-
dire une classe abstraite ou concrète réalisant le contrat d’une interface, qui peut être
dessinée.
Graphiquement, la réalisation se représente par un trait discontinu terminé par une flèche
triangulaire parfois, mais pas nécessairement, stéréotypé « realize ».
Exemple 1 :
Exemple 2 :
COURS MODELISATION AVEC UML
La relation de réalisation se représente en fait comme une relation d'héritage avec une ligne
en pointillés. La raison de cette notation est que cette relation dénote une forme d'héritage
partiel : héritage comportemental mais pas structurel. Une classe qui réalise (implémente)
une interface est dans l'obligation de définir les méthodes décrites par l'interface (notion de
contrat à respecter) comme lorsqu'une classe concrète redéfinie les méthodes abstraites
héritées de sa classe parente abstraite.
Exemple 2 :
Soit le diagramme de classe suivant :
Les cas d’utilisation représentent les fonctionnalités que le système doit satisfaire. Chaque
cas d’utilisation peut être complété par un ensemble d’interactions successives d’une entité
en dehors du système (l’utilisateur) avec le système lui-même. Les cas d’utilisation
permettent :
COURS MODELISATION AVEC UML
de connaître le comportement du système sans spécifier comment ce comportement est
réalisé, de définir les limites précises du système, de comprendre l’attente des utilisateurs et
des experts du domaine. Les cas d’utilisation sont aussi des instruments de validation et
d’évaluation de l’avancement du système en cours et en fin de construction.
III.4.2) Principaux éléments des diagrammes de cas d’utilisation
L'acteur
Il représente un élément externe qui interagit avec le système. Cet élément peut être un
utilisateur ou un système tiers (autre ordinateur, autre programme, base de donnée).
Tous les éléments extérieurs qui stimulent le système et tous les éléments extérieurs qui sont
utilisés par le système sont représentés par des acteurs.
Dans le cas d'acteurs non-humains il est possible de définir une « Interface » qui représente
les opérations offertes par cet acteur.
Il est possible de représenter un acteur sous forme d'un bonhomme comme ci-dessous à
gauche ou sous forme d'un classeur comme ci-dessous à droite.
Le cas d'utilisation
Un cas d'utilisation représente une fonctionnalité du système. Cette fonctionnalité est définie
par une action déclenchante, un ou plusieurs déroulements possibles et éventuellement une
fin. Les différents déroulements aussi appelés scénarii seront modéliser par des diagrammes
de séquence, d'activité ou d'état. Le cas d'utilisation se représente par une ellipse contenant
un nom décrivant la fonctionnalité et éventuellement un stéréotype.
Remarque : Le nom du use case doit se composer d'un verbe à l'infinitif qui décrit une action.
Pour que l'ensemble du modèle soit cohérent il faut choisir tous les verbes soit du point de
vue du système soit du point de vue de l'utilisateur (ce qui est généralement préférable).