Documente Academic
Documente Profesional
Documente Cultură
la collection Info+ chez les ditions Ellipses, sous le titre UML 2 - de l'apprentissage la pratique (cours et exercices) (FNAC, amazon.fr)
UML 2
Laurent AUDIBERT
Avant-propos
Les techniques de programmation nont cess de progresser depuis lpoque de la programmation en langage binaire (cartes perfores, switch) nos jours. Cette volution a toujours t dicte par le besoin de concevoir et de maintenir des applications toujours plus complexes. La programmation par cartes perfores, switch ou cblage (de 1800 1940) a ainsi fait place des techniques plus volues, comme lassembleur (1947), avec larrive de lordinateur lectronique n des besoins de la guerre. Des langages plus volus ont ensuite vu le jour comme Fortran en 1956 ou Cobol en 1959. Jusque l, les techniques de programmation taient bases sur le branchement conditionnel et inconditionnel (goto) rendant les programmes importants extrmement difficiles dvelopper, matriser et maintenir. La programmation structure (Pascal en 1970, C en 1972, Modula et Ada en 1979, ) a alors vu le jour et permis de dvelopper et de maintenir des applications toujours plus ambitieuses. Lalgorithmique ne se suffisant plus elle seule la fin des annes 1970, le gnie logiciel est venu placer la mthodologie au c ur du dveloppement logiciel. Des mthodes comme Merise (1978) se sont alors imposes. La taille des applications ne cessant de crotre, la programmation structure a galement rencontr ses limites, faisant alors place la programmation oriente objet (Simula 67 en 1967, Smalltalk en 1976, C++ en 1982, Java en 1995, ). La technologie objet est donc la consquence ultime de la modularisation dicte par la matrise de la conception et de la maintenance dapplications toujours plus complexes. Cette nouvelle technique de programmation a ncessit la conception de nouvelles mthodes de modlisation. UML (Unified Modeling Language en anglais, soit langage de modlisation objet unifi) est n de la fusion des trois mthodes qui simposaient dans le domaine de la modlisation objet au milieu des annes 1990 : OMT, Booch et OOSE. Dimportants acteurs industriels (IBM, Microsoft, Oracle, DEC, HP, Rational, Unisys etc.) sassocient alors leffort et proposent UML 1.0 lOMG (Object Management Group) qui laccepte en novembre 1997 dans sa version 1.1. La version dUML en cours en 2008 est UML 2.1.1 qui simpose plus que jamais en tant que langage de modlisation standardis pour la modlisation des logiciels. Ce document constitue le support du cours dUML 2 dispens aux tudiants du dpartement dinformatique de linstitut universitaire de technologie (IUT) de Villetaneuse en semestre dcal. Ce support a t ralis en utilisant les ouvrages cits en bibliographie. Il est en partie bas sur le livre de [7] qui constitue une bonne introduction au langage UML. Aomar Osmani est lorigine du cours dUML dans notre IUT.
1
[27], [5], [3] [26] et [16] ont galement t largement utiliss. [27] est un ouvrage de rfrence assez complet et contient un dictionnaire dtaill de la terminologie UML 2.0. [5], galement crit par les crateurs du langage UML, est un guide dapprentissage compltant bien le premier ouvrage. [16] est un cours dUML 2.0 bien expliqu et plus complet et dtaill que [7] mais, en contrepartie, moins accessible. [3] constitue une approche pratique et critique dUML trs intressante. [25] constitue une excellente approche concrte dUML comportant des exercices corrigs de trs bonne facture que nous reprenons parfois dans les travaux dirigs de ce cours. Pascal Roques est probablement lun des auteurs les plus prolifique [23, 26, 24, 25] et comptant concernant la mise en uvre dUML. Agrable lire, [28] sintresse la place de linformatique dans notre socit et plus particulirement dans lentreprise. Enfin, diverses sources trouves sur Internet, inpuisable source dinformation en perptuel renouvellement, mont galement t dun grand secours. Parmi ces dernires, certaines sont incontournables, comme le cours de [21] ou encore le site [9].
Chapitre 1 Introduction la modlisation objet o 1.1 Le gnie logiciel 1.1.1 Linformatisation 1.1.2 Les logiciels 1.1.3 Le gnie logiciel 1.1.4 Notion de qualit pour un logiciel o 1.2 Modlisation, cycles de vie et mthodes 1.2.1 Pourquoi et comment modliser ? 1.2.2 Le cycle de vie dun logiciel 1.2.3 Modles de cycles de vie dun logiciel 1.2.4 Mthodes danalyse et de conception o 1.3 De la programmation structure lapproche oriente objet 1.3.1 Mthodes fonctionnelles ou structures 1.3.2 Lapproche oriente objet 1.3.3 Approche fonctionnelle vs. approche objet 1.3.4 Concepts importants de lapproche objet 1.3.5 Historique la programmation par objets o 1.4 UML 1.4.1 Introduction 1.4.2 Histoire des modlisations par objets 1.4.3 UML en uvre 1.4.4 Comment prsenter un modle UML ? Chapitre 2 Diagramme de cas dutilisation o 2.1 Introduction o 2.2 lments des diagrammes de cas dutilisation 2.2.1 Acteur 2.2.2 Cas dutilisation 2.2.3 Reprsentation dun diagramme de cas dutilisation o 2.3 Relations dans les diagrammes de cas dutilisation 2.3.1 Relations entre acteurs et cas dutilisation 2.3.2 Relations entre cas dutilisation 2.3.3 Relations entre acteurs
2
2.4 Notions gnrales du langage UML 2.4.1 Paquetage 2.4.2 Espace de noms 2.4.3 Classeur 2.4.4 Strotype 2.4.5 Note o 2.5 Modlisation des besoins avec UML 2.5.1 Comment identifier les acteurs ? 2.5.2 Comment recenser les cas dutilisation ? 2.5.3 Description textuelle des cas dutilisation 2.5.4 Remarques Chapitre 3 Diagramme de classes o 3.1 Introduction o 3.2 Les classes 3.2.1 Notions de classe et dinstance de classe 3.2.2 Caractristiques dune classe 3.2.3 Reprsentation graphique 3.2.4 Encapsulation, visibilit, interface 3.2.5 Nom dune classe 3.2.6 Les attributs 3.2.7 Les mthodes 3.2.8 Classe active o 3.3 Relations entre classes 3.3.1 Notion dassociation 3.3.2 Terminaison dassociation 3.3.3 Association binaire et n-aire 3.3.4 Multiplicit ou cardinalit 3.3.5 Navigabilit 3.3.6 Qualification 3.3.7 Classe-association 3.3.8 Agrgation et composition 3.3.9 Gnralisation et Hritage 3.3.10 Dpendance o 3.4 Interfaces o 3.5 Diagramme dobjets 3.5.1 Prsentation 3.5.2 Reprsentation 3.5.3 Relation de dpendance dinstanciation o 3.6 laboration et implmentation dun diagramme de classes 3.6.1 laboration dun diagramme de classes 3.6.2 Implmentation en Java 3.6.3 Implmentation en SQL Chapitre 4 Object constraint langage (OCL) o 4.1 Expression des contraintes en UML 4.1.1 Introduction 4.1.2 criture des contraintes 4.1.3 Reprsentation des contraintes et contraintes prdfinies o 4.2 Intrt dOCL 4.2.1 OCL Introduction 4.2.2 Illustration par lexemple o 4.3 Typologie des contraintes OCL
o
4.3.1 Diagramme support des exemples illustratifs 4.3.2 Contexte (context) 4.3.3 Invariants (inv) 4.3.4 Prconditions et postconditions (pre, post) 4.3.5 Rsultat dune mthode (body) 4.3.6 Dfinition dattributs et de mthodes (def et letin) 4.3.7 Initialisation (init) et volution des attributs (derive) o 4.4 Types et oprations utilisables dans les expressions OCL 4.4.1 Types et oprateurs prdfinis 4.4.2 Types du modle UML 4.4.3 OCL est un langage typ 4.4.4 Collections o 4.5 Accs aux caractristiques et aux objets 4.5.1 Accs aux attributs et aux oprations (self) 4.5.2 Navigation via une association 4.5.3 Navigation via une association qualifie 4.5.4 Navigation vers une classe association 4.5.5 Navigation depuis une classe association 4.5.6 Accder une caractristique redfinie (oclAsType()) 4.5.7 Oprations prdfinies sur tous les objets 4.5.8 Opration sur les classes o 4.6 Oprations sur les collections 4.6.1 Introduction : ., ->, :: et self 4.6.2 Oprations de base sur les collections 4.6.3 Opration sur les lments dune collection 4.6.4 Rgles de prcdence des oprateurs o 4.7 Exemples de contraintes Chapitre 5 Diagramme dtats-transitions o 5.1 Introduction au formalisme 5.1.1 Prsentation 5.1.2 Notion dautomate tats finis 5.1.3 Diagrammes dtats-transitions o 5.2 tat 5.2.1 Les deux acceptions du terme tat 5.2.2 tat initial et final o 5.3 vnement 5.3.1 Notion dvnement 5.3.2 vnement de type signal (signal) 5.3.3 vnement dappel (call) 5.3.4 vnement de changement (change) 5.3.5 vnement temporel (after ou when) o 5.4 Transition 5.4.1 Dfinition et syntaxe 5.4.2 Condition de garde 5.4.3 Effet dune transition 5.4.4 Transition externe 5.4.5 Transition dachvement 5.4.6 Transition interne o 5.5 Point de choix 5.5.1 Point de jonction 5.5.2 Point de dcision
5.6 tats composites 5.6.1 Prsentation 5.6.2 Transition 5.6.3 tat historique 5.6.4 Interface : les points de connexion 5.6.5 Concurrence Chapitre 6 Diagramme dactivits o 6.1 Introduction au formalisme 6.1.1 Prsentation 6.1.2 Utilisation courante o 6.2 Activit et Transition 6.2.1 Action 6.2.2 Activit 6.2.3 Groupe dactivits 6.2.4 N ud dactivit 6.2.5 Transition o 6.3 N ud excutable 6.3.1 N ud daction 6.3.2 N ud dactivit structure o 6.4 N ud de contrle 6.4.1 N ud initial 6.4.2 N ud final 6.4.3 N ud de dcision et de fusion 6.4.4 N ud de bifurcation et dunion o 6.5 N ud dobjet 6.5.1 Introduction 6.5.2 Pin dentre ou de sortie 6.5.3 Pin de valeur 6.5.4 Flot dobjet 6.5.5 N ud tampon central 6.5.6 N ud de stockage des donnes o 6.6 Partitions o 6.7 Exceptions Chapitre 7 Diagrammes dinteraction o 7.1 Prsentation du formalisme 7.1.1 Introduction 7.1.2 Classeur structur 7.1.3 Collaboration 7.1.4 Interactions et lignes de vie 7.1.5 Reprsentation gnrale o 7.2 Diagramme de communication 7.2.1 Reprsentation des lignes de vie 7.2.2 Reprsentation des connecteurs 7.2.3 Reprsentation des messages o 7.3 Diagramme de squence 7.3.1 Reprsentation des lignes de vie 7.3.2 Reprsentation des messages 7.3.3 Fragments dinteraction combins 7.3.4 Utilisation dinteraction Chapitre 8 Diagrammes de composants et de dploiement o 8.1 Introduction
o
8.2 Diagrammes de composants 8.2.1 Pourquoi des composants ? 8.2.2 Notion de composant 8.2.3 Notion de port 8.2.4 Diagramme de composants o 8.3 Diagramme de dploiement 8.3.1 Objectif du diagramme de dploiement 8.3.2 Reprsentation des n uds 8.3.3 Notion dartefact (artifact) 8.3.4 Diagramme de dploiement Chapitre 9 Mise en uvre dUML o 9.1 Introduction 9.1.1 UML nest pas une mthode 9.1.2 Une mthode simple et gnrique o 9.2 Identification des besoins 9.2.1 Diagramme de cas dutilisation 9.2.2 Diagrammes de squence systme 9.2.3 Maquette de lIHM o 9.3 Phases danalyse 9.3.1 Modle du domaine 9.3.2 Diagramme de classes participantes 9.3.3 Diagrammes dactivits de navigation o 9.4 Phase de conception 9.4.1 Diagrammes dinteraction 9.4.2 Diagramme de classes de conception
o
Un logiciel ou une application est un ensemble de programmes, qui permet un ordinateur ou un systme informatique dassurer une tche ou une fonction en particulier (exemple : logiciel de comptabilit, logiciel de gestion des prts). Les logiciels, suivant leur taille, peuvent tre dvelopps par une personne seule, une petite quipe, ou un ensemble dquipes coordonnes. Le dveloppement de grands logiciels par de grandes quipes pose dimportants problmes de conception et de coordination. Or, le dveloppement dun logiciel est une phase absolument cruciale qui monopolise lessentiel du cot dun produit2 et conditionne sa russite et sa prennit. En 1995, une tude du Standish Group dressait un tableau accablant de la conduite des projets informatiques. Reposant sur un chantillon reprsentatif de 365 entreprises, totalisant 8 380 applications, cette tude tablissait que :
y y y
16,2% seulement des projets taient conformes aux prvisions initiales, 52,7% avaient subi des dpassements en cot et dlai dun facteur 2 3 avec diminution du nombre des fonctions offertes, 31,1% ont t purement abandonns durant leur dveloppement.
Pour les grandes entreprises (qui lancent proportionnellement davantage de gros projets), le taux de succs est de 9% seulement, 37% des projets sont arrts en cours de ralisation, 50% aboutissent hors dlai et hors budget. Lexamen des causes de succs et dchec est instructif : la plupart des checs proviennent non de linformatique, mais de la matrise douvrage3 (i.e. le client). Pour ces raisons, le dveloppement de logiciels dans un contexte professionnel suit souvent des rgles strictes encadrant la conception et permettant le travail en groupe et la maintenance4 du code. Ainsi, une nouvelle discipline est ne : le gnie logiciel.
laugmentation des cots ; les difficults de maintenance et dvolution ; la non fiabilit ; le non respect des spcifications ; le non respect des dlais.
La maintenance est devenue une facette trs importante du cycle de vie dun logiciel. En effet, une enqute effectue aux USA en 1986 auprs de 55 entreprises rvle que 53% du budget total dun logiciel est affect la maintenance. Ce cot est rparti comme suit :
y y
34% maintenance volutive (modification des spcifications initiales) ; 10% maintenance adaptative (nouvel environnement, nouveaux utilisateurs) ;
7
y y y y y y
17% maintenance corrective (correction des bogues) ; 16% maintenance perfective (amliorer les performance sans changer les spcifications) ; 6% assistance aux utilisateurs ; 6% contrle qualit ; 7% organisation/suivi ; 4% divers.
Pour apporter une rponse tous ces problmes, le gnie logiciel sintresse particulirement la manire dont le code source dun logiciel est spcifi puis produit. Ainsi, le gnie logiciel touche au cycle de vie des logiciels :
y y y y y y
lanalyse du besoin, llaboration des spcifications, la conceptualisation, le dveloppement, la phase de test, la maintenance.
Les projets relatifs lingnierie logicielle sont gnralement de grande envergure et dpassent souvent les 10000 lignes de code. Cest pourquoi ces projets ncessitent une quipe de dveloppement bien structure. La gestion de projet se retrouve naturellement intimement lie au gnie logiciel.
facilit dapprentissage, dutilisation, de prparation des donnes, dinterprtation des erreurs et de rattrapage en cas derreur dutilisation. Ces facteurs sont parfois contradictoires, le choix des compromis doit seffectuer en fonction du contexte. 1 Par exemple, aujourdhui, 90% des nouvelles fonctionnalits des automobiles sont apportes par llectronique et linformatique embarques. Il y a, ou aura terme, du logiciel partout : ampoules lectriques, four micro ondes, tissus des vtements, stylos, livres, etc. 2 Comparativement sa production, le cot du dveloppement dun logiciel est extrmement important. Nous verrons par la suite que la maintenance cote galement trs cher. 3 c.f. section 1.2.1 << Matrise douvrage et matrise d uvre >> pour une dfinition de ce terme. 4 Souvent, les personnes qui doivent oprer des modifications ultrieures dans le code ne sont plus les personnes qui lont dvelopp.
y y y y
plans gnraux du btiment et de sa structure ; plans dtailles des diffrents locaux, bureaux, appartements, plans des cblages lectriques ; plans dcoulements des eaux, etc.
Les trois premiers exemples sont des modles que lon qualifie de prdictifs. Le dernier, plus conceptuel, possde diffrents niveaux de vues comme la pluspart des modles en gnie logiciel. Pourquoi modliser ? Modliser un systme avant sa ralisation permet de mieux comprendre le fonctionnement du systme. Cest galement un bon moyen de matriser sa complexit et dassurer sa cohrence. Un modle est un langage commun, prcis, qui est connu par tous les membres de lquipe et il est donc, ce titre, un vecteur privilgi pour communiquer. Cette communication est essentielle pour aboutir une comprhension commune aux diffrentes parties prenantes (notamment entre la matrise douvrage et la matrise d uvre informatique) et prcise dun problme donn. Dans le domaine de lingnierie du logiciel, le modle permet de mieux rpartir les tches et dautomatiser certaines dentre elles. Cest galement un facteur de rduction des cots et des dlais. Par exemple, les plateformes de modlisation savent maintenant exploiter les modles pour faire de la gnration de code (au moins au niveau du squelette) voire des aller-retours entre le code et le modle sans perte dinformation. Le modle est enfin indispensable pour assurer un bon niveau de qualit et une maintenance efficace. En effet, une fois mise en production, lapplication va devoir tre maintenue, probablement par une autre quipe et, qui plus est, pas ncessairement de la mme socit que celle ayant cre lapplication. Le choix du modle a donc une influence capitale sur les solutions obtenues. Les systmes non-triviaux sont mieux modliss par un ensemble de modles indpendants. Selon les modles employs, la dmarche de modlisation nest pas la mme. Qui doit modliser ? La modlisation est souvent faite par la matrise d uvre informatique (MOE). Cest malencontreux, car les priorits de la MOE rsident dans le fonctionnement de la plate-forme informatique et non dans les processus de lentreprise. Il est prfrable que la modlisation soit ralise par la matrise douvrage (MOA) de sorte que le mtier soit matre de ses propres concepts. La MOE doit intervenir dans le modle lorsque, aprs avoir dfini les concepts du mtier, on doit introduire les contraintes propres la plate-forme informatique. Il est vrai que certains mtiers, dont les priorits sont oprationnelles, ne disposent pas toujours de la capacit dabstraction et de la rigueur conceptuelle ncessaires la formalisation. La professionnalisation de la MOA a pour but de les doter de ces comptences. Cette professionnalisation rside essentiellement dans laptitude modliser le systme dinformation du mtier : le matre mot est modlisation. Lorsque le modle du systme dinformation est de bonne qualit, sobre, clair, stable, la matrise d uvre peut travailler dans de bonnes conditions. Lorsque cette professionnalisation a lieu, elle modifie les rapports avec linformatique et dplace la frontire des responsabilits, ce qui contrarie parfois les informaticiens dans un premier temps, avant quils nen voient apparatre les bnfices. Matrise douvrage et matrise d uvre Matre douvrage (MOA) :
10
Le MOA est une personne morale (entreprise, direction etc.), une entit de lorganisation. Ce nest jamais une personne. Matre d uvre (MOE) : Le MOE est une personne morale (entreprise, direction etc.) garante de la bonne ralisation technique des solutions. Il a, lors de la conception du SI, un devoir de conseil vis--vis du MOA, car le SI doit tirer le meilleur parti des possibilits techniques. Le MOA est client du MOE qui il passe commande dun produit ncessaire son activit. Le MOE fournit ce produit ; soit il le ralise lui-mme, soit il passe commande un ou plusieurs fournisseurs ( entreprises ) qui laborent le produit sous sa direction. La relation MOA et MOE est dfinie par un contrat qui prcise leurs engagements mutuels. Lorsque le produit est compliqu, il peut tre ncessaire de faire appel plusieurs fournisseurs. Le MOE assure leur coordination ; il veille la cohrence des fournitures et leur compatibilit. Il coordonne laction des fournisseurs en contrlant la qualit technique, en assurant le respect des dlais fixs par le MOA et en minimisant les risques. Le MOE est responsable de la qualit technique de la solution. Il doit, avant toute livraison au MOA, procder aux vrifications ncessaires ( recette usine ).
Intgration Lobjectif est de sassurer de linterfaage des diffrents lments (modules) du logiciel. Elle fait lobjet de tests dintgration consigns dans un document. Qualification (ou recette) Cest--dire la vrification de la conformit du logiciel aux spcifications initiales. Documentation Elle vise produire les informations ncessaires pour lutilisation du logiciel et pour des dveloppements ultrieurs. Mise en production Cest le dploiement sur site du logiciel. Maintenance Elle comprend toutes les actions correctives (maintenance corrective) et volutives (maintenance volutive) sur le logiciel. La squence et la prsence de chacune de ces activits dans le cycle de vie dpend du choix dun modle de cycle de vie entre le client et lquipe de dveloppement. Le cycle de vie permet de prendre en compte, en plus des aspects techniques, lorganisation et les aspects humains.
12
Le modle de cycle de vie en cascade (cf. figure 1.1) a t mis au point ds 1966, puis formalis aux alentours de 1970. Dans ce modle le principe est trs simple : chaque phase se termine une date prcise par la production de certains documents ou logiciels. Les rsultats sont dfinis sur la base des interactions entre tapes, ils sont soumis une revue approfondie et on ne passe la phase suivante que sils sont jugs satisfaisants. Le modle original ne comportait pas de possibilit de retour en arrire. Celle-ci a t rajoute ultrieurement sur la base quune tape ne remet en cause que ltape prcdente, ce qui, dans la pratique, savre insuffisant. Linconvnient majeur du modle de cycle de vie en cascade est que la vrification du bon fonctionnement du systme est ralise trop tardivement: lors de la phase dintgration, ou pire, lors de la mise en production. Modle de cycle de vie en V
Le modle en V (cf. figure 1.2) demeure actuellement le cycle de vie le plus connu et certainement le plus utilis. Il sagit dun modle en cascade dans lequel le dveloppement des tests et du logiciels sont effectus de manire synchrone. Le principe de ce modle est quavec toute dcomposition doit tre dcrite la recomposition et que toute description dun composant est accompagne de tests qui permettront de sassurer quil correspond sa description. Ceci rend explicite la prparation des dernires phases (validation-vrification) par les premires (construction du logiciel), et permet ainsi dviter un cueil bien connu de la spcification du logiciel : noncer une proprit quil est impossible de vrifier objectivement aprs la ralisation.
13
Cependant, ce modle souffre toujours du problme de la vrification trop tardive du bon fonctionnement du systme. Modle de cycle de vie en spirale Propos par B. Boehm en 1988, ce modle est beaucoup plus gnral que le prcdent. Il met laccent sur lactivit danalyse des risques : chaque cycle de la spirale se droule en quatre phases : 1. dtermination, partir des rsultats des cycles prcdents, ou de lanalyse prliminaire des besoins, des objectifs du cycle, des alternatives pour les atteindre et des contraintes ; 2. analyse des risques, valuation des alternatives et, ventuellement maquettage ; 3. dveloppement et vrification de la solution retenue, un modle classique (cascade ou en V) peut tre utilis ici ; 4. revue des rsultats et vrification du cycle suivant. Lanalyse prliminaire est affine au cours des premiers cycles. Le modle utilise des maquettes exploratoires pour guider la phase de conception du cycle suivant. Le dernier cycle se termine par un processus de dveloppement classique. Modle par incrment Dans les modles prcdents un logiciel est dcompos en composants dvelopps sparment et intgrs la fin du processus. Dans les modles par incrment un seul ensemble de composants est dvelopp la fois : des incrments viennent sintgrer un noyau de logiciel dvelopp au pralable. Chaque incrment est dvelopp selon lun des modles prcdents. Les avantages de ce type de modle sont les suivants :
y y y y
chaque dveloppement est moins complexe ; les intgrations sont progressives ; il est ainsi possible de livrer et de mettre en service chaque incrment ; il permet un meilleur lissage du temps et de leffort de dveloppement grce la possibilit de recouvrement (paralllisation) des diffrentes phases.
remettre en cause les incrments prcdents ou pire le noyau ; ne pas pouvoir intgrer de nouveaux incrments.
Les noyaux, les incrments ainsi que leurs interactions doivent donc tre spcifis globalement, au dbut du projet. Les incrments doivent tre aussi indpendants que possibles, fonctionnellement mais aussi sur le plan du calendrier du dveloppement.
Elle met en opposition dune part les mthodes ascendantes qui consistent construire un logiciel par composition partir de modules existants et, dautre part, les mthodes descendantes qui dcomposent rcursivement le systme jusqu arriver des modules programmables simplement. La distinction entre fonctionnel (dirige par le traitement) et oriente objet : Dans la stratgie fonctionnelle (galement qualifie de structure) un systme est vu comme un ensemble hirarchique dunits en interaction, ayant chacune une fonction clairement dfinie. Les fonctions disposent dun tat local, mais le systme a un tat partag, qui est centralis et accessible par lensemble des fonctions. Les stratgies orientes objet considrent quun systme est un ensemble dobjets interagissants. Chaque objet dispose dun ensemble dattributs dcrivant son tat et ltat du systme est dcrit (de faon dcentralise) par ltat de lensemble.
Les mthodes fonctionnelles (galement qualifies de mthodes structures) trouvent leur origine dans les langages procduraux. Elles mettent en vidence les fonctions assurer et proposent une approche hirarchique descendante et modulaire. Ces mthodes utilisent intensivement les raffinements successifs pour produire des spcifications dont lessentielle est sous forme de notation graphique en diagrammes de flots de donnes. Le plus haut niveau reprsente lensemble du problme (sous forme dactivit, de donnes ou de processus, selon la mthode). Chaque niveau est ensuite dcompos en respectant les entres/sorties du niveau suprieur. La dcomposition se poursuit jusqu arriver des composants matrisables (cf. figure 1.3). Lapproche fonctionnelle dissocie le problme de la reprsentation des donnes, du problme du traitement de ces donnes. Sur la figure 1.3, les donnes du problme sont reprsentes sur la gauche. Des flches transversalles matrialisent la manipulation de ces donnes par des sous-fonctions. Cet accs peut-tre direct (cest parfois le cas quand les donnes sont regroupes dans une base de donnes), ou peut tre ralis par le passage de paramtre depuis le programme principal.
15
La SADT (Structured Analysis Design Technique) est probablement la mthode danalyse fonctionnelle et de gestion de projets la plus connue. Elle permet non seulement de dcrire les tches du projet et leurs interactions, mais aussi de dcrire le systme que le projet vise tudier, crer ou modifier, en mettant notamment en vidence les parties qui constituent le systme, la finalit et le fonctionnement de chacune, ainsi que les interfaces entre ces diverses parties. Le systme ainsi modlis nest pas une simple collection dlments indpendants, mais une organisation structure de ceux-ci dans une finalit prcise. En rsum, larchitecture du systme est dicte par la rponse au problme (i.e. la fonction du systme).
Lapproche structure privilgie la fonction comme moyen dorganisation du logiciel. Ce nest pas pour cette raison que lapproche objet est une approche non fonctionnelle. En effet, les mthodes dun objet sont des fonctions. Ce qui diffrencie sur le fond lapproche objet de lapproche fonctionnelle, cest que les fonctions obtenues lissue de la mise en uvre de lune ou lautre mthode sont distinctes. Lapproche objet est une approche oriente donne. Dans cette approche, les fonctions se dduisent dun regroupement de champs de donnes formant une entit cohrente, logique, tangible et surtout stable quant au problme trait. Lapproche structure classique privilgie une organisation des donnes postrieure la dcouverte des grandes, puis petites fonctions qui les dcomposent, lensemble constituant les services qui rpondent aux besoins. En approche objet, lvolution des besoins aura le plus souvent tendance se prsenter comme un changement de linteraction des objets. Sil faut apporter une modification aux donnes, seul lobjet incrimin (encapsulant cette donne) sera modifi. Toutes les fonctions modifier sont bien identifies : elles se trouvent dans ce mme objet : ce sont ses mthodes. Dans une approche structure, lvolution des besoins entrane souvent une dgnrescence, ou une profonde remise en question, de la topologie typique de la figure 1.3 car la dcomposition des units de traitement (du programme principal aux sous-fonctions) est directement dicte par ces besoins. Dautre part, une modification des donnes entrane gnralement une modification dun nombre important de fonctions parpilles et difficiles identifier dans la hirarchie de cette dcomposition. En fait, la modularit nest pas antinomique de lapproche structure. Les modules rsultant de la dcomposition objet sont tout simplement diffrents de ceux manant de lapproche structure. Les units de traitement, et surtout leur dpendance dans la topologie de la figure 1.3 sont initialement bons. Cest leur rsistance au temps, contrairement aux modules objet, qui est source de problme. La structure dun logiciel issue dune approche structure est beaucoup moins mallable, adaptable, que celle issue dune approche objet. Ainsi la technologie objet est la consquence ultime de la modularisation du logiciel, dmarche qui vise matriser sa production et son volution. Mais malgr cette continuit logique les langages objet ont apport en pratique un profond changement dans lart de la programmation : ils impliquent en effet un changement de lattitude mentale du programmeur.
Lencapsulation facilite lvolution dune application car elle stabilise lutilisation des objets : on peut modifier limplmentation des attributs dun objet sans modifier son interface, et donc la faon dont lobjet est utilis. Lencapsulation garantit lintgrit des donnes, car elle permet dinterdire, ou de restreindre, laccs direct aux attributs des objets. Hritage, Spcialisation, Gnralisation et Polymorphisme Lhritage est un mcanisme de transmission des caractristiques dune classe (ses attributs et mthodes) vers une sous-classe. Une classe peut tre spcialise en dautres classes, afin dy ajouter des caractristiques spcifiques ou den adapter certaines. Plusieurs classes peuvent tre gnralises en une classe qui les factorise, afin de regrouper les caractristiques communes dun ensemble de classes. Ainsi, la spcialisation et la gnralisation permettent de construire des hirarchies de classes. Lhritage peut tre simple ou multiple. Lhritage vite la duplication et encourage la rutilisation. Le polymorphisme reprsente la facult dune mthode pouvoir sappliquer des objets de classes diffrentes. Le polymorphisme augmente la gnricit, et donc la qualit, du code. Agrgation Il sagit dune relation entre deux classes, spcifiant que les objets dune classe sont des composants de lautre classe. Une relation dagrgation permet donc de dfinir des objets composs dautres objets. Lagrgation permet donc dassembler des objets de base, afin de construire des objets plus complexes.
1.4 UML
1.4.1 Introduction
La description de la programmation par objets a fait ressortir ltendue du travail conceptuel ncessaire : dfinition des classes, de leurs relations, des attributs et mthodes, des interfaces etc. Pour programmer une application, il ne convient pas de se lancer tte baisse dans lcriture du code : il faut dabord organiser ses ides, les documenter, puis organiser la ralisation en dfinissant les modules et tapes
18
de la ralisation. Cest cette dmarche antrieure lcriture que lon appelle modlisation ; son produit est un modle. Les spcifications fournies par la matrise douvrage en programmation imprative taient souvent floues : les articulations conceptuelles (structures de donnes, algorithmes de traitement) sexprimant dans le vocabulaire de linformatique, le modle devait souvent tre labor par celle-ci. Lapproche objet permet en principe la matrise douvrage de sexprimer de faon prcise selon un vocabulaire qui, tout en transcrivant les besoins du mtier, pourra tre immdiatement compris par les informaticiens. En principe seulement, car la modlisation demande aux matrises douvrage une comptence et un professionnalisme qui ne sont pas aujourdhui rpandus.
OMT de James Rumbaugh (General Electric) fournit une reprsentation graphique des aspects statique, dynamique et fonctionnel dun systme ; OOD de Grady Booch, dfinie pour le Department of Defense, introduit le concept de paquetage (package) ; OOSE dIvar Jacobson (Ericsson) fonde lanalyse sur la description des besoins des utilisateurs (cas dutilisation, ou use cases).
Chaque mthode avait ses avantages et ses partisans. Le nombre de mthodes en comptition stait rduit, mais le risque dun clatement subsistait : la profession pouvait se diviser entre ces trois mthodes, crant autant de continents intellectuels qui auraient du mal communiquer. vnement considrable et presque miraculeux, les trois gourous qui rgnaient chacun sur lune des trois mthodes se mirent daccord pour dfinir une mthode commune qui fdrerait leurs apports respectifs (on les surnomme depuis the Amigos ). UML (Unified Modeling Language) est n de cet effort de convergence. Ladjectif unified est l pour marquer quUML unifie, et donc remplace. En fait, et comme son nom lindique, UML na pas lambition dtre exactement une mthode : cest un langage. Lunification a progress par tapes. En 1995, Booch et Rumbaugh (et quelques autres) se sont mis daccord pour construire une mthode unifie, Unified Method 0.8 ; en 1996, Jacobson les a rejoints pour produire UML 0.9 (notez le remplacement du mot mthode par le mot langage, plus modeste). Les acteurs les plus importants dans le monde du logiciel sassocient alors leffort (IBM, Microsoft, Oracle, DEC, HP, Rational, Unisys etc.) et UML 1.0 est soumis lOMG5. LOMG adopte en novembre 1997 UML 1.1 comme langage de modlisation des systmes dinformation objets. La version dUML en cours en 2008 est UML 2.1.1 et les travaux damlioration se poursuivent. UML est donc non seulement un outil intressant mais une norme qui simpose en technologie objets et laquelle se sont rangs tous les grands acteurs du domaine, acteurs qui ont dailleurs contribu son laboration.
19
y y y y y y
Diagrammes comportementaux ou diagrammes dynamiques (UML Behavior) diagramme de cas dutilisation (Use case diagram) diagramme dactivits (Activity diagram) diagramme dtats-transitions (State machine diagram) Diagrammes dinteraction (Interaction diagram) o diagramme de squence (Sequence diagram) o diagramme de communication (Communication diagram) o diagramme global dinteraction (Interaction overview diagram) o diagramme de temps (Timing diagram)
y y y y
Ces diagrammes, dune utilit variable selon les cas, ne sont pas ncessairement tous produits loccasion dune modlisation. Les plus utiles pour la matrise douvrage sont les diagrammes dactivits, de cas dutilisation, de classes, dobjets, de squence et dtats-transitions. Les diagrammes de composants, de dploiement et de communication sont surtout utiles pour la matrise d uvre qui ils permettent de formaliser les contraintes de la ralisation et la solution technique. Diagramme de cas dutilisation
20
Le diagramme de cas dutilisation (cf. section 2) reprsente la structure des grandes fonctionnalits ncessaires aux utilisateurs du systme. Cest le premier diagramme du modle UML, celui o sassure la relation entre lutilisateur et les objets que le systme met en uvre. Diagramme de classes Le diagramme de classes (cf. section 3) est gnralement considr comme le plus important dans un dveloppement orient objet. Il reprsente larchitecture conceptuelle du systme : il dcrit les classes que le systme utilise, ainsi que leurs liens, que ceux-ci reprsentent un embotage conceptuel (hritage) ou une relation organique (agrgation). Diagramme dobjets Le diagramme dobjets (cf. section 3.5) permet dclairer un diagramme de classes en lillustrant par des exemples. Il est, par exemple, utilis pour vrifier ladquation dun diagramme de classes diffrents cas possibles. Diagramme dtats-transitions Le diagramme dtats-transitions (cf. section 5) reprsente la faon dont voluent (i.e. cycle de vie) les objets appartenant une mme classe. La modlisation du cycle de vie est essentielle pour reprsenter et mettre en forme la dynamique du systme. Diagramme dactivits Le diagramme dactivits (cf. section 6) nest autre que la transcription dans UML de la reprsentation du processus telle quelle a t labore lors du travail qui a prpar la modlisation : il montre lenchanement des activits qui concourent au processus. Diagramme de squence et de communication Le diagramme de squence (cf. section 7.3) reprsente la succession chronologique des oprations ralises par un acteur. Il indique les objets que lacteur va manipuler et les oprations qui font passer dun objet lautre. On peut reprsenter les mmes oprations par un diagramme de communication (cf. section 7.2), graphe dont les n uds sont des objets et les arcs (numrots selon la chronologie) les changes entre objets. En fait, diagramme de squence et diagramme de communication sont deux vues diffrentes mais logiquement quivalentes (on peut construire lune partir de lautre) dune mme chronologie. Ce sont des diagrammes dinteraction (section 7).
pour permettre au lecteur de voir comment lapplication va fonctionner en pratique, elle doit tre illustre par une esquisse des crans qui seront affichs devant les utilisateurs de terrain. Explication des choix qui ont guid la modlisation formelle : il sagit de synthtiser, sous les yeux du lecteur, les discussions qui ont prsid ces choix. Modle formel : cest le document le plus pais et le plus difficile lire. Il est prfrable de le prsenter sur lIntranet de lentreprise. En effet, les diagrammes peuvent tre alors quips de liens hypertextes permettant louverture de diagrammes plus dtaills ou de commentaires. On doit prsenter en premier le diagramme de cas dutilisation qui montre lenchanement des cas dutilisation au sein du processus, enchanement immdiatement comprhensible ; puis le diagramme dactivits, qui montre le contenu de chaque cas dutilisation ; puis le diagramme de squence, qui montre lenchanement chronologique des oprations lintrieur de chaque cas dutilisation. Enfin, le diagramme de classes, qui est le plus prcis conceptuellement mais aussi le plus difficile lire car il prsente chacune des classes et leurs relations (agrgation, hritage, association, etc.). 5 LOMG (Object Management Group) est une association amricaine but non-lucratif cre en 1989 dont lobjectif est de standardiser et promouvoir le modle objet sous toutes ses formes. LOMG est notamment la base des spcifications UML, MOF, CORBA et IDL. LOMG est aussi lorigine de la recommandation MDA
22
Un acteur est lidalisation dun rle jou par une personne externe, un processus ou une chose qui interagit avec un systme. Il se reprsente par un petit bonhomme (figure 2.1) avec son nom (i.e. son rle) inscrit dessous.
Figure 2.1: Exemple de reprsentation dun acteur Il est galement possible de reprsenter un acteur sous la forme dun classeur (cf. section 2.4.3) strotyp (cf. section 2.4.4) << actor >> (figure 2.2).
Figure 2.2: Exemple de reprsentation dun acteur sous la forme dun classeur
Figure 2.3: Exemple de reprsentation dun cas dutilisation Dans le cas o lon dsire prsenter les attributs ou les oprations du cas dutilisation, il est prfrable de le reprsenter sous la forme dun classeur strotyp << use case >> (figure 2.4). Nous reviendrons sur les notions dattributs ou dopration lorsque nous aborderons les diagrammes de classes et dobjets (section 3).
23
Figure 2.4: Exemple de reprsentation dun cas dutilisation sous la forme dun classeur
Figure 2.5: Exemple simplifi de diagramme de cas dutilisation modlisant une borne daccs une banque. Comme le montre la figure 2.5, la frontire du systme est reprsente par un cadre. Le nom du systme figure lintrieur du cadre, en haut. Les acteurs sont lextrieur et les cas dutilisation lintrieur.
Une relation dassociation est chemin de communication entre un acteur et un cas dutilisation et est reprsent un trait continu (cf. figure 2.5 ou 2.6). Multiplicit Lorsquun acteur peut interagir plusieur fois avec un cas dutilisation, il est possible dajouter une multiplicit sur lassociation du ct du cas dutilisation. Le symbole * signifie plusieurs (figure 2.6), exactement n scrit tout simplement n, n..m signifie entre n et m, etc. Prciser une multiplicit sur une relation nimplique pas ncessairement que les cas sont utiliss en mme temps.
24
La notion de multiplicit nest pas propre au diagramme de cas dutilisation. Nous en reparlerons dans le chapitre consacr au diagramme de classes section 3.3.4. Acteurs principaux et secondaires Un acteur est qualifi de principal pour un cas dutilisation lorsque ce cas rend service cet acteur. Les autres acteurs sont alors qualifis de secondaires. Un cas dutilisation a au plus un acteur principal. Un acteur principal obtient un rsultat observable du systme tandis quun acteur secondaire est sollicit pour des informations complmentaires. En gnral, lacteur principal initie le cas dutilisation par ses sollicitations. Le strotype << primary >> vient orner lassociation reliant un cas dutilisation son acteur principal, le strotype << secondary >> est utilis pour les acteurs secondaires (figure 2.6). Cas dutilisation interne Quand un cas nest pas directement reli un acteur, il est qualifi de cas dutilisation interne.
Figure 2.7: Exemple de diagramme de cas dutilisation Types et reprsentations Il existe principalement deux types de relations :
25
y y
les dpendances strotypes, qui sont explicites par un strotype (les plus utiliss sont linclusion et lextension), et la gnralisation/spcialisation.
Une dpendance se reprsente par une flche avec un trait pointill (figure 2.7). Si le cas A inclut ou tend le cas B, la flche est dirige de A vers B. Le symbole utilis pour la gnralisation est une flche avec un trait plein dont la pointe est un triangle ferm dsignant le cas le plus gnral (figure 2.7). Relation dinclusion Un cas A inclut un cas B si le comportement dcrit par le cas A inclut le comportement du cas B : le cas A dpend de B. Lorsque A est sollicit, B lest obligatoirement, comme une partie de A. Cette dpendance est symbolise par le strotype << include >> (figure 2.7). Par exemple, laccs aux informations dun compte bancaire inclut ncessairement une phase dauthentification avec un identifiant et un mot de passe (figure 2.7). Les inclusions permettent essentiellement de factoriser une partie de la description dun cas dutilisation qui serait commune dautres cas dutilisation (cf. le cas Sauthentifier de la figure 2.7). Les inclusions permettent galement de dcomposer un cas complexe en sous-cas plus simples (figure 2.8). Cependant, il ne faut surtout pas abuser de ce type de dcomposition : il faut viter de raliser du dcoupage fonctionnel dun cas dutilisation en plusieurs sous-cas dutilisation pour ne pas retomber dans le travers de la dcomposition fonctionnelle. Attention galement au fait que, les cas dutilisation ne senchanent pas, puisquil ny a aucune reprsentation temporelle dans un diagramme de cas dutilisation.
Figure 2.8: Relations entre cas pour dcomposer un cas complexe Relation dextension La relation dextension est probablement la plus utile car elle a une smantique qui a un sens du point de vue mtier au contraire des deux autres qui sont plus des artifices dinformaticiens.
26
On dit quun cas dutilisation A tend un cas dutilisation B lorsque le cas dutilisation A peut tre appel au cours de lexcution du cas dutilisation B. Excuter B peut ventuellement entraner lexcution de A : contrairement linclusion, lextension est optionnelle. Cette dpendance est symbolise par le strotype << extend >> (figure 2.7). Lextension peut intervenir un point prcis du cas tendu. Ce point sappelle le point dextension. Il porte un nom, qui figure dans un compartiment du cas tendu sous la rubrique point dextension, et est ventuellement associ une contrainte indiquant le moment o lextension intervient. Une extension est souvent soumise condition. Graphiquement, la condition est exprime sous la forme dune note. La figure 2.7 prsente lexemple dune banque o la vrification du solde du compte nintervient que si la demande de retrait dpasse 20 euros. Relation de gnralisation Un cas A est une gnralisation dun cas B si B est un cas particulier de A. Dans la figure 2.7, la consultation dun compte via Internet est un cas particulier de la consultation. Cette relation de gnralisation/spcialisation est prsente dans la plupart des diagrammes UML et se traduit par le concept dhritage dans les langages orients objet.
utiliserons les autres dans les chapitres qui suivent, notamment dans le chapitre sur les diagrammes de classes (section 3).
2.4.1 Paquetage
Figure 2.10: Reprsentations dun paquetage Un paquetage est un regroupement dlments de modle et de diagrammes. Il permet ainsi dorganiser des lments de modlisation en groupes. Il peut contenir tout type dlment de modle : des classes, des cas dutilisation, des interfaces, des diagrammes, et mme des paquetages imbriqus (dcomposition hirarchique). Un paquetage se reprsente comme un dossier avec son nom inscrit dedans (figure 2.10, diagramme de gauche). Il est possible de reprsenter explicitement le contenu dun paquetage. Dans ce cas, le nom du paquetage est plac dans longlet (figure 2.10, diagramme de droite). Les lments contenus dans un paquetage doivent reprsenter un ensemble fortement cohrent et sont gnralement de mme nature et de mme niveau smantique. Tout lment nappartient qu un seul paquetage. Les paquetage constituent un mcanisme de gestion important des problmes de grande taille. Ils permettent dviter les grands modles plats et de cloisonner des lments constitutifs dun systme voluant des rythmes diffrents ou dvelopps par des quipes diffrentes. Il existe un paquetage racine unique, ventuellement anonyme, qui contient la totalit des modles dun systme.
2.4.3 Classeur
Les paquetages et les relations de gnralisation ne peuvent avoir dinstance. Dune manire gnrale, les lments de modlisation pouvant en avoir sont reprsents dans des classeurs1. Plus important encore, un classeur est un lment de modle qui dcrit une unit structurelle ou comportementale. Un classeur modlise un concept discret qui dcrit un lment (i.e. objet) dot dune identit (i.e. un nom), dune structure ou dun tat (i.e. des attributs), dun comportement (i.e. des oprations), de relations et dune structure interne facultative. Il peut participer des relations dassociation, de gnralisation, de dpendance
28
et de contrainte. On le dclare dans un espace de noms, comme un paquetage ou une autre classe. Un classeur se reprsente par un rectangle, en traits pleins, contenant ventuellement des compartiments. Les acteurs et les cas dutilisation sont des classeurs. Tout au long de ce cours, nous retrouverons le terme de classeur car cette notion englobe aussi les classes, les interfaces, les signaux, les n uds, les composants, les sous-systmes, etc. Le type de classeur le plus important tant, bien videmment, la classe (cf. section 3).
2.4.4 Strotype
Un strotype est une annotation sappliquant sur un lment de modle. Il na pas de dfinition formelle, mais permet de mieux caractriser des varits dun mme concept. Il permet donc dadapter le langage des situations particulires. Il est reprsent par une chanes de caractres entre guillemets (<< >>) dans, ou proximit du symbole de llment de modle de base. Par exemple, la figure 2.4 reprsente un cas dutilisation par un rectangle. UML utilise aussi les rectangles pour reprsenter les classes (cf. section 3). La notation nest cependant pas ambigu grce la prsence du strotype << use case >>.
2.4.5 Note
Figure 2.11: Exemple dutilisation dune note pour prciser que le solde dun compte doit toujours tre positif. Une note contient une information textuelle comme un commentaire, un corps de mthode ou une contrainte. Graphiquement, elle est reprsente par un rectangle dont langle suprieur droit est pli. Le texte contenu dans le rectangle nest pas contraint par UML. Une note nindique pas explicitement le type dlment quelle contient, toute lintelligibilit dune note doit tre contenu dans le texte mme. On peut relier une note llment quelle dcrit grce une ligne en pointills. Si elle dcrit plusieurs lments, on dessine une ligne vers chacun dentre eux. Lexemple de la figure 2.11 montre une note exprimant une contrainte (cf. section 4.1) sur un attribut.1 Certains lments, comme les associations, peuvent avoir des instances bien quils ne soient pas reprsents dans des classeurs.
va devoir offrir son environnement. Oublier des acteurs ou en identifier de faux conduit donc ncessairement se tromper sur linterface et donc la dfinition du systme produire. Il faut faire attention ne pas confondre acteurs et utilisateurs (utilisateur avec le sens de la personne physique qui va appuyer sur un bouton) dun systme. Dune part parce que les acteurs inclus les utilisateurs humains mais aussi les autres systmes informatiques ou hardware qui vont communiquer avec le systme. Dautre part parce quun acteur englobe tout une classe dutilisateur. Ainsi, plusieurs utilisateurs peuvent avoir le mme rle, et donc correspondre un mme acteur, et une mme personne physique peut jouer des rles diffrents vis--vis du systme, et donc correspondre plusieurs acteurs. Chaque acteur doit tre nomm. Ce nom doit reflter sont rle car un acteur reprsente un ensemble cohrent de rles jous vis--vis du systme. Pour trouver les acteurs dun systme, il faut identifier quels sont les diffrents rles que vont devoir jouer ses utilisateurs (ex : responsable clientle, responsable dagence, administrateur, approbateur, ). Il faut galement sintresser aux autres systmes avec lesquels le systme va devoir communiquer comme :
y y y
les priphriques manipuls par le systme (imprimantes, hardware dun distributeur de billet, ) ; des logiciels dj disponibles intgrer dans le projet ; des systmes informatiques externes au systme mais qui interagissent avec lui, etc.
Pour faciliter la recherche des acteurs, on peut imaginer les frontires du systme. Tout ce qui est lextrieur et qui interagit avec le systme est un acteur, tout ce qui est lintrieur est une fonctionnalit raliser. Vrifiez que les acteurs communiquent bien directement avec le systme par mission ou rception de messages. Une erreur frquente consiste rpertorier en tant quacteur des entits externes qui ninteragissent pas directement avec le systme, mais uniquement par le biais dun des vritables acteurs. Par exemple, lhtesse de caisse dun magasin de grande distribution est un acteur pour la caisse enregistreuse, par contre, les clients du magasins ne correspondent pas un acteur car ils ninteragissent pas directement avec la caisse.
30
Dans tous les cas, il faut bien garder lesprit quil ny a pas de notion temporelle dans un diagramme de cas dutilisation.
2.5.4 Remarques
Concernant les relations dans les cas dutilisation Il est important de noter que lutilisation des relations nest pas primordiale dans la rdaction des cas dutilisation et donc dans lexpression du besoin. Ces relations peuvent tre utiles dans certains cas mais une trop forte focalisation sur leur usage conduit souvent une perte de temps ou un usage fauss, pour une valeur ajoute, au final, relativement faible. Concernant les cas dutilisation Unanimement reconnus comme cantonns lingnierie des besoins, les diagrammes de cas dutilisation ne peuvent tre qualifis de modlisation proprement parler. Dailleur, de nombreux lments descriptifs sont en langage naturel. De plus, ils ne correspondent pas stricto sensu une approche objet. En effet, capturer les besoins, les dcouvrir, les rfuter, les consolider, etc., correspond plus une analyse fonctionnelle classique. Les Use case Realization UML ne mentionne que le fait que la ralisation dun cas dutilisation est dcrit par une suite de collaborations entre lments de modlisation mais ne parle par de llment de modlisation use case realization. Les use case realization ne sont pas un formalisme dUML mais du RUP (Rational Unified Process). Aprs avoir rdig les cas dutilisation, il faut identifier des objets, des classes, des donnes et des traitements qui vont permettre au systme de supporter ces cas dutilisation. Pour documenter la manire dont sont mis en uvre les cas dutilisation du systme, on peut utiliser le mcanisme des use case realization. Ils permettent de regrouper un diagramme de classes et des diagrammes dinteraction. On retrouvera dans le diagramme de classes les classes qui mettent en uvre le cas dutilisation associ au use case realization. On retrouvera dans les diffrents diagrammes dinteraction une documentation des diffrents vnements changs entre les objets afin de raliser les diffrents scnarii dcrit dans le cas dutilisation. Au final on aura un use case realization par cas dutilisation et dans chaque use case realization on aura autant de diagrammes dinteraction que ncessaire pour illustrer les scnarii dcrits dans le cas dutilisation (scnario nominal, scnarii alternatifs et scnarii dexception). Les use case realization permettent donc, dans la pratique, dapporter un lment de rponse la question : Comment structurer mon modle UML ?
Alors que le diagramme de cas dutilisation montre un systme du point de vue des acteurs, le diagramme de classes en montre la structure interne. Il permet de fournir une reprsentation abstraite des objets du systme qui vont interagir ensemble pour raliser les cas dutilisation. Il est important de noter quun mme objet peut trs bien intervenir dans la ralisation de plusieurs cas dutilisation. Les cas dutilisation ne ralisent donc pas une partition1 des classes du diagramme de classes. Un diagramme de classes nest donc pas adapt (sauf cas particulier) pour dtailler, dcomposer, ou illustrer la ralisation dun cas dutilisation particulier. Il sagit dune vue statique car on ne tient pas compte du facteur temporel dans le comportement du systme. Le diagramme de classes modlise les conceps du domaine dapplication ainsi que les concepts internes crs de toutes pices dans le cadre de limplmentation dune application. Chaque langage de Programmation Orient Objets donne un moyen spcifique dimplmenter le paradigme objet (pointeurs ou pas, hritage multiple ou pas, etc.), mais le diagramme de classes permet de modliser les classes du systme et leurs relations indpendamment dun langage de programmation particulier. Les principaux lments de cette vue statique sont les classes et leurs relations : association, gnralisation et plusieurs types de dpendances, telles que la ralisation et lutilisation. Une partition dun ensemble est un ensemble de parties non vides de cet ensemble, deux deux disjointes et dont la runion est gale lensemble.
la Ferrari Enzo qui se trouve dans votre garage est une instance du concept abstrait Automobile ; lamiti qui lie Jean et Marie est une instance du concept abstrait Amiti ;
Une classe est un concept abstrait reprsentant des lments varis comme :
y y y y y
des lments concrets (ex : des avions), des lments abstraits ( ex : des commandes de marchandises ou services), des composants dune application (ex : les boutons des botes de dialogue), des structures informatiques (ex : des tables de hachage), des lments comportementaux (ex : des tches), etc.
Tout systme orient objet est organis autour des classes. Une classe est la description formelle dun ensemble dobjets ayant une smantique et des caractristiques communes. Un objet est une instance dune classe. Cest une entit discrte dote dune identit, dun tat et dun comportement que lon peut invoquer. Les objets sont des lments individuels dun systme en cours dexcution. Par exemple, si lon considre que Homme (au sens tre humain) est un concept abstrait, on peut dire que la personne Marie-Ccile est une instance de Homme. Si Homme tait une classe, Marie-Ccile en serait une instance : un objet.
Une classe dfinit un jeu dobjets dots de caractristiques communes. Les caractristiques dun objet permettent de spcifier son tat et son comportement. Dans les sections 1.3.2 et 1.3.4, nous avons dit que les caractristiques dun objet taient soit des attributs, soit des oprations. Ce nest pas exact dans un diagramme de classe car les terminaisons dassociations sont des proprits qui peuvent faire partie des caractristiques dun objet au mme titre que les attributs et les oprations (cf. section 3.3.2). tat dun objet : Ce sont les attributs et gnralement les terminaisons dassociations, tous deux runis sous le terme de proprits structurelles, ou tout simplement proprits2, qui dcrivent ltat dun objet. Les attributs sont utiliss pour des valeurs de donnes pures, dpourvues didentit, telles que les nombres et les chanes de caractres. Les associations sont utilises pour connecter les classes du diagramme de classe ; dans ce cas, la terminaison de lassociation (du ct de la classe cible) est gnralement une proprit de la classe de base (cf. section 3.3.1 et 3.3.2). Les proprits dcrites par les attributs prennent des valeurs lorsque la classe est instancie. Linstance dune association est appele un lien. Comportement dun objet : Les oprations dcrivent les lments individuels dun comportement que lon peut invoquer. Ce sont des fonctions qui peuvent prendre des valeurs en entre et modifier les attributs ou produire des rsultats. Une opration est la spcification (i.e. dclaration) dune mthode. Limplmentation (i.e. dfinition) dune mthode est galement appele mthode. Il y a donc une ambigut sur le terme mthode. Les attributs, les terminaisons dassociation et les mthodes constituent donc les caractristiques dune classe (et de ses instances).
Une classe est un classeur 3. Elle est reprsente par un rectangle divis en trois cinq compartiments (figure 3.1). Le premier indique le nom de la classe (cf. section 3.2.5), le deuxime ses attributs (cf. section 3.2.6) et le troisime ses oprations (cf. section 3.2.7). Un compartiment des responsabilits peut tre ajout pour numrer lensemble de tches devant tre assures par la classe mais pour lesquelles on ne dispose pas encore assez dinformations. Un compartiment des exceptions peut galement tre ajout pour numrer les situations exceptionnelles devant tre gres par la classe.
34
Figure 3.2: Bonnes pratiques concernant la manipulation des attributs. Nous avons dj abord cette problmatique section 1.3.4. Lencapsulation est un mcanisme consistant rassembler les donnes et les mthodes au sein dune structure en cachant limplmentation de lobjet, cest-dire en empchant laccs aux donnes par un autre moyen que les services proposs. Ces services accessibles (offerts) aux utilisateurs de lobjet dfinissent ce que lon appel linterface de lobjet (sa vue externe). Lencapsulation permet donc de garantir lintgrit des donnes contenues dans lobjet. Lencapsulation permet de dfinir des niveaux de visibilit des lments dun conteneur. La visibilit dclare la possibilit pour un lment de modlisation de rfrencer un lment qui se trouve dans un espace de noms diffrents de celui de llment qui tablit la rfrence. Elle fait partie de la relation entre un lment et le conteneur qui lhberge, ce dernier pouvant tre un paquetage, une classe ou un autre espace de noms. Il existe quatre visibilits prdfinies. Public ou + : tout lment qui peut voir le conteneur peut galement voir llment indiqu. Protected ou # : seul un lment situ dans le conteneur ou un de ses descendants peut voir llment indiqu. Private ou - : seul un lment situ dans le conteneur peut voir llment. Package ou ou rien : seul un lment dclar dans le mme paquetage peut voir llment. Par ailleur, UML 2.0 donne la possibilit dutiliser nimporte quel langage de programmation pour la spcification de la visibilit. Dans une classe, le marqueur de visibilit se situe au niveau de chacune de ses caractristiques (attributs, terminaisons dassociation et opration). Il permet dindiquer si une autre classe peut y accder. Dans un paquetage, le marqueur de visibilit se situe sur des lments contenus directement dans le paquetage, comme les classes, les paquetages imbriqus, etc. Il indique si un autre paquetage susceptible daccder au premier paquetage peut voir les lments. Dans la pratique, lorsque des attributs doivent tre accessibles de lextrieur, il est prfrable que cet accs ne soit pas direct mais se fasse par lintermdiaire doprations (figure 3.2).
Nous aurons rgulirement recours ce mta-langage pour dcrire des syntaxes de dclaration. Ce mtalangage contient certains mta-caractres :
[ ]:
les signes infrieur et suprieur indiquent que ce qui est lintrieur est plus ou moins libre ; par exemple, la syntaxe de dclaration dune variable comme compteur : int est <nom_variable> : <type> ;
:
les cotes sont utiles quand on veut utiliser un mta-caractre comme un caractre ; par exemple, pour dsigner un crochet ([) il faut crire [ car [ est un mta-caractre ayant une signification spciale ;
... :
Permet de dsigner une suite de squence de longueur non dfinie, le contexte permettant de comprendre de quelle suite il sagit.
Le type de lattribut (<type>) peut tre un nom de classe, un nom dinterface ou un type de donn prdfini. La multiplicit (<multiplicit>) dun attribut prcise le nombre de valeurs que lattribut peut contenir. Lorsquune multiplicit suprieure 1 est prcise, il est possible dajouter une contrainte ({<contrainte>}) pour prciser si les valeurs sont ordonnes ({ordered}) ou pas ({list}). Attributs de classe Par dfaut, chaque instance dune classe possde sa propre copie des attributs de la classe. Les valeurs des attributs peuvent donc diffrer dun objet un autre. Cependant, il est parfois ncessaire de dfinir un attribut de classe (static en Java ou en C++) qui garde une valeur unique et partage par toutes les instances de la classe. Les instances ont accs cet attribut mais nen possdent pas une copie. Un attribut de classe nest donc pas une proprit dune instance mais une proprit de la classe et laccs cet attribut ne ncessite pas lexistence dune instance. Graphiquement, un attribut de classe est soulign. Attributs drivs
36
Les attributs drivs peuvent tre calculs partir dautres attributs et de formules de calcul. Lors de la conception, un attribut driv peut tre utilis comme marqueur jusqu ce que vous puissiez dterminer les rgles lui appliquer. Les attributs drivs sont symboliss par lajout dun / devant leur nom.
La direction peut prendre lune des valeurs suivante : in : Paramtre dentre pass par valeur. Les modifications du paramtre ne sont pas disponibles pour lappelant. Cest le comportement par dfaut. out : Paramtre de sortie uniquement. Il ny a pas de valeur dentre et la valeur finale est disponible pour lappelant. inout : Paramtre dentre/sortie. La valeur finale est disponible pour lappelant. Le type du paramtre (<type>) peut tre un nom de classe, un nom dinterface ou un type de donn prdfini. Les proprits (<proprits>) correspondent des contraintes ou des informations complmentaires comme les exceptions, les prconditions, les postconditions ou encore lindication quune mthode est abstraite (mot-clef abstract), etc. Mthode de classe Comme pour les attributs de classe, il est possible de dclarer des mthodes de classe. Une mthode de classe ne peut manipuler que des attributs de classe et ses propres paramtres. Cette mthode na pas accs aux attributs de la classe (i.e. des instances de la classe). Laccs une mthode de classe ne ncessite pas lexistence dune instance de cette classe. Graphiquement, une mthode de classe est souligne. Mthodes et classes abstraites
37
Une mthode est dite abstraite lorsquon connat son entte mais pas la manire dont elle peut tre ralise (i.e. on connat sa dclaration mais pas sa dfinition). Une classe est dite abstraite lorsquelle dfinit au moins une mthode abstraite ou lorsquune classe parent (cf. section 3.3.9) contient une mthode abstraite non encore ralise. On ne peut instancier une classe abstraite : elle est voue se spcialiser (cf. section 3.3.9). Une classe abstraite peut trs bien contenir des mthodes concrtes. Une classe abstraite pure ne comporte que des mthodes abstraites. En programmation oriente objet, une telle classe est appele une interface. Pour indiquer quune classe est abstraite, il faut ajouter le mot-clef abstract derrire son nom.
38
Figure 3.3: Deux faons de modliser une association. Dans la premire version, lassociation apparat clairement et constitue une entit distincte. Dans la seconde, lassociation se manifeste par la prsence de deux attributs dans chacune des classes en relation. Cest en fait la manire dont une association est gnralement implmente dans un langage objet quelconque (cf. section 3.6.2), mais pas dans tout langage de reprsentation (cf. section 3.6.3). La question de savoir sil faut modliser les associations en tant que tel a longtemps fait dbat. UML a tranch pour la premire version car elle se situe plus un niveau conceptuel (par opposition au niveau dimplmentation) et simplifie grandement la modlisation dassociations complexes (comme les associations plusieurs plusieurs par exemple). Un attribut peut alors tre considr comme une association dgnre dans laquelle une terminaison dassociation4 est dtenue par un classeur (gnralement une classe). Le classeur dtenant cette terminaison dassociation devrait thoriquement se trouver lautre extrmit, non modlise, de lassociation. Un attribut nest donc rien dautre quune terminaison dun cas particulier dassociation (cf. figure 3.9 section 3.3.5). Ainsi, les terminaisons dassociations et les attributs sont deux lments conceptuellement trs proches que lon regroupe sous le terme de proprit.
Figure 3.4: Utilisation dun petit cercle plein pour prciser le propritaire dune terminaison dassociation.
39
Par exemple, le diagramme de la figure 3.4 prcise que la terminaison dassociation sommet (i.e. la proprit sommet) appartient la classe Polygone tandis que la terminaison dassociation polygone (i.e. la proprit polygone) appartient lassociation Dfini par. Une terminaison dassociation est une proprit Une proprit est une caractristique structurelle. Dans le cas dune classe, les proprits sont constitues par les attributs et les ventuelles terminaisons dassociation que possde la classe. Dans le cas dune association, les proprits sont constitues par les terminaisons dassociation que possde lassociation. Attention, une association ne possde pas forcment toutes ses terminaisons dassociation ! Une proprit peut tre paramtre par les lments suivant (on sintresse ici essentiellement aux terminaisons dassociations puisque les attributs ont t largement traits section 3.2) : Nom : Comme un attribut, une terminaison dassociation peut tre nomme. Le nom est situ proximit de la terminaison, mais contrairement un attribut, ce nom est facultatif. Le nom dune terminaison dassociation est appele nom du rle. Une association peut donc possder autant de noms de rle que de terminaisons (deux pour une association binaire et n pour une association n-aire). visibilit : Comme un attribut, une terminaison dassociation possde une visibilit (cf. section 3.2.4). La visibilit est mentionne proximit de la terminaison, et plus prcisment, le cas chant, devant le nom de la terminaison. Multiplicit : Comme un attribut, une terminaison dassociation peut possder une multiplicit. Elle est mentionne proximit de la terminaison. Il nest pas impratif de la prciser, mais, contrairement un attribut dont la multiplicit par dfaut est 1, la multiplicit par dfaut dune terminaison dassociation est non spcifie. Linterprtation de la multiplicit pour une terminaison dassociation est moins vidente que pour un attributs (cf. section 3.3.4). navigabilit : Pour un attribut, la navigabilit est implicite, navigable, et toujours depuis la classe vers lattribut. Pour une terminaison dassociation, la navigabilit peut tre prcise (cf. section 3.3.5).
Figure 3.5: Exemple dassociation binaire. Une association binaire est matrialise par un trait plein entre les classes associes (cf. figure 3.5). Elle peut tre orne dun nom, avec ventuellement une prcision du sens de lecture ( ou ). Quand les deux extrmits de lassociation pointent vers la mme classe, lassociation est dite rflexive. Association n-aire
40
Figure 3.6: Exemple dassociation n-aire. Une association n-aire lie plus de deux classes. La section 3.3.4 dtaille comment interprter les multiplicits dune association n-aire. La ligne pointill dune classe-association (cf. section 3.3.7) peut tre relie au losange par une ligne discontinue pour reprsenter une association n-aire dote dattributs, doprations ou dassociations. On reprsente une association n-aire par un grand losange avec un chemin partant vers chaque classe participante (cf. figure 3.6). Le nom de lassociation, le cas chant, apparat proximit du losange.
Dans une association binaire (cf. figure 3.5), la multiplicit sur la terminaison cible contraint le nombre dobjets de la classe cible pouvant tre associs un seul objet donn de la classe source (la classe de lautre terminaison de lassociation). Dans une association n-aire, la multiplicit apparaissant sur le lien de chaque classe sapplique sur une instance de chacune des classes, lexclusion de la classe-association et de la classe considre. Par exemple, si on prend une association ternaire entre les classes (A, B, C), la multiplicit de la terminaison C indique le nombre dobjets C qui peuvent apparatre dans lassociation (dfinie section 3.3.7) avec une paire particulire dobjets A et B.
Remarque 1 :
Pour une association n-aire, la multiplicit minimale doit en principe, mais pas ncessairement, tre 0. En effet, une multiplicit minimale de 1 (ou plus) sur une extrmit implique quil doit exister un lien (ou plus) pour TOUTES les combinaisons possibles des instances des classes situes aux autres extrmits de lassociation n-aire !
Remarque 2 :
Il faut noter que, pour les habitus du modle entit/relation, les multiplicits sont en UML lenvers (par rfrence Merise) pour les associations binaires et lendroit pour les n-aires avec n>2.
3.3.5 Navigabilit
41
Figure 3.7: Navigabilit. La navigabilit indique sil est possible de traverser une association. On reprsente graphiquement la navigabilit par une flche du ct de la terminaison navigable et on empche la navigabilit par une croix du ct de la terminaison non navigable (cf. figure 3.7). Par dfaut, une association est navigable dans les deux sens. Par exemple, sur la figure 3.7, la terminaison du ct de la classe Commande nest pas navigable : cela signifie que les instances de la classe Produit ne stockent pas de liste dobjets du type Commande. Inversement, la terminaison du ct de la classe Produit est navigable : chaque objet commande contient une liste de produits.
Figure 3.8: Implicitement, ces trois notations ont la mme smantique. Lorsque lon reprsente la navigabilit uniquement sur lune des extrmits dune association, il faut remarquer que, implicitement, les trois associations reprsentes sur la figure 3.8 ont la mme signification : lassociation ne peut tre traverse que dans un sens.
Figure 3.9: Deux modlisations quivalentes. Dans la section 3.3.1, nous avons dit que : Un attribut est une association dgnre dans laquelle une terminaison dassociation est dtenue par un classeur (gnralement une classe). Le classeur dtenant cette terminaison dassociation devrait thoriquement se trouver lautre terminaison, non modlise, de lassociation. Un attribut nest donc rien dautre quune terminaison dun cas particulier dassociation. La figure 3.9 illustre parfaitement cette situation. Attention toutefois, si vous avez une classe Point dans votre diagramme de classe, il est extrmement maladroit de reprsenter des classes (comme la classe
42
Polygone) avec un ou plusieurs attributs de type Point. Il faut, dans ce cas, matrialiser cette proprit de la classe en question par une ou plusieurs associations avec la classe Point.
3.3.6 Qualification
Figure 3.10: En haut, un diagramme reprsentant lassociation entre une banque et ses clients ( gauche), et un diagramme reprsentant lassociation entre un chiquier et les cases qui le composent ( droite). En bas, les diagrammes quivalents utilisant des associations qualifies. Gnralement, une classe peut tre dcompose en sous-classes ou possder plusieurs proprits. Une telle classe rassemble un ensemble dlments (dobjets). Quand une classe est lie une autre classe par une association, il est parfois prfrable de restreindre la porte de lassociation quelques lments cibls (comme un ou plusieurs attributs) de la classe. Ces lments cibls sont appels un qualificatif. Un qualificatif permet donc de slectionner un ou des objets dans le jeu des objets dun objet (appel objet qualifi) reli par une association un autre objet. Lobjet slectionn par la valeur du qualificatif est appel objet cible. Lassociation est appele association qualifie. Un qualificatif agit toujours sur une association dont la multiplicit est plusieurs (avant que lassociation ne soit qualifie) du ct cible. Un objet qualifi et une valeur de qualificatif gnrent un objet cible li unique. En considrant un objet qualifi, chaque valeur de qualificatif dsigne un objet cible unique. Par exemple, le diagramme de gauche de la figure 3.10 nous dit que :
y y
Un compte dans une banque appartient au plus deux personnes. Autrement dit, une instance du couple {Banque , compte} est en association avec zro deux instances de la classe Personne. Mais une personne peut possder plusieurs comptes dans plusieurs banques. Cest--dire quune instance de la classe Personne peut tre associe plusieurs (zro compris) instances du couple {Banque , compte}. Bien entendu, et dans tous les cas, un instance du couple {Personne , compte} est en association avec une instance unique de la classe Banque.
Une instance du triplet {Echiquier, range, colonne} est en association avec une instance unique de la classe Case.
43
Inversement, une instance de la classe Case est en association avec une instance unique du triplet {Echiquier, range, colonne}.
3.3.7 Classe-association
Dfinition et reprsentation
Figure 3.11: Exemple de classe-association. Parfois, une association doit possder des proprits. Par exemple, lassociation Emploie entre une socit et une personne possde comme proprits le salaire et la date dembauche. En effet, ces deux proprits nappartiennent ni la socit, qui peut employer plusieurs personnes, ni aux personnes, qui peuvent avoir plusieurs emplois. Il sagit donc bien de proprits de lassociation Emploie. Les associations ne pouvant possder de proprit, il faut introduire un nouveau concept pour modliser cette situation : celui de classeassociation. Une classe-association possde les caractristiques des associations et des classes : elle se connecte deux ou plusieurs classes et possde galement des attributs et des oprations. Une classe-association est caractrise par un trait discontinu entre la classe et lassociation quelle reprsente (figure 3.11). Classe-association pour plusieurs associations Il nest pas possible de rattacher une classe-association plus dune association puisque la classe-association constitue elle-mme lassociation. Dans le cas o plusieurs classe-associations doivent disposer des mmes caractristiques, elles doivent hriter dune mme classe possdant ces caractristiques, ou lutiliser en tant quattribut. De mme, il nest pas possible de rattacher une instance de la classe dune classe-association plusieurs instances de lassociation de la classe-association. En effet, la reprsentation graphique (association relie par une ligne pointill une classe dporte) est trompeuse : une classe-associaiton est une entit smantique atomique et non composite qui sintancie donc en bloc. Ce problme et nouveau abord et illustr section 3.5.2. Auto-association sur classe-association
44
Figure 3.12: Exemple dauto-association sur classe-association. Imaginons que nous voulions ajouter une association Suprieur de dans le diagramme 3.11 pour prciser quune personne est le suprieur dune autre personne. On ne peut simplement ajouter une association rflexive sur la classe Personne. En effet, une personne nest pas le suprieur dune autre dans labsolu. Une personne est, en tant quemploy dune entreprise donn, le suprieur dune autre personne dans le cadre de son emploi pour une entreprise donn (gnralement, mais pas ncessairement, la mme). Il sagit donc dune association rflexive, non pas sur la classe Personne mais sur la classe-association Emploie (cf. figure 3.12). Liens multiples
Figure 3.13: Exemple de classe-association avec liens multiples. Plusieurs instances dune mme association ne peuvent lier les mmes objets. Cependant, si lon sintresse lexemple de la figure 3.13, on voit bien quil doit pouvoir y avoir plusieurs instances de la classeassociation Actions liant une mme personne une mme socit : une mme personne peut acheter des moments diffrents des actions dune mme socit. Cest justement la raison de la contrainte {bag} qui, place sur les terminaisons dassociation de la classeassociation Actions, indique quil peut y avoir des liens multiples impliquant les mmes paires dobjets. quivalences Parfois, linformation vhicule par une classe-association peut tre vhicule sans perte dune autre manire (cf. figure 3.14 et 3.15).
45
Figure 3.15: Deux modlisations modlisant la mme information. Classe-association, association n-aire ou association qualifie ? Il nest souvent pas simple trancher entre lutilisation dune classe-association, dune association n-aire ou encore dune association qualifie. Lorsque lon utilise lun de ces trois types dassociation, il peut tre utile ou instructif de se demander si lun des deux autres types ne serait pas plus pertinent. Dans tous les cas, il faut garder lesprit quune classe-association est dabord et avant tout une association et que, dans une classe-association, la classe est indissociable de lassociation.
Figure 3.16: Pour couvrir le cas des comptes joints, il faut utiliser le modle de droite. Ainsi, le cas dun compte joint ne peut tre reprsent correctement par le diagramme de gauche dans figure 3.16 : mieux vaut utiliser une association qualifie (diagramme de droite dans la figure 3.16). Ce problme et nouveau abord et illustr section 3.5.2.
Figure 3.17: Si un cours doit pouvoir exister indpendamment dun lien entre un enseignant et un groupe, il faut utiliser le modle de droite.
46
Dans le diagramme de gauche de la figure 3.17, un cours ne peut exister que sil existe un lien entre un objet Enseignant et un objet Groupe. Quand le lien est rompu (effac), le cours lest galement. Si un cours doit pouvoir exister indpendamment de lexistence dun lien (on a pas encore trouv denseignant pour ce cours, le cours nest pas enseign cette anne mais le sera probablement lanne prochaine, ) il faut opter pour une association ternaire (modle de droite dans figure 3.17).
Figure 3.18: Si un mme cours doit concerner plusieurs couples Enseignant/Etudiant, il ne faut pas utiliser une classe-association, mais une association ternaire comme sur le modle de droite. Le cas de figure est encore pire si lon remplace Groupe par Etudiant (cf. modle gauche sur la figure 3.18). En effet, le cas gnral dcrit par ce modle ne correspond pas du tout au diagramme dobjet (cf. section 3.5) situ au centre. Nous reviendrons sur ce problme dans la section 3.5.2 avec lillustration 3.24. Dans cette situation, il faut opter pour une association ternaire comme sur le modle de droite.
Figure 3.19: Exemple de relation dagrgation et de composition. Une association simple entre deux classes reprsente une relation structurelle entre pairs, cest dire entre deux classes de mme niveau conceptuel : aucune des deux nest plus importante que lautre. Lorsque lon souhaite modliser une relation tout/partie o une classe constitue un lment plus grand (tout) compos dlments plus petit (partie), il faut utiliser une agrgation. Une agrgation est une association qui reprsente une relation dinclusion structurelle ou comportementale dun lment dans un ensemble. Graphiquement, on ajoute un losange vide ( ) du ct de lagrgat (cf. figure 3.19). Contrairement une association simple, lagrgation est transitive. La signification de cette forme simple dagrgation est uniquement conceptuelle. Elle ne contraint pas la navigabilit ou les multiplicits de lassociation. Elle nentrane pas non plus de contrainte sur la dure de vie des parties par rapport au tout. Composition La composition, galement appele agrgation composite, dcrit une contenance structurelle entre instances. Ainsi, la destruction de lobjet composite implique la destruction de ses composants. Une instance de la
47
partie appartient toujours au plus une instance de llment composite : la multiplicit du ct composite ne doit pas tre suprieure 1 (i.e. 1 ou 0..1). Graphiquement, on ajoute un losange plein ( ) du ct de lagrgat (cf. figure 3.19). Remarque Les notions dagrgation et surtout de composition posent de nombreux problmes en modlisation et sont souvent le sujet de querelles dexperts et sources de confusions. Ce que dit la norme UML Superstructure version 2.1.1 reflte dailleur trs bien le flou qui entoure ces notions : Precise semantics of shared aggregation varies by application area and modeler. The order and way in which part instances are created is not defined.
Figure 3.20: Partie du rgne animal dcrit avec lhritage multiple. La gnralisation dcrit une relation entre une classe gnrale (classe de base ou classe parent) et une classe spcialise (sous-classe). La classe spcialise est intgralement cohrente avec la classe de base, mais comporte des informations supplmentaires (attributs, oprations, associations). Un objet de la classe spcialise peut tre utilis partout o un objet de la classe de base est autoris. Dans le langage UML, ainsi que dans la plupart des langages objet, cette relation de gnralisation se traduit par le concept dhritage. On parle galement de relation dhritage. Ainsi, lhritage permet la classification des objets (cf. figure 3.20). Le symbole utilis pour la relation dhritage ou de gnralisation est une flche avec un trait plein dont la pointe est un triangle ferm dsignant le cas le plus gnral (cf. figure 3.20). Les proprits principales de lhritage sont :
y y
La classe enfant possde toutes les caractristiques des ses classes parents, mais elle ne peut accder aux caractristiques prives de cette dernire. Une classe enfant peut redfinir (mme signature) une ou plusieurs mthodes de la classe parent. Sauf indication contraire, un objet utilise les oprations les plus spcialises dans la hirarchie des classes. Toutes les associations de la classe parent sappliquent aux classes drives.
48
Une instance dune classe peut tre utilise partout o une instance de sa classe parent est attendue. Par exemple, en se basant sur le diagramme de la figure 3.20, toute opration acceptant un objet dune classe Animal doit accepter un objet de la classe Chat. Une classe peut avoir plusieurs parents, on parle alors dhritage multiple (cf. la classe Ornithorynque de la figure 3.20). Le langage C++ est un des langages objet permettant son implmentation effective, le langage Java ne le permet pas.
En UML, la relation dhritage nest pas propre aux classes. Elle sapplique dautres lments du langage comme les paquetages, les acteurs (cf. section 2.3.3) ou les cas dutilisation (cf. section 2.3.2).
3.3.10 Dpendance
Figure 3.21: Exemple de relation de dpendance. Une dpendance est une relation unidirectionnelle exprimant une dpendance smantique entre des lments du modle. Elle est reprsente par un trait discontinu orient (cf. figure 3.21). Elle indique que la modification de la cible peut impliquer une modification de la source. La dpendance est souvent strotype pour mieux expliciter le lien smantique entre les lments du modle (cf. figure 3.21 ou 3.25). On utilise souvent une dpendance quand une classe en utilise une autre comme argument dans la signature dune opration. Par exemple, le diagramme de la figure 3.21 montre que la classe Confrontation utilise la classe Stratgie car la classe Confrontation possde une mthode confronter dont deux paramtre sont du type Stratgie. Si la classe Stratgie, notamment son interface, change, alors des modifications devront galement tre apportes la classe Confrontation. Une terminaison dassociations est une extrmit de lassociation. Une association binaire en possde deux, une association n-aire en possde n.
3.4 Interfaces
49
Figure 3.22: Exemple de diagramme mettant en uvre une interface Nous avons dj abord la notion dinterface dans les sections 1.3.4 et 3.2.4. En effet, les classes permettent de dfinir en mme temps un objet et son interface. Le classeur, que nous dcrivons dans cette section, ne permet de dfinir que des lments dinterface. Il peut sagir de linterface complte dun objet, ou simplement dune partie dinterface qui sera commune plusieurs objets. Le rle de ce classeur, strotyp << interface >>, est de regrouper un ensemble de proprits et doprations assurant un service cohrent. Lobjectif est de diminuer le couplage entre deux classeurs. La notion dinterface en UML est trs proche de la notion dinterface en Java. Une interface est reprsente comme une classe except labsence du mot-clef abstract (car linterface et toutes ses mthodes sont, par dfinition, abstraites) et lajout du strotype << interface >> (cf. figure 3.22). Une interface doit tre ralise par au moins une classe et peut ltre par plusieurs. Graphiquement, cela est reprsent par un trait discontinu termin par une flche triangulaire et le strotype realize . Une classe peut trs bien raliser plusieurs interfaces. Une classe (classe cliente de linterface) peut dpendre dune interface (interface requise). On reprsente cela par une relation de dpendance et le strotype use . Attention aux problmes de conflits si une classe dpend dune interface ralise par plusieurs autres classes. La notion dinterface est assez proche de la notion de classe abstraite avec une capacit de dcouplage plus grand. En C++ (le C++ ne connat pas la notion dinterface), la notion dinterface est gnralement implmente par une classe abstraite.
illustrer le modle de classes en montrant un exemple qui explique le modle ; prciser certains aspects du systme en mettant en vidence des dtails imperceptibles dans le diagramme de classes ; exprimer une exception en modlisant des cas particuliers ou des connaissances non gnralisables qui ne sont pas modliss dans un diagramme de classe ; prendre une image (snapshot) dun systme un moment donn.
Le diagramme de classes modlise les rgles et le diagramme dobjets modlise des faits. Par exemple, le diagramme de classes de la figure 3.23 montre quune entreprise emploie au moins deux personnes et quune personne travaille dans au plus deux entreprises. Le diagramme dobjets modlise lui une entreprise particulire (PERTNE) qui emploie trois personnes. Un diagramme dobjets ne montre pas lvolution du systme dans le temps. Pour reprsenter une interaction, il faut utiliser un diagramme de communication (cf. section 7.2) ou de squence (cf. section 7.3).
50
3.5.2 Reprsentation
Figure 3.23: Exemple de diagramme de classes et de diagramme dobjets associ. Graphiquement, un objet se reprsente comme une classe. Cependant, le compartiment des oprations nest pas utile. De plus, le nom de la classe dont lobjet est une instance est prcd dun << : >> et est soulign. Pour diffrencier les objets dune mme classe, leur identifiant peut tre ajout devant le nom de la classe. Enfin les attributs reoivent des valeurs. Quand certaines valeurs dattribut dun objet ne sont pas renseignes, on dit que lobjet est partiellement dfini. Dans un diagramme dobjets, les relations du diagramme de classes deviennent des liens. La relation de gnralisation ne possde pas dinstance, elle nest donc jamais reprsente dans un diagramme dobjets. Graphiquement, un lien se reprsente comme une relation, mais, sil y a un nom, il est soulign. Naturellement, on ne reprsente pas les multiplicits.
Figure 3.24: Le diagramme dobjets de droite, illustrant le cas de figure dun compte joint, nest pas une instance normale du diagramme de classe de gauche mais peut prciser une situation exceptionnelle. La norme UML 2.1.1 prcise quune instance de classe-association ne peut tre associe qu une instance de chacune des classes associes5 ce qui interdit dinstancier le diagramme de classe gauche dans la figure 3.24 par le diagramme dobjet droite dans cette mme figure. Cependant, un diagramme dobjet peut tre utilis pour exprimer une exception. Sur la figure 3.24, le diagramme dobjets droite peut tre lgitime sil vient prciser une situation exceptionnelle non prise en compte par le diagramme de classe reprsent gauche. Nanmoins, le cas des comptes joints ntant pas si exceptionnel, mieux vaut revoir la modlisation comme prconis par la figure 3.16.
Figure 3.25: Dpendance dinstanciation entre les classeurs et leurs instances. La relation de dpendance dinstanciation (strotype << instanceof >>) dcrit la relation entre un classeur et ses instances. Elle relie, en particulier, les liens aux associations et les objets aux classes. 5 UML Superstructure Specification, v2.1.1 ; p.49 : << It should be noted that in an instance of an association class, there is only one instance of the associated classifiers at each end, i.e., from the instance point of view, the multiplicity of the associations ends are 1 >>
ci constate que lobjet nest plus rfrenc. Pour des raisons de simplification, nous ne ferons plus figurer ces oprations dans les sections suivantes.
public class A { public A() { ... } protected void finalize() throws Throwable { super.finalize(); ... } }
public class A { public String a1; package String a2; protected String a3; private String a4; public void op1() { ... } public void op2() { ... } }
Classe abstraite
Interface
53
Hritage simple
public class A { private B rb; public void addB( B b ) { if( b != null ){ if ( b.getA() != null ) { // si b est dj connect un autre A b.getA().setB(null); // cet autre A doit se dconnecter } this.setB( b ); b.setA( this ); } } public B getB() { return( rb ); } public void setB( B b ) { this.rb=b; } } public class B {
54
private A ra; public void addA( A a ) { if( a != null ) { if (a.getB() != null) { // si a est dj connect un autre B a.getB().setA( null ); // cet autre B doit se dconnecter } this.setA( a ); a.setB( this ); } } public void setA(A a){ this.ra=a; } public A getA(){ return(ra); } }
public class A { private B rb; public void addB( B b ) { if( b != null ) { this.rb=b; } } } public class B { ... // La classe B ne connat pas l'existence de la classe A }
public class A { private ArrayList <B> rb; public A() { rb = new ArrayList<B>(); } public ArrayList <B> getArray() {return(rb);} public void remove(B b){rb.remove(b);} public void addB(B b){ if( !rb.contains(b) ){ if (b.getA()!=null) b.getA().remove(b); b.setA(this); rb.add(b); } } } public class B { private A ra; public B() {} public A getA() { return (ra); } public void setA(A a){ this.ra=a; } public void addA(A a){ if( a != null ) { if( !a.getArray().contains(this)) { if (ra != null) ra.remove(this); this.setA(a); ra.getArray().add(this);
55
} } } }
public class A { private ArrayList <B> rb; public A() { rb = new ArrayList<B>(); } public void addB(B b){ if( !rb.contains( b ) ) { rb.add(b); } } } public class B { ... // B ne connat pas l'existence de A }
Association 1 vers N
Dans ce cas, il faut utiliser un tableau plutt quun vecteur. La dimension du tableau tant donnes par la cardinalit de la terminaison dassociation. Agrgations
lexpressivit dun diagramme de classes est bien plus grande que celle dun schma relationnel. Par exemple, comment reprsenter dans un schma relationnel des notions comme la navigabilit ou la composition ? Toutefois, de nombreux AGL (Atelier de Gnie Logiciel) comportent maintenant des fonctionnalits de traduction en SQL qui peuvent aider le dveloppeur dans cette tche. Dans la section 9.3.1, nous prsentons un type de diagramme de classes, appel modle du domaine, tout fait adapt une implmentation sous forme de base de donnes. Classe avec attributs Chaque classe devient une relation. Les attributs de la classe deviennent des attributs de la relation. Si la classe possde un identifiant, il devient la cl primaire de la relation, sinon, il faut ajouter une cl primaire arbitraire.
create table relation_A ( num_relation_A integer primary key, att1 text, att2 integer);
Association 1 vers 1 Pour reprsenter une association 1 vers 1 entre deux relation, la cl primaire de lune des relations doit figurer comme cl trangre dans lautre relation.
create table relation_A ( id_A integer primary key, attA1 text, attA2 integer); create table relation_B ( id_B integer primary key, num_A integer references relation_A, attB1 text, attB2 integer);
Association 1 vers plusieurs Pour reprsenter une association 1 vers plusieurs, on procde comme pour une association 1 vers 1, except que cest forcment la relation du ct plusieurs qui reoit comme cl trangre la cl primaire de la relation du ct 1.
57
create table relation_A ( id_A integer primary key, num_B integer references relation_B, attA1 text, attA2 integer); create table relation_B ( id_B integer primary key, attB1 text, attB2 integer);
Association plusieurs vers plusieurs Pour reprsenter une association du type plusieurs vers plusieurs, il faut introduire une nouvelle relation dont les attributs sont les cls primaires des relations en association et dont la cl primaire est la concatnation de ces deux attributs.
create table relation_A ( id_A integer primary key, attA1 text, attA2 integer); create table relation_B ( id_B integer primary key, attB1 text, attB2 integer); create table relation_A_B ( num_A integer references relation_A, num_B integer references relation_B, primary key (num_A, num_B));
Classe-association plusieurs vers plusieurs Le cas est proche de celui dune association plusieurs vers plusieurs, les attributs de la classe-association tant ajouts la troisime relation qui reprsente, cette fois ci, la classe-association elle-mme.
58
create table relation_A ( id_A integer primary key, attA1 text, attA2 integer); create table relation_B ( id_B integer primary key, attB1 text, attB2 integer); create table relation_C ( num_A integer references relation_A, num_B integer references relation_B, attC1 text, attC2 integer, primary key (num_A, num_B));
Hritage Les relations correspondant aux sous-classes ont comme cl trangre et primaire la cl de la relation correspondant la classe parente. Un attribut type est ajout dans la relation correspondant la classe parente. Cet attribut permet de savoir si les informations dun tuple de la relation correspondant la classe parente peuvent tre compltes par un tuple de lune des relations correspondant une sous-classe, et, le cas chant, de quelle relation il sagit. Ainsi, dans cette solution, un objet peut avoir ses attributs rpartis dans plusieurs relations. Il faut donc oprer des jointures pour reconstituer un objet. Lattribut type de la relation correspondant la classe parente doit indiquer quelles jointures faire.
create table relation_C ( id_C integer primary key, attC1 text, attC2 integer, type text); create table relation_A (
59
id_A references relation_C, attA1 text, attA2 integer, primary key (id_A)); create table relation_B ( id_B references relation_C, attB1 text, attB2 integer, primary key (id_B));
Une alternative cette reprsentation est de ne crer quune seule table par arborescence dhritage. Cette table doit contenir tous les attributs de toutes les classes de larborescence plus lattribut type dont nous avons parl ci-dessus. Linconvnient de cette solution est quelle implique que les tuples contiennent de nombreuses valeurs nulles.
create table relation_ABC ( id_C integer primary key, attC1 text, attC2 integer, attA1 text, attA2 integer, attB1 text, attB2 integer, type text);
On reprsente une contrainte sous la forme dune chane de texte place entre accolades ({}). La chane constitue le corps crit dans un langage de contrainte qui peut tre :
y y y
naturel ; ddi, comme OCL ; ou encore directement issu dun langage de programmation.
Si une contrainte possde un nom, on prsente celui-ci sous forme dune chane suivie dun double point (:), le tout prcdant le texte de la contrainte.
Figure 4.1: UML permet dassocier une contrainte un lment de modle de plusieurs faons. Sur les deux diagrammes du haut, la contrainte porte sur un attribut qui doit tre positif. En bas gauche, la contrainte {frozen} prcise que le nombre de roues dun vhicule ne peut pas varier. Au milieu, la contrainte {subset} prcise que le prsident est galement un membre du comit. Enfin, en bas droite, la contrainte {xor} (ou exclusif) prcise que les employs de lhtel nont pas le droit de prendre une chambre dans ce mme htel.
Figure 4.2: Ce diagramme exprime que : une personne est ne dans un pays, et que cette association ne peut tre modifie ; une personne a visit un certain nombre de pays, dans un ordre donn, et que le nombre de pays visits ne peut que crotre ; une personne aimerait encore visiter tout une liste de pays, et que cette liste est ordonne (probablement par ordre de prfrence). UML permet dassocier une contrainte un, ou plusieurs, lment(s) de modle de diffrentes faons (cf. figure 4.1) :
y y
en plaant directement la contrainte ct dune proprit ou dune opration dans un classeur ; en ajoutant une note associe llment contraindre ;
61
y y
y y
en plaant la contrainte proximit de llment contraindre, comme une extrmit dassociation par exemple ; en plaant la contrainte sur une flche en pointills joignant les deux lments de modle contraindre ensemble, la direction de la flche constituant une information pertinente au sein de la contrainte ; en plaant la contrainte sur un trait en pointills joignant les deux lments de modle contraindre ensemble dans le cas o la contrainte est bijective ; en utilisant une note relie, par des traits en pointills, chacun des lments de modle, subissant la contrainte commune, quand cette contrainte sapplique sur plus de deux lments de modle.
Nous venons de voir, au travers des exemples de la figure 4.1, quelques contraintes prdfinies ({frozen}, {subset} et {xor}). Le diagramme de la figure 4.2 en introduit deux nouvelles : {ordered} et {addOnly}. La liste est encore longue, mais le pouvoir expressif de ces contraintes reste insuffisant comme nous le verrons dans la section 4.2.2. Le langage de contraintes objet OCL apporte une solution lgante cette insuffisance.
y y y
des invariants sur des classes ; des prconditions et des postconditions lexcution doprations : o les prconditions doivent tre vrifies avant lexcution, o les postconditions doivent tre vrifies aprs lexcution ; des gardes sur des transitions de diagrammes dtats-transitions ou des messages de diagrammes dinteraction ; des ensembles dobjets destinataires pour un envoi de message ; des attributs drivs, etc.
Pourquoi OCL ? Nous avons dit que les contraintes pouvaient tre crites en langage naturel, alors pourquoi sembarrasser du langage OCL ? Lintrt du langage naturel est quil est simple mettre en uvre et comprhensible par tous. Par contre (et comme toujours), il est ambigu et imprcis, il rend difficile lexpression des contraintes complexes et ne facilite pas les rfrences dautres lments (autres que celui sur lequel porte la contrainte) du modle.
62
OCL est un langage formel volontairement simple daccs. Il possde une grammaire lmentaire (OCL peut tre interprt par des outils) que nous dcrirons dans les sections 4.3 4.6. OCL reprsente, en fait, un juste milieu entre le langage naturel et un langage trs technique (langage mathmatique, informatique, ). Il permet ainsi de limiter les ambiguts, tout en restant accessible.
un compte doit avoir un solde toujours positif ; un client peut possder plusieurs comptes ; une personne peut tre cliente de plusieurs banques ; un client dune banque possde au moins un compte dans cette banque ; un compte appartient forcment un client ; une banque gre plusieurs comptes ; une banque possde plusieurs clients.
Diagramme de classes
Figure 4.3: Diagramme de classes modlisant une banque, ses clients et leurs comptes. La figure 4.3 montre un diagramme de classes correspondant la problmatique que nous venons de dcrire.
63
Figure 4.4: Ajout dune contrainte sur le diagramme de la figure 4.3. Un premier problme apparat immdiatement : rien ne spcifie, dans ce diagramme, que le solde du client doit toujours tre positif. Pour rsoudre le problme, on peut simplement ajouter une note prcisant cette contrainte ({solde > 0}), comme le montre la figure 4.4.
Figure 4.5: Diagramme dobjets cohrent avec le diagramme de classes de la figure 4.4.
Figure 4.6: Diagramme dobjets cohrent avec le diagramme de classes de la figure 4.4, mais reprsentant une situation inacceptable. Cependant, dautres problmes subsistent. La figure 4.5 montre un diagramme dobjets valide vis--vis du diagramme de classes de la figure 4.4 et galement valide vis--vis de la spcification du problme. Par contre, la figure 4.6 montre un diagramme dobjets valide vis--vis du diagramme de classes de la figure 4.4 mais ne respectant pas la spcification du problme. En effet, ce diagramme dobjets montre une personne (P1) ayant un compte dans une banque sans en tre client. Ce diagramme montre galement un client (P2) dune banque ny possdant pas de compte.
64
Context Compte inv : solde > 0 context Compte :: dbiter(somme : int) pre : somme > 0 post : solde = solde@pre somme context Compte inv : banque.clients -> includes (propritaire) Figure 4.7: Exemple dutilisation du langage de contrainte OCL sur lexemple bancaire. Le langage OCL est particulirement adapt la spcification de ce type de contrainte. La figure 4.7 montre le diagramme de classes de notre application bancaire accompagn des contraintes OCL adaptes la spcification du problme.
Remarque :
faites bien attention au fait quune expression OCL dcrit une contrainte respecter et ne dcrit absolument pas limplmentation dune mthode.
65
Figure 4.8: Diagramme de classes modlisant une entreprise et des personnes. Le diagramme de la figure 4.8 modlise des personnes, leurs liens de parent (enfant/parent et mari/femme) et le poste ventuel de ces personnes dans une socit. Ce diagramme nous servira de support aux diffrents exemples de contraintes que nous donnerons, titre dillustration, dans les sections qui suivent (4.3 4.7).
Figure 4.9: Dfinition dune numration en utilisant un classeur. Ce diagramme introduit un nouveau type de classeur, strotyp enumeration, permettant de dfinir une numration. Une numration est un type de donn UML, possdant un nom, et utilis pour numrer un ensemble de littraux correspondant toutes les valeurs possibles que peut prendre une expression de ce type. Un type numr est dfini par un classeur possdant le strotype enumeration comme reprsent sur la figure 4.9.
En crivant la contrainte entre accolades ({}) dans une note (comme nous lavons fait sur la figure 4.4). Llment point par la note est alors le contexte de la contrainte. En utilisant le mot-clef context dans un document accompagnant le diagramme (comme nous lavons fait sur la figure 4.7).
66
Syntaxe
context <lment>
peut tre une classe, une opration, etc. Pour faire rfrence un lment op (comme un opration) dun classeur C (comme une classe), ou dun paquetage, , il faut utiliser les :: comme sparateur (comme C::op).
<lment>
Exemple Le contexte est la classe Compte: context Compte Le contexte est lopration getSolde() de la classe Compte: context Compte:: getSolde()
Exemple Le solde dun compte doit toujours tre positif. context Compte inv : solde > 0 Les femmes (au sens de lassociation) des personnes doivent tre des femmes (au sens du genre). context Personne inv : femme->forAll(genre=Genre::femme) self est dcrit section 4.5.1 et forAll() section 4.6.3.
y y
lattribut result qui dsigne la valeur retourne par lopration, et <nom_attribut>@pre qui dsigne la valeur de lattribut <nom_attribut> avant lappel de lopration.
Syntaxe
y y y y
Pr condition :
pre : <expression_logique>
Postcondition :
post : <expression_logique>
<expression_logique>
Exemple Concernant la mthode dbiter de la classe Compte, la somme dbiter doit tre positive pour que lappel de lopration soit valide et, aprs lexcution de lopration, lattribut solde doit avoir pour valeur la diffrence de sa valeur avant lappel et de la somme passe en paramtre. context Compte:: dbiter(somme : Real) pre : somme > 0 post : solde = solde@pre - somme Le rsultat de lappel de lopration getSolde doit tre gal lattribut solde. context Compte::getSolde() : Real post : result = solde
Attention :
Mme si cela peut sembler tre le cas dans ces exemples, nous navons pas dcrit comment lopration est ralise, mais seulement les contraintes sur ltat avant et aprs son excution.
est une expression qui retourne un rsultat dont le type doit tre compatible avec le type du rsultat de lopration dsigne par le contexte. Exemple
Voici une autre solution au deuxime exemple de la section 4.3.4 : le rsultat de lappel de lopration getSolde doit tre gal lattribut solde. context Compte::getSolde() : Real
68
body : solde
Un nouvel attribut dclar dans <dclaration> aura la valeur retourne par lexpression <requte> dans toute lexpression <expression>. Reportez-vous la section 4.7 pour un exemple dutilisation. Syntaxe de def
def : <dclaration> = <requte>
peut correspondre la dclaration dun attribut ou dune mthode. <requte> est une expression qui retourne un rsultat dont le type doit tre compatible avec le type de lattribut, ou de la mthode, dclar dans <dclaration>. Dans le cas o il sagit dune mthode, <requte> peut utiliser les paramtres spcifis dans la dclaration de la mthode.
<dclaration>
Exemple Pour imposer quune personne majeure doit avoir de largent, on peut crire indiffremment :
y y y y y
context Personne inv : let argent=compte.solde->sum() in age>=18 implies argent>0 context Personne def : argent : int = compte.solde->sum() context Personne inv : age>=18 implies argent>0
Notez bien la diffrence entre ces deux types de contraintes. La contrainte derive impose une contrainte perptuelle : llment driv doit toujours avoir la valeur impos par lexpression de la contrainte derive. Dun autre ct, la contrainte init ne sapplique quau moment de la cration dune instance prcise par le contexte de la contrainte. Ensuite, la valeur de llment peut fluctuer indpendamment de la contrainte init. Syntaxe
init : <requte> derive : <requte>
Exemple Quand on cre une personne, la valeur initiale de lattribut mari est faux et la personne ne possde pas demployeur : context Personne::mari : Boolean init : false context Personne::employeur : Set(Socit) init : Set{} Les collections (dont Set est une instance) sont dcrites section 4.4.4. Set{} correspond un ensemble vide. Lge dune personne est la diffrence entre la date courante et la date de naissance de la personne : context Personne::age : Integer derive : date_de_naissance - Date::current() On suppose ici que le type Date possde une mthode de classe permettant de connatre la date courante et que lopration moins (-) entre deux dates est bien dfinie et retourne un nombre dannes.
Cet oprateur sinterprte de la faon suivante : si <expression_logique_0> est vrai, alors la valeur de vrit de lexpression est celle de <expression_logique_1>, sinon, cest celle de <expression_logique_2>.
70
Type Exemples de valeurs Oprateurs Boolean true ; false and ; or ; xor ; not ; implies ; if-then-else-endif ; Integer 1 ; 5 ; 2 ; 34 ; 26524 ; * ; + ; ; / ; abs() ; Real 1,5 ; 3,14 ; * ; + ; ; / ; abs() ; floor() ; String "To be or not to be " concat() ; size() ; substring() ; Tableau 4.1: Types et oprateurs prdfinis dans les contraintes OCL. E1 E2 P1 and P2 P1 or P2 P1 xor P2 P1 implies P2 vrai vrai vrai vrai faux vrai vrai faux faux vrai vrai faux faux vrai faux vrai vrai vrai faux faux faux faux faux vrai Tableau 4.2: Interprtation des quatre connecteurs, E1 et E2 sont deux expressions logiques. expression not expression vrai faux faux vrai Tableau 4.3: Convention dinterprtation de la ngation.
Par exemple, la classe Personne possde un attribut genre de type Genre. On peut donc crire la contrainte : context inv : genre = Genre::femme Dans ce cas, toutes les personnes doivent tre des femmes. Personne
4.4.4 Collections
71
OCL dfinit galement la notion densemble sous le terme gnrique de collection (collection en anglais). Il existe plusieurs sous-types du type abstrait Collection : Ensemble (Set) : collection non ordonne dlments uniques (i.e. pas dlment en double). Ensemble ordonn (OrderedSet) : collection ordonne dlments uniques. Sac (Bag) : collection non ordonne dlments identifiables (i.e. comme un ensemble, mais pouvant comporter des doublons). Squence (Sequence) : collection ordonne dlments identifiables. Jusqu UML 2.0 exclu, les collections taient toujours plates : une collection ne pouvait pas possder des collections comme lments. Cette restriction nexiste plus partir dUML 2.0.
4.5 Accs aux caractristiques et aux objets dans les contraintes OCL
Dans une contrainte OCL associe un objet, il est possible daccder aux caractristiques (attributs, oprations et terminaison dassociation) de cet objet, et donc, daccder de manire transitive tous les objets (et leurs caractristiques) avec qui il est en relation.
Dans lexemple prcdent, le rsultat de lexpression self.dbiter(1000) est un singleton du type Real. Mais une opration peut comporter des paramtres dfinis en sortie ou en entre/sortie. Dans ce cas, le rsultat sera un tuple contenant tous les paramtres dfinis en sortie ou en entre/sortie. Par exemple, imaginons une opration dont la dclaration serait operation(out param_out : Integer):Real possdant un paramtre dfini en sortie param_out. Dans ce cas, le rsultat de lexpression operation(paramtre) est un tuple de la forme (param_out : Integer, result : Real). On peut accder aux valeurs de ce tuple de la faon suivante :
72
y y
operation(paramtre).param_out operation(paramtre).result
);
* ou 0..n, , le type du rsultat est Set(X) (ex : ); * ou 0..n, , et sil y a en plus une contrainte {ordered}, le type du rsultat est OrderedSet(X) (ex : ).
Emprunter une seule proprit structurelle peut produire un rsultat du type Set (ou OrderedSet). Emprunter plusieurs proprits structurelles peut produire un rsultat du type Bag (ou Sequence). Par exemple, dans le contexte de la classe Socit (context Socit) :
y y y y directeur dsigne le directeur de la socit (rsultat de type Personne) ; employ dsigne lensemble des employs de la socit (rsultat de type Set(Personne)) ; employ.compte dsigne lensemble des comptes de tous les employs de la socit (rsultat
de type
Bag(Compte)) ;
employ.date_de_naissance dsigne
Figure 4.10: Diagramme illustrant une association qualifie entre une classe Banque et une classe Personne.
73
Une association qualifie (cf. section3.3.6) utilise un ou plusieurs qualificatifs pour slectionner des instances de la classe cible de lassociation. Pour emprunter une telle association, il est possible de spcifier les valeurs, ou les instances, des qualificatifs en utilisant des crochets ([]). Plaons-nous dans le cadre du diagramme de la figure 4.10. Dans le contexte de banque (context Banque), pour faire rfrence au nom des clients dont le compte porte le numro 19503800 il faut crire : self.client[19503800].nom Dans le cas o il y a plusieurs qualificatifs, il faut sparer chacune des valeurs par une virgule en respectant lordre des qualificatifs du diagramme UML. Il nest pas possible de ne prciser la valeur que de certains qualificatifs en en laissant dautres non dfinis. Par contre, il est possible de ne prciser aucune valeur de qualificatif : self.client.nom Dans ce cas, le rsultat sera lensemble des noms de tous les clients de la banque. Ainsi, si on ne prcise pas la valeur des qualificatifs en empruntant une association qualifie, tout se passe comme si lassociation ntait pas qualifie. Dans ce cas, faites attention la cardinalit de la cible qui change quand lassociation nest plus qualifie (cf. section3.3.6).
Par dfinition mme dune classe association, naviguer depuis une classe association vers une classe participante produit toujours comme rsultat un objet unique. Par exemple, lexpression self.employ.age de lexemple prcdant produit bien un singleton.
Quand une caractristique dfinie dans une classe parente est redfinie dans une sous-classe associe, la caractristique de la classe parente reste accessible dans la sous-classe en utilisant lexpression oclAsType(). Supposons une classe B hritant dune classe A et une proprit p1 dfinie dans les deux classes. Dans le contexte de la classe B (context B), pour accder la proprit p1 de B, on crit simplement : self.p1 et pour accder la proprit p1 de A (toujours dans le contexte de B), il faut crire : self.oclAsType(A).p1
oclIsTypeOf (t : OclType) : Boolean oclIsKindOf (t : OclType) : Boolean oclInState (s : OclState) : Boolean oclIsNew () : Boolean oclAsType (t : OclType) : instance of OclType
Opration oclIsTypeOf oclIsTypeOf retourne vrai si le type de lobjet au titre duquel cette opration est invoqu est exactement le mme que le type t pass en paramtre. Par exemple, dans le contexte de Socit, lexpression directeur.oclIsTypeOf(Personne) est vraie tandis que lexpression self.oclIsTypeOf(Personne) est fausse. Opration oclIsKindOf oclIsKindOf permet de dterminer si le type t pass en paramtre correspond exactement au type ou un type parent du type de lobjet au titre duquel cette opration est invoqu. Par exemple, supposons une classe B hritant dune classe A :
y y y
dans le contexte de B, lexpression self.oclIsKindOf(B) est vraie ; toujours dans le contexte de B, lexpression self.oclIsKindOf(A) est vraie ; mais dans le contexte de A, lexpression self.oclIsKindOf(B) est fausse.
Opration oclIsNew Lopration oclIsNew doit tre utilise dans une postcondition. Elle est vraie quand lobjet au titre duquel elle est invoqu est cr pendant lopration (i.e. lobjet nexistait pas au moment des prconditions). Opration oclInState Cette opration est utilise dans un diagramme dtats-transitions (cf. section 5). Elle est vraie si lobjet dcrit par le diagramme dtats-transitions est dans ltat s pass en paramtre. Les valeurs possibles du
75
paramtre s sont les noms des tats du diagramme dtats-transitions. On peut faire rfrence un tat imbriqu en utilisant des :: (par exemple, pour faire rfrence un tat B imbriqu dans un tat A, on crit : A::B).
76
Nous ne dcrirons pas toutes les oprations sur les collections et ses sous-types (ensemble, ) dans cette section. Rfrez vous la documentation officielle [19] pour plus dexhaustivit. Oprations de base sur les collections Nous dcrivons ici quelques oprations de base sur les collections que propose le langage OCL. size():Integer retourne le nombre dlments (la cardinalit) de self. includes(objet:T):Boolean vrai si self contient lobjet objet. excludes(objet:T):Boolean vrai si self ne contient pas lobjet objet. count(objet:T):Integer retourne le nombre doccurrences de objet dans self. includesAll(c:Collection(T)):Boolean vrai si self contient tous les lments de la collection c. excludesAll(c:Collection(T)):Boolean vrai si self ne contient aucun lment de la collection c. isEmpty() vrai si self est vide. notEmpty() vrai si self nest pas vide. sum():T retourne la somme des lments de self. Les lments de self doivent supporter loprateur somme (+) et le type du rsultat dpend du type des lments. product(c2:Collection(T2)):Set(Tuple(first:T,second:T2)) le rsultat est la collection de Tuple correspondant au produit cartsien de self (de type Collection(T)) par c2. Oprations de base sur les ensembles (Set) Nous dcrivons ici quelques oprations de base sur les ensembles (type Set) que propose le langage OCL. union(set:Set(T)):Set(T) retourne lunion de self et set. union(bag:Bag(T)):Bag(T) retourne lunion de self et bag. =(set:Set(T)):Boolean vrai si self et set contiennent les mmes lments. intersection(set:Set(T)):Set(T) intersection entre self et set. intersection(bag:Bag(T)):Set(T) intersection entre self et bag. 1 including(objet:T):Set(T) Le rsultat contient tous les lments de self plus lobjet objet. excluding(objet:T):Set(T) Le rsultat contient tous les lments de self sans lobjet objet. -(set:Set(T)):Set(T) Le rsultat contient tous les lments de self sans ceux de set. asOrderedSet():OrderedSet(T)
77
permet de convertir self du type Set(T) en OrderedSet(T). asSequence():Sequence(T) permet de convertir self du type Set(T) en Sequence(T). asBag():Bag(T) permet de convertir self du type Set(T) en Bag(T).
Remarque :
les sacs (type Bag) disposent doprations analogues. Exemples 1. Une socit a au moins un employ : context Socit inv : self.employ->notEmpty() 2. Une socit possde exactement un directeur : context Socit inv : self.directeur->size()=1 3. Le directeur est galement un employ : context Socit inv : self.employ->includes(self.directeur)
Dans tous les cas, lexpression <expression> est value pour chacun des lments de la collection <collection>. Lexpression <expression> porte sur les caractristiques des lments en les citant directement par leur nom. Le rsultat dpend de lopration <opration>. Parfois, dans lexpression <expression>, il est prfrable de faire rfrence aux caractristiques de llment courant en utilisant la notation pointe : <lment>.<proprit>. Pour cela, on doit utiliser la syntaxe suivante :
<collection> -> <opration>( <lment> | <expression> )
<lment> joue alors un rle ditrateur et sert de rfrence llment courant dans lexpression <expression>. Il est galement possible, afin dtre plus explicite, de prciser le type de cet lment :
<collection> -> <opration>( <lment> : <Type> | <expression> )
La syntaxe gnrale dune opration portant sur les lments dune collection est donc la suivante :
<collection> -> <opration>( [ <lment> [ : <Type> ] | ] <expression> )
78
Opration select et reject Ces deux oprations permettent de gnrer une sous-collection en filtrant les lments de la collection self. Leur syntaxe est la suivante :
select( [ <lment> [ : <Type> ] | ] <expression_logique> ) reject( [ <lment> [ : <Type> ] | ] <expression_logique> )
select permet de gnrer une sous-collection de self ne contenant que des lments qui satisfont lexpression logique <expression_logique>. reject permet de gnrer une sous-collection contenant tous les lments de self except ceux qui satisfont lexpression logique <expression_logique>. Par exemple, pour crire une contrainte imposant que toute socit doit possder, parmi ses employs, au moins une personne de plus de 50 ans, on peut crire indiffremment : 1. context inv: self.employ->select(age > 50)->notEmpty() 2. context inv: self.employ->select(individu | individu.age > 50)->notEmpty() 3. context inv: self.employ->select(individu : Personne | individu.age > 50)->notEmpty() Opration forAll et exists Ces deux oprations permettent de reprsenter le quantificateur universel ( ) et le quantificateur existentiel ( ). Le rsultat de ces oprations est donc du type Boolean. Leur syntaxe est la suivante :
forAll( [ <lment> [ : <Type> ] | ] <expression_logique> ) exists( [ <lment> [ : <Type> ] | ] <expression_logique> )
forAll permet dcrire une expression logique vraie si lexpression <expression_logique> est vraie pour tous les lments de self. exists Permet dcrire une expression logique vraie si lexpression <expression_logique> est vraie pour au moins un lment de self. Par exemple, pour crire une contrainte imposant que toute socit doit possder, parmi ses employs, au moins une personne de plus de 50 ans, on peut crire : context Socit inv: self.employ->exists(age > 50) Lopration forAll possde une variante tendue possdant plus dun itrateur. Dans ce cas, chacun des itrateurs parcourra lensemble de la collection. Concrtement, une opration forAll comportant deux itrateurs est quivalente une opration forAll nen comportant quun, mais ralise sur le produit cartsien de self par lui-mme. Par exemple, imposer quil nexiste pas deux instances de la classe Personne pour lesquelles lattribut nom a la mme valeur, cest dire pour imposer que deux personnes diffrentes ont un nom diffrent, on peut crire indiffremment :
79
1. context Personne inv: Personne.allInstances()->forAll(p1, p2 | p1 <> p2 implies p1.nom <> p2.nom) 2. context Personne inv: (Personne.allInstances().product(Personne.allInstances())) ->forAll(tuple | tuple.first <> tuple.second implies tuple.first.nom <> tuple.second.nom) Opration collect Cette opration permet de construire une nouvelle collection en utilisant la collection self. La nouvelle collection construite possde le mme nombre dlments que la collection self, mais le type de ces lments est gnralement diffrent. La syntaxe de loprateur collect est la suivante :
collect( [ <lment> [ : <Type> ] | ] <expression> )
Pour chaque lment de la collection self, loprateur collect value lexpression <expression> sur cet lment et ajoute le rsultat dans la collection gnre. Par exemple, pour dfinir la collection des dates de naissance des employs dune socit, il faut crire, dans le contexte de la classe Socit : self.employ->collect(date_de_naissance) Puisque, toujours dans le contexte de la classe Socit, lexpression self.employ>collect(date_de_naissance)->size() = self.employ->size() est toujours vraie, il faut en conclure que le rsultat dune opration collect sur une collection du type Set nest pas du type Set mais du type Bag. En effet, dans le cadre de notre exemple, il y aura certainement des doublons dans les dates de naissance.
Figure 4.11: Reprise du diagramme de la figure 4.8. Dans cette section, nous allons illustrer par quelques exemples lutilisation du langage OCL. Nous restons toujours sur le diagramme de classes de la figure 4.8 reprsent nouveau sur la figure 4.11 pour des raisons de proximit. 1. Dans une socit, le directeur est un employ, nest pas un chmeur et doit avoir plus de 40 ans. De plus, une socit possde exactement un directeur et au moins un employ.
2. context Socit 3. inv : 4. self.directeur->size()=1 and 5. not(self.directeur.chmeur) and 6. self.directeur.age > 40 and 7. self.employ->includes(self.directeur)
8. Une personne considre comme au chmage ne doit pas avoir des revenus suprieurs 100 .
9. context Personne 10. inv : 11. let revenus : Real = self.poste.salaire->sum() in 12. if chmeur then 13. revenus < 100 14. else 15. revenus >= 100 16. endif
20. Si une personne possde deux parents, lun est une femme et lautre un homme.
21. context Personne 22. inv : 23. parent->size()=2 implies 24. ( parent->exists(genre=Genre::homme) and 25. parent->exists(genre=Genre::femme) )
26. Tous les enfants dune personne ont bien cette personne comme parent et inversement.
27. context Personne 28. inv : 29. enfant->notEmpty() implies 30. enfant->forAll( p : Personne | p.parents->includes(self))
81
31. 32. context Personne 33. inv : 34. parent->notEmpty() implies 35. parent->forAll ( p : Personne | p.enfant->includes (self))
39. Pour tre mari, il faut avoir plus de 18 ans. Un homme est mari avec exactement une femme et une femme avec exactement un homme.
40. context Personne 41. inv : 42. self.mari implies 43. self.genre=Genre::homme implies ( 44. self.femme->size()=1 and 45. self.femme.genre=Genre::femme) 46. and self.genre=Genre::femme implies ( 47. self.mari->size()=1 and 48. self.mari.genre=Genre::homme) 49. and self.age >=18
Comme nous venons de le dire, un automate tats finis est un automate dont le comportement des sorties ne dpend pas seulement de ltat de ses entres, mais aussi dun historique des sollicitations passes. Cet historique est caractris par un tat global. Un tat global est un jeu de valeurs dobjet, pour une classe donne, produisant la mme rponse face aux vnements. Toutes les instances dune mme classe ayant le mme tat global ragissent de la mme manire un vnement. Il ne faut pas confondre les notions dtat global et dtat. La section 5.2.1 donne plus dinformation sur ces deux acceptions du terme tat. Un automate tats finis est graphiquement reprsent par un graphe comportant des tats, matrialiss par des rectangles aux coins arrondis, et des transitions, matrialises par des arcs orients liant les tats entre eux.
Figure 5.1: Un diagramme dtats-transitions simple. La figure 5.1 montre un exemple simple dautomate tats finis. Cet automate possde deux tats (Allum et Eteint) et deux transitions correspondant au mme vnement : la pression sur un bouton dclairrage domestique. Cet automate tats finis illustre en fait le fonctionnement dun tlrupteur dans une maison. Lorsque lon appuie sur un bouton dclairrage, la raction de lclairage associ dpendra de son tat courant (de son historique) : sil la lumire est allume, elle steindra, si elle est teinte, elle sallumera.
5.2 tat
5.2.1 Les deux acceptions du terme tat
tat dans un diagrammes dtats-transitions
Comme nous lavons dj dit, un tat, que lon peut qualifier informellement dlmentaire, se reprsente graphiquement dans un diagrammes dtats-transitions par un rectangles aux coins arrondis (figure 5.2). Certains tats, dits composites (cf. section 5.6), peuvent contenir (i.e. envelopper) des sous-tats. Le nom de ltat peut tre spcifi dans le rectangles et doit tre unique dans le diagrammes dtatstransitions, ou dans ltat enveloppant. On peut lomettre, ce qui produit un tat anonyme. Il peut y avoir un nombre quelconque dtats anonymes distincts. Un tat imbriqu peut tre identifi par son nom qualifi (cf. section 2.4.2) si tous les tats enveloppant ont des noms. Un tat peut tre partitionn en plusieurs compartiments spars par une ligne horizontale. Le premier compartiment contient le nom de ltat et les autres peuvent recevoir des transitions interne (cf. section 5.4.6), ou des sous-tats (cf. section 5.6), quand il sagit dun tat composite. Dans le cas dun tat simple (i.e. sans transitions interne ou sous-tat), on peut omettre toute barre de sparation (figure 5.2). tat dun objet, ou du diagramme dtats-transitions (i.e. tat global) Un objet peut passer par une srie dtats pendant sa dure de vie. Un tat reprsente une priode dans la vie dun objet pendant laquelle ce dernier attend un vnement ou accomplit une activit. La configuration de ltat global de lobjet est le jeu des tats (lmentaires) qui sont actifs un instant donn. Dans le cas dun diagramme dtats-transitions simple (sans transition concurrente), il ne peut y avoir quun seul tat actif la fois. Dans ce cas, les notions dtat actif et dtat global se rejoignent. Cependant, la configuration de ltat global peut contenir plusieurs tats actifs un instant donn. On parle dtats concurrents (cf. section 5.6.5) quand plusieurs tats sont actifs en mme temps et on dit quil y a concurrence au sein de lobjet. Le nombre dtats actifs peut changer pendant la dure de vie dun objet du fait dembranchements ou de jointures appeles transitions concurrentes (cf. section 5.6.5).
Figure 5.3: Reprsentation graphique de ltat initial. Ltat initial est un pseudo tat qui indique ltat de dpart, par dfaut, lorsque le diagramme dtatstransitions, ou ltat enveloppant, est invoqu. Lorsquun objet est cr, il entre dans ltat initial. tat final
Figure 5.4: Reprsentation graphique de ltat final. Ltat final est un pseudo tat qui indique que le diagramme dtats-transitions, ou ltat enveloppant, est termin.
5.3 vnement
84
Figure 5.5: Dclaration de signaux et hritage. Un signal est un type de classeur destin explicitement vhiculer une communication asynchrone sens unique entre deux objets. Lobjet expditeur cre et initialise explicitement une instance de signal et lenvoi un objet explicite ou tout un groupe dobjets. Il nattend pas que le destinataire traite le signal pour poursuivre son droulement. La rception dun signal est un vnement pour lobjet destinataire. Un mme objet peut tre la fois expditeur et destinataire. Les signaux sont dclars par la dfinition dun classeur portant le strotype signal ne fournissant pas dopration et dont les attributs sont interprts comme des arguments (cf. figure 5.5). La syntaxe dun signal est la suivante :
<nom_vnement> ( [ <paramettre> : <type> [; <paramettre> : <type> ... ] ] )
Les signaux supporte la relation de gnralisation (cf. figure 5.5). Les signaux hritent des attributs de leurs parents (hritage) et ils dclenchent des transitions contenant le type du signal parent (polymorphisme).
Un vnement de changement est gnr par la satisfaction (i.e. passage de faux vrai) dune expression boolenne sur des valeurs dattributs. Il sagit dune manire dclarative dattendre quune condition soit satisfaite. La syntaxe dun vnement de changement est la suivante :
when ( <condition_boolenne> )
Notez la diffrence entre une condition de garde (cf. section 5.4.2) et un vnement de changement. La premire est value une fois que lvnement dclencheur de la transition a lieu et que le destinataire le traite. Si elle est fausse, la transition ne se dclenche pas et la condition nest pas rvalue. Un vnement de changement est valu continuellement jusqu ce quil devienne vrai, et cest ce moment-l que la transition se dclenche.
Un vnement temporel spcifi de manire absolue est dfini en utilisant un vnement de changement :
when ( date = <date> )
5.4 Transition
5.4.1 Dfinition et syntaxe
Une transition dfinit la rponse dun objet loccurrence dun vnement. Elle lie, gnralement, deux tats E1 et E2 et indique quun objet dans un tat E1 peut entrer dans ltat E2 et excuter certaines activits, si un vnement dclencheur se produit et que la condition de garde est vrifie. La syntaxe dune transition est la suivante :
[ <vnement> ][ '[' <garde> ']' ] [ '/' <activit> ]
La syntaxe de <vnement> a t dfinie dans la section 5.3 Le mme vnement peut tre le dclencheur de plusieurs transitions quittant un mme tat. Chaque transition avec le mme vnement doit avoir une condition de garde diffrente. En effet, une seule transition peut se dclencher dans un mme flot dexcution. Si deux transitions sont actives en mme temps par un mme vnement, une seule se dclenche et le choix nest pas prvisible (i.e. pas dterministe).
lvnement dclencheur se produit. Si lexpression est fausse ce moment l, la transition ne se dclenche pas, si elle est vraie, la transition se dclenche et ses effets se produisent.
une opration primitive comme une instruction dassignation ; lenvoi dun signal ; lappel dune opration ; une liste dactivits, etc.
La faon de spcifier lactivit raliser est laisse libre (langage naturel ou pseudo-code). Lorsque lexcution de leffet est termine, ltat cible de la transition devient actif.
Figure 5.6: Reprsentation graphique dune transition externe entre deux tats. Une transition externe est une transition qui modifie ltat actif. Il sagit du type de transition le plus rpandu. Elle est reprsente par une flche allant de ltat source vers ltat cible. La figure 5.6 illustre la reprsentation graphique dune transition externe entre deux tats.
Figure 5.7: Reprsentation de la saisie dun mot de passe dans un tat unique en utilisant des transitions internes.
87
Les rgles de dclenchement dune transition interne sont les mmes que pour une transition externe except quune transition interne ne possde pas dtat cible et que ltat actif reste le mme la suite de son dclenchement. La syntaxe dune transition interne reste la mme que celle dune transition classique (cf. section 5.4.1). Par contre, les transitions internes ne sont pas reprsentes par des arcs mais sont spcifies dans un compartiment de leur tat associ (cf. figure 5.7). Les transitions internes possdent des noms dvnement prdfinis correspondant des dclencheurs particuliers : entry, exit, do et include. Ces mots clefs rservs viennent prendre la place du nom de lvnement dans la syntaxe dune transition interne. entry entry permet de spcifier une activit qui saccomplit quand on entre dans ltat. exit exit permet de spcifier une activit qui saccomplit quand on sort de ltat. do Une activit do commence ds que lactivit entry est termine. Lorsque cette activit est termine, une transition dachvement peut tre dclenche, aprs lexcution de lactivit exit bien entendu. Si une transition se dclenche pendant que lactivit do est en cours, cette dernire est interrompue et lactivit exit de ltat sexcute. include permet dinvoquer un sous-diagramme dtats-transitions. Les activits entry servent souvent effectuer la configuration ncessaire dans un tat. Comme il nest pas possible de lluder, toute action interne ltat peut supposer que la configuration est effectue indpendamment de la manire dont on entre dans ltat. De manire analogue, une activit exit est une occasion de procder un nettoyage. Cela peut savrer particulirement utile lorsquil existe des transitions de haut niveau qui reprsentent des conditions derreur qui abandonnent les tats imbriqus. Le dclenchement dune transition interne ne modifie pas ltat actif et nentrane donc pas lactivation des activits entry et exit.
88
Figure 5.8: En haut, un diagramme sans point de jonction. En bas, son quivalent utilisant un point de jonction.
Figure 5.9: Exemple dutilisation de deux points de jonction pour reprsenter une alternative. Les points de jonction sont un artefact graphique (un pseudo-tat en loccurrence) qui permet de partager des segments de transition, lobjectif tant daboutir une notation plus compacte ou plus lisible des chemins alternatifs. Un point de jonction peut avoir plusieurs segments de transition entrante et plusieurs segments de transition sortante. Par contre, il ne peut avoir dactivit interne ni des transitions sortantes dotes de dclencheurs dvnements. Il ne sagit pas dun tat qui peut tre actif au cours dun laps de temps fini. Lorsquun chemin passant par un point de jonction est emprunt (donc lorsque la transition associe est dclenche) toutes les gardes le long de ce chemin doivent svaluer vrai ds le franchissement du premier segment. La figure 5.8 illustre bien lutilit des points de jonction. La figure 5.9 illustre lutilisation de points de jonction pour reprsenter le branchement dune clause conditionnelle.
89
Figure 5.10: Exemple dutilisation dun point de dcision. Un point de dcision possde une entre et au moins deux sorties. Contrairement un point de jonction, les gardes situes aprs le point de dcision sont values au moment o il est atteint. Cela permet de baser le choix sur des rsultats obtenus en franchissant le segment avant le point de choix (cf. figure 5.10). Si, quand le point de dcision est atteint, aucun segment en aval nest franchissable, cest que le modle est mal form. Il est possible dutiliser une garde particulire, note [else], sur un des segments en aval dun point de choix. Ce segment nest franchissable que si les gardes des autres segments sont toutes fausses. Lutilisation dune clause [else] est recommande aprs un point de dcision car elle garantit un modle bien form.
Figure 5.11: Exemple dtat composite modlisant lassociation dune commande un client. Un tat simple ne possde pas de sous-structure mais uniquement, le cas chant, un jeu de transitions internes. Un tat composite est un tat dcompos en rgions contenant chacune un ou plusieurs sous-tats. Quand un tat composite comporte plus dune rgion, il est qualifi dtat orthogonal. Lorsquun tat orthogonal est actif, un sous-tat direct de chaque rgion est simultanment actif, il y a donc concurrence (cf. section 5.6.5). Un tat composite ne comportant quune rgion est qualifi dtat non orthogonal.
90
Implicitement, tout diagramme dtats-transitions est contenu dans un tat externe qui nest usuellement pas reprsent. Cela apporte une plus grande homognit dans la description : tout diagramme dtatstransitions est implicitement un tat composite.
Figure 5.12: Notation abrge dun tat composite. Lutilisation dtats composites permet de dvelopper une spcification par raffinements. Il nest pas ncessaire de reprsenter les sous-tats chaque utilisation de ltat englobant. Une notation abrge (figure 5.12) permet dindiquer quun tat est composite et que sa dfinition est donne sur un autre diagramme. La figure figure 5.11 montre un exemple dtat composite et la figure 5.12 montre sa notation abrge.
5.6.2 Transition
Les transitions peuvent avoir pour cible la frontire dun tat composite et sont quivalentes une transition ayant pour cible ltat initial de ltat composite. Une transition ayant pour source la frontire dun tat composite est quivalente une transition qui sapplique tout sous-tat de ltat composite source. Cette relation est transitive : la transition est franchissable depuis tout tat imbriqu, quelle que soit sa profondeur. Par contre, si la transition ayant pour source la frontire dun tat composite ne porte pas de dclencheur explicite (i.e. sil sagit dune transition dachvement), elle est franchissable quand ltat final de ltat composite est atteint. Les transitions peuvent galement toucher des tats de diffrents niveaux dimbrication en traversant les frontires des tats composites.
Figure 5.13: Exemple de configuration complexe de transition. Depuis ltat tat 1, la rception de lvnement event1 produit la squence dactivits QuitterE11, QuitterE1, action1, EntrerE2, EntrerE21, initialiser(), EntrerE22, et place le systme dans ltat tat22. La figure 5.13 illustre une configuration complexe de transition produisant une cascade dactivits.
Figure 5.14: Exemple de diagramme possdant un tat historique profond permettant de reprendre le programme de lavage ou de schage dune voiture lendroit o il tait arriv avant dtre interrompu. Un tat historique, galement qualifi dtat historique plat, est un pseudo-tat qui mmorise le dernier sous-tat actif dun tat composite. Graphiquement, il est reprsent par un cercle contenant un H. Une transition ayant pour cible ltat historique est quivalente une transition qui a pour cible le dernier tat visit de ltat englobant. Un tat historique peut avoir une transition sortante non tiquete indiquant ltat excuter si la rgion na pas encore t visite. Il est galement possible de dfinir un tat historique profond reprsent graphiquement par un cercle contenant un H*. Cet tat historique profond permet datteindre le dernier tat visit dans la rgion, quel que soit sont niveau dimbrication, alors que le ltat historique plat limite laccs aux tats de son niveau dimbrication. La figure 5.14 montre un diagramme dtats-transitions modlisant le lavage automatique dune voiture. Les tats de lavage, schage et lustrage sont des tats composites dfinis sur trois autres diagrammes dtatstransitions non reprsents ici. En phase de lavage ou de schage, le client peut appuyer sur le bouton darrt durgence. Sil appuie sur ce bouton, la machine se met en attente. Il a alors deux minutes pour reprendre le lavage ou le lustrage, exactement o le programme t interrompue, cest dire au niveau du dernier soustat actif des tats de lavage ou de lustrage (tat historique profond). Si ltat avait t un tat historique plat, cest toute la squence de lavage ou de lustrage qui aurait recommence. En phase de lustrage, le client peut aussi interrompre la machine. Mais dans ce cas, la machine sarrtera dfinitivement.
92
Figure 5.15: Exemple dutilisation de points de connexion. Comme nous lavons dj dit, il est possible de masquer les sous-tats dun tat composite et de les dfinir dans un autre diagramme. Cette pratique ncessite parfois lutilisation de pseudo-tats appels points de connexion. Lorsque lon utilise le comportement par dfaut de ltat composite, cest--dire entrer par ltat initial par dfaut et considrer les traitements finis quand ltat final est atteint, aucun problme ne se pose car on utilise des transitions ayant pour cible, ou pour source, la frontire de ltat composite. Dans ce cas, les points de connexion sont inutiles. Le problme se pose lorsquil est possible dentrer ou de sortir dun tat composite de plusieurs faons. Cest, par exemple, le cas lorsquil existe des transitions traversant la frontire de ltat composite et visant directement, ou ayant pour source, un sous-tat de ltat composite. Dans ce cas, la solution est dutiliser des points de connexion sur la frontire de ltat composite. Les points de connexion sont des points dentre et de sortie portant un nom, et situs sur la frontire dun tat composite. Ils sont respectivement reprsents par un cercle vide et un cercle barr dune croix (cf. figure 5.15). Il ne sagit que de rfrences un tat dfini dans ltat composite . Une unique transition dachvement, dpourvue de garde, relie le pseudo-tat source (i.e. le point de connexion) ltat rfrenc. Cette transition dachvement nest que le prolongement de la transition qui vise le point de connexion (il peut dailleurs y en avoir plusieurs). Les points de connexions offrent ainsi une faon de reprsenter linterface (au sens objet) dun tat composite en masquant limplmentation de son comportement. On peut considrer que les pseudo-tats initiaux et finaux sont des points de connexion sans nom.
5.6.5 Concurrence
93
Figure 5.16: Exemple dutilisation dun tat composite orthogonal. Les diagrammes dtats-transitions permettent de dcrire efficacement les mcanismes concurrents grce lutilisation dtats orthogonaux. Un tat orthogonal est un tat composite comportant plus dune rgion, chaque rgion reprsentant un flot dexcution. Graphiquement, dans un tat orthogonal, les diffrentes rgions sont spares par un trait horizontal en pointill allant du bord gauche au bord droit de ltat composite. Chaque rgion peut possder un tat initial et final. Une transition qui atteint la bordure dun tat composite orthogonal est quivalente une transition qui atteint les tats initiaux de toutes ses rgions concurrentes. Toutes les rgions concurrentes dun tat composite orthogonal doivent atteindre leur tat final pour que ltat composite soit considr comme termin. La figure 5.16 illustre lutilisation dun tat composite orthogonal pour modliser le fait que la prparation de la boisson dun distributeur de boisson se fait en parallle au rendu de la monaie.
Figure 5.17: Exemple dutilisation de transitions complexes. Il est galement possible de reprsenter ce type de comportement au moyen de transitions concurrentes. De telles transitions sont qualifies de complexes. Les transitions complexes sont reprsentes par une barre
94
paisse et peuvent, ventuellement, tre nommes. La figure 5.17 montre la mise en uvre de ce type de transition. Sur ce diagramme, ltat orthogonal prparer boisson et rendre monnaie peut ventuellement ne pas apparatre (tout en gardant la reprsentation de ses sous-tats) pour allger la reprsentation, car la notion de concurrence est clairement apparente de par lutilisation des transitions complexes.
une affectation de valeur des attributs ; un accs la valeur dune proprit structurelle (attribut ou terminaison dassociation) ; la cration dun nouvel objet ou lien ; un calcul arithmtique simple ; lmission dun signal ; la rception dun signal ;
Nous dcrivons ci-dessous les types dactions les plus courants prdfinis dans la notation UML. Action appeler (call operation) Laction call operation correspond linvocation dune opration sur un objet de manire synchrone ou asynchrone. Lorsque laction est excute, les paramtres sont transmis lobjet cible. Si lappel est asynchrone, laction est termine et les ventuelles valeurs de retour seront ignores. Si lappel est synchrone, lappelant est bloqu pendant lexcution de lopration et, le cas chant, les valeurs de retour pourront tre rceptionnes. Action comportement (call behavior) Laction call behavior est une variante de laction call operation car elle invoque directement une activit plutt quune opration. Action envoyer (send) Cette action cre un message et le transmet un objet cible, o elle peut dclencher un comportement. Il sagit dun appel asynchrone (i.e. qui ne bloque pas lobjet appelant) bien adapt lenvoi de signaux (send signal). Action accepter vnement (accept event) Lexcution de cette action bloque lexcution en cours jusqu la rception du type dvnement spcifi, qui gnralement est un signal. Cette action est utilise pour la rception de signaux asynchrones. Action accepter appel (accept call) Il sagit dune variante de laction accept event pour les appels synchrones. Action rpondre (reply) Cette action permet de transmettre un message en rponse la rception dune action de type accept call. Action crer (create) Cette action permet dinstancier un objet. Action dtruire (destroy) Cette action permet de dtruire un objet. Action lever exception (raise exception) Cette action permet de lever explicitement une exception. Graphiquement, les actions apparaissent dans des n uds daction, dcrits section 6.3.1.
96
Une activit dfinit un comportement dcrit par un squencement organis dunits dont les lments simples sont les actions. Le flot dexcution est modlis par des n uds relis par des arcs (transitions). Le flot de contrle reste dans lactivit jusqu ce que les traitements soient termins. Une activit est un comportement (behavior en anglais) et ce titre peut tre associe des paramtres.
Figure 6.1: Reprsentation graphique des n uds dactivit. De la gauche vers la droite, on trouve : le n ud reprsentant une action, qui est une varit de n ud excutable, un n ud objet, un n ud de dcision ou de fusion, un n ud de bifurcation ou dunion, un n ud initial, un n ud final et un n ud final de flot.
97
Figure 6.2: Exemple de diagramme dactivits modlisant le fonctionnement dune borne bancaire. Un n ud dactivit est un type dlment abstrait permettant de reprsenter les tapes le long du flot dune activit. Il existe trois familles de n uds dactivits :
y y y
les n uds dexcutions (executable node en anglais) ; les n uds objets (object node en anglais) ; et les n uds de contrle (control nodes en anglais).
La figure 6.1 reprsente les diffrents types de n uds dactivit. La figure 6.2 montre comment certains de ces n uds sont utiliss pour former un diagramme dactivits.
98
6.2.5 Transition
Figure 6.3: Reprsentation graphique dune transition. Le passage dune activit vers une autre est matrialis par une transition. Graphiquement les transitions sont reprsentes par des flches en traits pleins qui connectent les activits entre elles (figure 6.3). Elles sont dclenches ds que lactivit source est termine et provoquent automatiquement et immdiatement le dbut de la prochaine activit dclencher (lactivit cible). Contrairement aux activits, les transitions sont franchies de manire atomique, en principe sans dure perceptible. Les transitions spcifient lenchanement des traitements et dfinissent le flot de contrle.
6.3.1 N ud daction
Figure 6.4: Reprsentation graphique dun n ud daction. Un n ud daction est un n ud dactivit excutable qui constitue lunit fondamentale de fonctionnalit excutable dans une activit. Lexcution dune action reprsente une transformation ou un calcul quelconque dans le systme modlis. Les actions sont gnralement lies des oprations qui sont directement invoques. Un n ud daction doit avoir au moins un arc entrant. Graphiquement, un n ud daction est reprsent par un rectangle aux coins arrondis (figure 6.4) qui contient sa description textuelle. Cette description textuelle peut aller dun simple nom une suite dactions ralises par lactivit. UML nimpose aucune syntaxe pour cette description textuelle, on peut donc utiliser une syntaxe proche de celle dun langage de programmation particulier ou du pseudo-code.
99
Figure 6.5: Reprsentation particulire des n uds daction de communication. Certaines actions de communication ont une notation spciale (cf. figure 6.5).
100
Figure 6.6: Exemple de diagramme dactivit illustrant lutilisation de n uds de contrle. Ce diagramme dcrit la prise en compte dune commande. Un n ud de contrle est un n ud dactivit abstrait utilis pour coordonner les flots entre les n uds dune activit. Il existe plusieurs types de n uds de contrle :
y y y y y y y
n n n n n n n
ud initial (initial node en anglais) ; ud de fin dactivit (final node en anglais) ud de fin de flot (flow final en anglais) ; ud de dcision (decision node en anglais) ; ud de fusion (merge node en anglais) ; ud de bifurcation (fork node en anglais) ; ud dunion (join node en anglais).
101
6.4.1 N ud initial
Un n ud initial est un n ud de contrle partir duquel le flot dbute lorsque lactivit enveloppante est invoque. Une activit peut avoir plusieurs n uds initiaux. Un n ud initial possde un arc sortant et pas darc entrant. Graphiquement, un n ud initial est reprsent par un petit cercle plein (cf. figure 6.6).
6.4.2 N ud final
Un n ud final est un n ud de contrle possdant un ou plusieurs arcs entrants et aucun arc sortant. N ud de fin dactivit Lorsque lun des arcs dun n ud de fin dactivit est activ (i.e. lorsquun flot dexcution atteint un n ud de fin dactivit), lexcution de lactivit enveloppante sachve et tout n ud ou flot actif au sein de lactivit enveloppante est abandonn. Si lactivit a t invoque par un appel synchrone, un message (reply) contenant les valeurs sortantes est transmis en retour lappelant. Graphiquement, un n ud de fin dactivit est reprsent par un cercle vide contenant un petit cercle plein (cf. figure 6.6). N ud de fin de flot Lorsquun flot dexcution atteint un n ud de fin de flot, le flot en question est termin, mais cette fin de flot na aucune incidence sur les autres flots actifs de lactivit enveloppante. Graphiquement, un n ud de fin de flot est reprsent par un cercle vide barr dun X. Les n uds de fin de flot sont particuliers et utiliser avec parcimonie. Dans lexemple de la figure 6.6, le n ud de fin de flot nest pas indispensable : on peut le remplacer par un n ud dunion possdant une transition vers un n ud de fin dactivit.
102
Un n ud de fusion est un n ud de contrle qui rassemble plusieurs flots alternatifs entrants en un seul flot sortant. Il nest pas utilis pour synchroniser des flots concurrents (cest le rle du n ud dunion) mais pour accepter un flot parmi plusieurs. Graphiquement, on reprsente un n ud de fusion, comme un n ud de dcision, par un losange (cf. figure 6.6). Remarque Graphiquement, il est possible de fusionner un n ud de fusion et un n ud de dcision, et donc davoir un losange possdant plusieurs arcs entrants et sortants. Il est galement possible de fusionner un n ud de dcision ou de fusion avec un autre n ud, comme un n ud de fin de flot sur la figure 6.6, ou avec une activit. Cependant, pour mieux mettre en vidence un branchement conditionnel, il est prfrable dutiliser un n ud de dcision (losange).
Figure 6.7: Reprsentation des pins dentre et de sortie sur une activit. Pour spcifier les valeurs passes en argument une activit et les valeurs de retour, on utilise des n uds dobjets appels pins (pin en anglais) dentre ou de sortie. Lactivit ne peut dbuter que si lon affecte une valeur chacun de ses pins dentre. Quand lactivit se termine, une valeur doit tre affecte chacun de ses pins de sortie. Les valeurs sont passes par copie : une modification des valeurs dentre au cours du traitement de laction nest visible qu lintrieur de lactivit. Graphiquement, un pin est reprsent par un petit carr attach la bordure dune activit (cf. figure 6.7). Il est typ et ventuellement nomm. Il peut contenir des flches indiquant sa direction (entre ou sortie) si lactivit ne permet pas de le dterminer de manire univoque.
Figure 6.8: Deux notations possibles pour modliser un flot de donnes. Un flot dobjets permet de passer des donnes dune activit une autre. Un arc reliant un pin de sortie un pin dentre est, par dfinition mme des pins, un flot dobjets (en haut de la figure 6.8). Dans cette configuration, le type du pin rcepteur doit tre identique ou parent (au sens de la relation de gnralisation) du type du pin metteur. Il existe une autre reprsentation possible dun flot dobjets, plus axe sur les donnes proprement dites car elle fait intervenir un n ud dobjet dtach dune activit particulire (en bas de la figure 6.8).
104
Graphiquement, un tel n ud dobjet est reprsent par un rectangle dans lequel est mentionn le type de lobjet (soulign). Des arcs viennent ensuite relier ce n ud dobjet des activits sources et cibles. Le nom dun tat, ou dune liste dtats, de lobjet peut tre prcis entre crochets aprs ou sous le type de lobjet. On peut galement prciser des contraintes entre accolades, soit lintrieur, soit en dessous du rectangle du n ud dobjet. La figure 6.11 montre lutilisation de n uds dobjets dans un diagramme dactivits. Un flot dobjets peut porter une tiquette strotype mentionnant deux comportements particuliers :
y y
transformation indique une interprtation particulire de la donne vhicule par le flot ; selection indique lordre dans lequel les objets sont choisis dans le n ud pour le quitter (cf. figure 6.10).
Figure 6.9: Exemple dutilisation dun n ud tampon central pour centraliser toutes les commandes prises par diffrents procds, avant quelles soient traites. Un n ud tampon central est un n ud dobjet qui accepte les entres de plusieurs n uds dobjets ou produit des sorties vers plusieurs n uds dobjets. Les flots en provenance dun n ud tampon central ne sont donc pas directement connects des actions. Ce n ud modlise donc un tampon traditionnel qui peut contenir des valeurs en provenance de diverses sources et livrer des valeurs vers diffrentes destinations. Graphiquement, un n ud tampon central est reprsent comme un n ud dobjet dtach (en bas de la figure 6.8) strotyp centralBuffer (cf. figure 6.9).
Figure 6.10: Dans cette modlisation, le personnel, aprs avoir t recrut par lactivit Recruter personnel, est stock de manire persistante dans le n ud de stockage Base de donne du Personnel. Bien quils restent dans ce n ud, chaque employ qui na pas encore reu daffectation (tiquette strotype selection :
105
personnel.affectation=null)
Un n ud de stockage des donnes est un n ud tampon central particulier qui assure la persistance des donnes. Lorsquune information est slectionne par un flux sortant, linformation est duplique et ne disparat pas du n ud de stockage des donnes comme ce serait le cas dans un n ud tampon central. Lorsquun flux entrant vhicule une donne dj stocke par le n ud de stockage des donnes, cette dernire est crase par la nouvelle. Graphiquement, un n ud tampon central est reprsent comme un n ud dobjet dtach (en bas de la figure 6.8) strotyp datastore (cf. figure 6.10).
6.6 Partitions
Figure 6.11: Illustration de lutilisation de n uds dobjets et de partitions dans un diagramme dactivits.
106
Les partitions, souvent appeles couloirs ou lignes deau (swimlane) du fait de leur notation, permettent dorganiser les n uds dactivits dans un diagramme dactivits en oprant des regroupements (cf. figure 6.11). Les partitions nont pas de signification bien arrte, mais correspondent souvent des units dorganisation du modle. On peut, par exemple, les utiliser pour spcifier la classe responsable de la mise en uvre dun ensemble tche. Dans ce cas, la classe en question est responsable de limplmentation du comportement des n uds inclus dans ladite partition. Graphiquement, les partitions sont dlimites par des lignes continues. Il sagit gnralement de lignes verticales, comme sur la figure 6.11, mais elle peuvent tre horizontales ou mme courbes. Dans la version 2.0 dUML, les partitions peuvent tre bidimensionnelles, elles prennent alors la forme dun tableau. Dans le cas dun diagramme dactivits partitionn, les n uds dactivits appartiennent forcment une et une seule partition. Les transitions peuvent, bien entendu, traverser les frontires des partitions. Les partitions dactivits tant des catgories arbitraires, on peut les reprsenter par dautre moyens quand une rpartition gomtrique savre difficile raliser. On peut ainsi utiliser des couleurs ou tout simplement tiqueter les n uds dactivit par le nom de leur partition dappartenance.
6.7 Exceptions
Figure 6.12: Notation graphique du fait quune activit peut soulever une exception. Une exception est gnre quand une situation anormale entrave le droulement nominal dune tche. Elle peut tre gnre automatiquement pour signaler une erreur dexcution (dbordement dindice de tableau, division par zro, ), ou tre souleve explicitement par une action (RaiseException) pour signaler une situation problmatique qui nest pas prise en charge par la squence de traitement normale. Graphiquement, on peut reprsenter le fait quune activit peut soulever une exception comme un pin de sortie orn dun petit triangle et en prcisant le type de lexception proximit du pin de sortie (cf. figure 6.12).
Figure 6.13: Les deux notations graphiques de la connexion entre une activit protge et son gestionnaire dexception associ.
107
Un gestionnaire dexception est une activit possdant un pin dentre du type de lexception quil gre et li lactivit quil protge par un arc en zigzag ou un arc classique orn dune petite flche en zigzag. Le gestionnaire dexception doit avoir les mmes pins de sortie que le bloc quil protge (cf. figure 6.13). Les exceptions sont des classeurs et, ce titre, peuvent possder des caractristiques comme des attributs ou des oprations. Il est galement possible dutiliser la relation dhritage sur les exceptions. Un gestionnaire dexception spcifie toujours le type des exceptions quil peut traiter, toute exception drivant de ce type est donc galement prise en charge.
Figure 6.14: Exemple dutilisation dun gestionnaire dexception pour protger une activit de lexception Division_par_zero dclenche en cas de division par zro. Lorsquune exception survient, lexcution de lactivit en cours est abandonne sans gnrer de valeur de sortie. Le mcanisme dexcution recherche alors un gestionnaire dexception susceptible de traiter lexception leve ou une de ses classes parentes. Si lactivit qui a lev lexception nest pas protge de cette exception, lexception est propage lactivit englobante. Lexcution de cette dernire est abandonne, ses valeurs de sortie ne sont pas gnres et un gestionnaire dexception est recherch son niveau. Ce mcanisme de propagation se poursuit jusqu ce quun gestionnaire adapt soit trouv. Si lexception se propage jusquau sommet dune activit (i.e. il ny a plus dactivit englobante), trois cas de figure se prsentent. Si lactivit a t invoque de manire asynchrone, aucun effet ne se produit et la gestion de lexception est termine. Si lactivit a t invoque de manire synchrone, lexception est propage au mcanisme dexcution de lappelant. Si lexception sest propage la racine du systme, le modle est considr comme incomplet ou mal form. Dans la plupart des langages orients objet, une exception qui se propage jusqu la racine du programme implique son arrt. Quand un gestionnaire dexception adapt a t trouv et que son excution se termine, lexcution se poursuit comme si lactivit protge stait termine normalement, les valeurs de sortie fournies par le gestionnaire remplaant celle que lactivit protge aurait d produire.
7.1.1 Introduction
108
Un objet interagit pour implmenter un comportement. On peut dcrire cette interaction de deux manires complmentaires : lune est centre sur des objets individuels (diagramme dtats-transitions) et lautre sur une collection dobjets qui cooprent (diagrammes dinteraction). La spcification dun diagramme dtats-transitions est prcise et conduit immdiatement au code. Elle ne permet pas pour autant dexpliquer le fonctionnement global dun systme, car elle se concentre sur un seul objet la fois. Un diagramme dinteraction permet doffrir une vue plus holistique1 du comportement dun jeu dobjets. Le diagramme de communication (section 7.2) est un diagramme dinteraction mettant laccent sur lorganisation structurelle des objets qui envoient et reoivent des messages. Le diagramme de squence (section 7.3) est un diagramme dinteraction mettant laccent sur la chronologie de lenvoi des messages. Les diagrammes dinteraction permettent dtablir un lien entre les diagrammes de cas dutilisation et les diagrammes de classes : ils montrent comment des objets (i.e. des instances de classes) communiquent pour raliser une certaine fonctionnalit. Ils apportent ainsi un aspect dynamique la modlisation du systme. Pour produire un diagramme dinteraction, il faut focaliser son attention sur un sous-ensemble dlments du systme et tudier leur faon dinteragir pour dcrire un comportement particulier. UML permet de dcrire un comportement limit un contexte prcis de deux faons : dans le cadre dun classeur structur (cf. section 7.1.2) ou dans celui dune collaboration (cf. section 7.1.3).
Figure 7.1: Exemple de classeur structur montrant quun classeur Moteur est en fait constitu dun Allumage et de quatre Bougie. Les classes dcouvertes au moment de lanalyse (celles qui figurent dans le diagramme de classes) ne sont parfois pas assez dtailles pour pouvoir tre implmentes par des dveloppeurs. UML propose de partir des classeurs dcouverts au moment de lanalyse (tels que les classes, mais aussi les sous-systmes, les cas dutilisation, ) et de les dcomposer en lments suffisamment fins pour permettre leur implmentation. Les classeurs ainsi dcomposs sappellent des classeurs structurs. Un classeur structur est donc la description de la structure dimplmentation interne dune classe. Graphiquement, un classeur structur se reprsente par un rectangle en trait plein comprenant deux compartiments. Le compartiment suprieur contient le nom du classeur et le compartiment infrieur montre les parties internes relies par des connecteurs (cf. figure 7.1). Un classeur structur possde des ports (cf. section 8.2.3), des parties et des connecteurs. Lorsque lon cre linstance dun classeur structur, on cre galement une instance de ses ports, de ses parties et de ses connecteurs.
7.1.3 Collaboration
109
Figure 7.2: Diagramme de collaboration dune transaction immobilire. Une collaboration permet de dcrire la mise en uvre dune fonctionnalit par un jeu de participants. Un rle est la description dun participant. Contrairement aux paquetages et aux classeurs structurs, une collaboration ne dtient pas les instances lies ses rles. Les instances existent avant ltablissement dune instance de la collaboration, mais la collaboration les rassemble et prcise des connecteurs entre elles. Une collaboration peut donc traverser plusieurs niveaux dun systme et un mme lment peut apparatre dans plusieurs collaborations. Par exemple, pour implmenter un cas dutilisation, il faut utiliser un ensemble de classes, et dautres lments, fonctionnant ensemble pour raliser le comportement de ce cas dutilisation. Cette ensemble dlments, comportant la fois une structure statique et dynamique, est modlis en UML par une collaboration. Graphiquement, une collaboration se reprsente par une ellipse en trait pointill comprenant deux compartiments. Le compartiment suprieur contient le nom de la collaboration et le compartiment infrieur montre les participants la collaboration (cf. figure 7.2).
Figure 7.5: Diagramme de squence dun systme de pilotage. Une interaction montre le comportement dun classeur structur ou dune collaboration en se focalisant sur lchange dinformations entre les lments du classeur ou de la collaboration. Une interaction contient un jeu de ligne de vie. Chaque ligne de vie correspond une partie interne dun classeur ou dune collaboration (i.e. un rle dans le cas dune collaboration). Linteraction dcrit donc lactivit interne des lments du classeur ou de la collaboration, appels lignes de vie, par les messages quils changent. UML propose principalement deux diagrammes pour illustrer une interaction : le diagramme de communication et celui de squence. Une mme interaction peut tre prsente aussi bien par lun que par lautre (cf. figure 7.4 et 7.5). Remarque A ces deux diagrammes, UML 2.0 en ajoute un troisime : le diagramme de timing. Son usage est limit la modlisation des systmes qui sexcutent sous de fortes contraintes de temps, comme les systmes temps rel.
111
Figure 7.6: Diagramme de communication illustrant la recherche puis lajout, dans son panier virtuel, dun livre lors dune commande sur Internet. Contrairement un diagramme de squence, un diagramme de communication2 rend compte de lorganisation spatiale des participants linteraction, il est souvent utilis pour illustrer un cas dutilisation ou pour dcrire une opration. Le diagramme de communication aide valider les associations du diagramme de classe en les utilisant comme support de transmission des messages.
Au moins un des deux noms doit tre spcifi dans ltiquette, les deux points (:) sont, quand eux, obligatoire.
est le numro de squence du message. On numrote les messages par envoi et sous-envoi dsigns par des chiffres spars par des points : ainsi lenvoi du message 1.4.4 est postrieur celui du message 1.4.3, tous deux tant des consquences (i.e. des sous-envois) de la rception dun message
112
1.4. La simultanit dun envoi est dsigne par une lettre : les messages 1.6a et 1.6b sont envoys en mme temps.
<iter>
spcifie (en langage naturel, entre crochets) lenvoi squentiel (ou en parallle, avec ||) de plusieurs message. On peut omettre cette spcification et ne garder que le caractre * (ou *||) pour dsigner un message rcurrent envoy un certain nombre de fois.
<var>
est la valeur de retour du message, qui sera par exemple transmise en paramtre un autre message.
<msg>
dsigne les paramtres (optionnels) du message. Cette syntaxe un peu complexe permet de prciser parfaitement lordonnancement et la synchronisation des messages entre les objets du diagramme de communication (cf. figure 7.6). La direction dun message est spcifie par une flche pointant vers lun ou lautre des objets de linteraction, relis par ailleurs avec un trait continu (connecteur). 2 Dans la norme UML 1, le diagramme de communication sappelait diagramme de collaboration.
Au moins un des deux noms doit tre spcifi dans ltiquette, les deux points (:) sont, quand eux, obligatoire.
lenvoi dun signal ; linvocation dune opration ; la cration ou la destruction dune instance.
Messages asynchrones
113
Figure 7.7: Reprsentation dun message asynchrone. Une interruption ou un vnement sont de bons exemples de signaux. Ils nattendent pas de rponse et ne bloquent pas lmetteur qui ne sait pas si le message arrivera destination, le cas chant quand il arrivera et sil serra trait par le destinataire. Un signal est, par dfinition, un message asynchrone. Graphiquement, un message asynchrone se reprsente par une flche en traits pleins et lextrmit ouverte partant de la ligne de vie dun objet expditeur et allant vers celle de lobjet cible (figure 7.7). Messages synchrones
Figure 7.8: Reprsentation dun message synchrone. Linvocation dune opration est le type de message le plus utilis en programmation objet. Linvocation peut tre asynchrone ou synchrone. Dans la pratique, la pluspart des invocations sont synchrones, lmetteur reste alors bloqu le temps que dure linvocation de lopration. Graphiquement, un message synchrone se reprsente par une flche en traits pleins et lextrmit pleine partant de la ligne de vie dun objet expditeur et allant vers celle de lobjet cible (figure 7.8). Ce message peut tre suivi dune rponse qui se reprsente par une flche en pointill (figure 7.8). Messages de cration et destruction dinstance
Figure 7.9: Reprsentation dun message de cration et destruction dinstance. La cration dun objet est matrialise par une flche qui pointe sur le sommet dune ligne de vie (figure 7.9). La destruction dun objet est matrialise par une croix qui marque la fin de la ligne de vie de lobjet (figure 7.9). La destruction dun objet nest pas ncessairement conscutive la rception dun message.
114
vnements et messages
Figure 7.10: Les diffrents vnements correspondant un message asynchrone. UML permet de sparer clairement lenvoi du message, sa rception, ainsi que le dbut de lexcution de la raction et sa fin (figure 7.10). Syntaxe des messages et des rponses
Figure 7.11: Syntaxe des messages et des rponses. Dans la plupart des cas, la rception dun message est suivie de lexcution dune mthode dune classe. Cette mthode peut recevoir des arguments et la syntaxe des messages permet de transmettre ces arguments. La syntaxe de ces messages est la mme que pour un diagramme de communication (cf. section 7.2.3) except deux points :
y
la direction du message est directement spcifie par la direction de la flche qui matrialise le message, et non par une flche supplmentaire au dessus du connecteur reliant les objets comme cest le cas dans un diagramme de communication ;
115
les numros de squence sont gnralement omis puisque lordre relatif des messages est dj matrialis par laxe vertical qui reprsente lcoulement du temps.
o message reprsente le message denvoi. La figure 7.11 montre un exemple dexcution dune mthode avec une rponse. Message perdu et trouv
Figure 7.12: Reprsentation dun message perdu et dun message trouv. Un message complet est tel que les vnements denvoi et de rception sont connus. Comme nous lavons dj vu, un message complet se reprsente par une simple flche dirige de lmetteur vers le rcepteur. Un message perdu est tel que lvnement denvoi est connu, mais pas lvnement de rception. Il se reprsente par une flche qui pointe sur une petite boule noire (figure 7.12). Un message trouv est tel que lvnement de rception est connu, mais pas lvnement dmission. Une flche partant dune petite boule noire reprsente un message trouv (figure 7.12). Porte Une porte est un point de connexion qui permet de reprsenter un mme message dans plusieurs fragments dinteraction. Ces messages entrants et sortants vont dun bord dune diagramme une ligne de vie (ou linverse). Excution de mthode et objet actif
Figure 7.13: Reprsentation dun objet actif ( gauche) et dune excution sur un objet passif ( droite). Un objet actif initie et contrle le flux dactivits. Graphiquement, la ligne pointille verticale dun objet actif est remplace par un double trait vertical (cf. figures 7.13).
116
Un objet passif, au contraire, a besoin quon lui donne le flux dactivit pour pouvoir excuter une mthode. La spcification de lexcution dune raction sur un objet passif se reprsente par un rectangle blanc ou gris plac sur la ligne de vie en pointille (cf. figures 7.13). Le rectangle peut ventuellement porter un label.
Figure 7.14: Reprsentation dune excution simultane ( gauche). Les excutions simultanes sur une mme ligne de vie sont reprsentes par un rectangle chevauchant comme le montre la figure 7.14.
les oprateurs de choix et de boucle : alternative, option, break et loop ; les oprateurs contrlant lenvoi en parallle de messages : parallel et critical region ; les oprateurs contrlant lenvoi de messages : ignore, consider, assertion et negative ; les oprateurs fixant lordre denvoi des messages : weak sequencing , strict sequencing.
Nous naborderons que quelques-unes de ces interactions dans la suite de cette section. Oprateur alt
117
Figure 7.15: Reprsentation dun choix dans un diagramme de squence illustrant le dcouvrement dune case au jeu du dmineur. Loprateur alternative, ou alt, est un oprateur conditionnel possdant plusieurs oprandes (cf. figure 7.15). Cest un peu lquivalent dune excution choix multiple (condition switch en C++). Chaque oprande dtient une condition de garde. Labsence de condition de garde implique une condition vraie (true). La condition else est vraie si aucune autre condition nest vraie. Exactement un oprande dont la condition est vraie est excut. Si plusieur oprandes prennent la valeur vraie, le choix est non dterministe. Oprateurs opt Loprateur option, ou opt, comporte une oprande et une condition de garde associe. Le sous-fragment sexcute si la condition de garde est vraie et ne sexcute pas dans le cas contraire. Oprateur loop Un fragment combin de type loop possde un sous-fragment et spcifie un compte minimum et maximum (boucle) ainsi quune condition de garde. La syntaxe de la boucle est la suivante :
loop[ '('<minInt> [ ',' <maxInt> ] ')' ]
La condition de garde est place entre crochets sur la ligne de vie. La boucle est rpte au moins minInt fois avant quune ventuelle condition de garde boolenne ne soit teste. Tant que la condition est vraie, la
118
boucle continue, au plus maxInt fois. Cette syntaxe peut tre remplace par une indication intelligible comme sur la figure 7.15. Oprateur par
Figure 7.16: Microwave est un exemple dobjet effectuant deux tches en parallle. Un fragments combin de type parallel, ou par, possde au moins deux sous-fragments excuts simultanment (cf. figure 7.16). La concurrence est logique et nest pas ncessairement physique : les excutions concurrentes peuvent sentrelacer sur un mme chemin dexcution dans la pratique. Oprateur strict
Figure 7.17: Procdures de dcollage dun avion dans lordre. Un fragments combin de type strict sequencing, ou strict, possde au moins deux sous-fragments. Ceux-ci sexcutent selon leur ordre dapparition au sein du fragment combin. Ce fragment combin est utile surtout lorsque deux parties dun diagramme nont pas de ligne de vie en commun (cf. figure 7.17).
Il est possible de faire rfrence une interaction (on appelle cela une utilisation dinteraction) dans la dfinition dune autre interaction. Comme pour toute rfrence modulaire, cela permet la rutilisation dune dfinition dans de nombreux contextes diffrents. Lorsquune utilisation dinteraction sexcute, elle produit le mme effet que lexcution dune interaction rfrence avec la substitution des arguments fournie dans le cadre de lutilisation de linteraction. Lutilisation de linteraction doit couvrir toutes les lignes de vie qui apparaissent dans linteraction rfrence. Linteraction rfrence ne peut ajouter des lignes de vie que si elles ont lieu en son sein. Graphiquement, une utilisation apparat dans un diagramme de squence sous forme de rectangle avec le tag ref (pour rfrence). On place dans le rectangle le nom de linteraction rfrence (cf. figure 7.17). La syntaxe complte pour spcifier linteraction rutiliser est la suivante :
[ <nomAttributValeurRetour> '=' ] <nomInteraction> [ '(' [<arguments>] ')' ][ ':' <valeurRetour> ]
Chapitre 8 Diagrammes de composants (Component diagram) & Diagrammes dploiement (Deployment diagram)
8.1 Introduction
Les diagrammes de composants et les diagrammes de dploiement sont les deux derniers types de vues statiques en UML. Les premiers dcrivent le systme modlis sous forme de composants rutilisables et mettent en vidence leurs relations de dpendance. Les seconds se rapprochent encore plus de la ralit physique, puisquils identifient les lments matriels (PC, Modem, Station de travail, Serveur, etc.), leur disposition physique (connexions) et la disposition des excutables (reprsents par des composants) sur ces lments matriels.
de
assimilable une approche objet, non pas au niveau du code, mais au niveau de larchitecture gnrale du logiciel.
Figure 8.1: Reprsentation dun composant et de ses interfaces requises ou offertes sous la forme dun classeur structur strotyp component. Au lieu ou en plus du mot cl, on peut faire figurer une icne de composant (petit rectangle quip de deux rectangles plus petits dpassant sur son ct gauche) dans langle suprieur droit (comme sur la figure de droite).
Figure 8.2: Reprsentation dun composant accompagne de la reprsentation explicite de ses interfaces requise et offerte.
Figure 8.3: Reprsentation classique dun composant et de ses interfaces requise (reprsent par un demicercle) et offerte (reprsente par un cercle). Cette reprsentation est souvent utilise dans les diagrammes de composants (cf. figure 8.5). Sur la figure du bas, le strotype component est rendu inutile par la reprsentation mme du composant.
Figure 8.4: Reprsentation dun composant et de ses interfaces requise et offerte avec la reprsentation explicite de leur port correspondant.
121
Figure 8.5: Reprsentation de limplmentation dun composant complexe contenant des sous-composants.
122
Figure 8.6: Exemple de diagramme montrant les dpendances entre composants. La relation de dpendance est utilise dans les diagrammes de composants pour indiquer quun lment de limplmentation dun composant fait appel aux services offerts par les lments dimplmentation dun autre composant (cf. figure 8.6). Lorsquun composant utilise linterface dun autre composant, on peut utiliser la reprsentation de la figure 8.3 en imbriquant le demi-cercle dune interface requise dans le cercle de linterface offerte correspondante (cf. figure 8.5).
Figure 8.7: Reprsentation dun n ud ( gauche) et dune instance de n ud ( droite). Chaque ressource est matrialise par un n ud reprsent par un cube comportant un nom (cf. figure 8.7). Un n ud est un classeur et peut possder des attributs (quantit de mmoire, vitesse du processeur, ).
Figure 8.8: Deux possibilits pour reprsenter laffectation dun composant un n ud.
123
Pour montrer quun composant est affect un n ud, il faut soit placer le composant dans le n ud, soit les relier par une relation de dpendance strotype support oriente du composant vers le n ud (cf. figure 8.8).
Figure 8.9: Reprsentation du dploiement de deux artefacts dans un n ud. La dpendance entre les deux artefacts est galement reprsente.
Figure 8.10: Reprsentation du dploiement de deux artefacts dans un n ud utilisant la relation de dpendance strotype deploy.
Un artefact correspond un lment concret existant dans le monde rel (document, excutable, fichier, tables de bases de donnes, script, ). Il se reprsente comme un classeur par un rectangle contenant le mot-cl artifact suivi du nom de lartefact (cf. figures 8.9 et 8.9). Limplmentation des modles (classes, ) se fait sous la forme de jeu dartefacts. On dit quun artefact peut manifester, cest--dire rsulter et implmenter, un ensemble dlments de modle. On appelle manifestation la relation entre un lment de modle et lartefact qui limplmente. Graphiquement, une manifestation se reprsente par une relation de dpendance strotype manifest (cf. figure 8.11). Une instance dun artefact se dploie sur une instance de n ud. Graphiquement, on utilise une relation de dpendance (flche en trait pointill) strotype deploy pointant vers le n ud en question (cf. figure 8.10). Lartefact peut aussi tre inclus directement dans le cube reprsentant le noeud (cf. figure 8.9). En toute rigueur, seul des artefacts doivent tre dploys sur des n uds. Un composant doit donc tre manifest par un artefact qui, lui-mme, peut tre dploy sur un n ud.
Figure 8.12: Exemple de diagramme de dploiement illustrant la communication entre plusieurs n uds. Dans un diagramme de dploiement, les associations entre n uds sont des chemins de communication qui permettent lchange dinformations (cf. figure 8.12).
125
Figure 9.1: Quelle mthode pour passer de lexpression des besoins au code de lapplication ? La problmatique que pose la mise en uvre dUML est simple : comment passer de lexpression des besoins au code de lapplication ? Cette problmatique est parfaitement illustre par la figure 9.1. Comme nous lavons dj dit, maintes reprises, UML nest quun langage de modlisation, ce nest pas une mthode. En effet, UML ne propose pas une dmarche de modlisation explicitant et encadrant toutes les tapes dun projet, de la comprhension des besoins la production du code de lapplication. Une mthode se doit de dfinir une squence dtapes, partiellement ordonnes, dont lobjectif est de produire un logiciel de qualit qui rpond aux besoins des utilisateurs dans des temps et des cots prvisibles. Bien quUML ne soit pas une mthode, ses auteurs prcisent nanmoins quune mthode base sur lutilisation UML doit tre : Pilote par les cas dutilisation : La principale qualit dun logiciel tant son utilit, cest--dire son adquation avec les besoins des utilisateurs, toutes les tapes, de la spcification des besoins la maintenance, doivent tre guides par les cas dutilisation qui modlisent justement les besoins des utilisateurs. Centre sur larchitecture : Larchitecture est conue pour satisfaire les besoins exprims dans les cas dutilisation, mais aussi pour prendre en compte les volutions futures et les contraintes de ralisation. La mise en place dune architecture adapte conditionne le succs dun dveloppement. Il est important de la stabiliser le plus tt possible. Itrative et incrmentale : Lensemble du problme est dcompos en petites itrations, dfinies partir des cas dutilisation et de ltude des risques. Les risques majeurs et les cas dutilisation les plus importants sont traits en priorit. Le dveloppement procde par des itrations qui conduisent des livraisons incrmentales du systme. Nous avons dj prsent le modle de cycle de vie par incrment dans la section 1.2.3.
126
conduite par les cas dutilisation, comme UP, mais bien plus simple ; relativement lgre et restreinte, comme XP, mais sans ngliger les activits de modlisation en analyse et conception ; fonde sur lutilisation dun sous-ensemble ncessaire et suffisant du langage UML (modliser 80% des problmes en utilisant 20% dUML).
Dans tous les cas, il faut garder lesprit quune mthode nest pas une formule magique. Le fait de produire des diagrammes UML selon un ordre tabli nest en aucun cas une garantie de russite. Une mthode ne sert qu canaliser et ordonner les tapes de la modlisation. La valeur nest pas dans la mthode mais dans les personnes qui la mettent en uvre.
Figure 9.2: Les besoins sont modliss par un diagramme de cas dutilisation. Les cas dutilisation sont utiliss tout au long du projet. Dans un premier temps, on les cre pour identifier et modliser les besoins des utilisateurs (figure 9.2). Ces besoins sont dtermins partir des informations recueillies lors des rencontres entre informaticiens et utilisateurs. Il faut imprativement proscrire toute considration de ralisation lors de cette tape. Durant cette tape, vous devrez dterminer les limites du systme, identifier les acteurs et recenser les cas dutilisation (cf. section 2.5). Si lapplication est complexe, vous pourrez organiser les cas dutilisation en paquetages.
127
Dans le cadre dune approche itrative et incrmentale, il faut affecter un degr dimportance et un coefficient de risque chacun des cas dutilisation pour dfinir lordre des incrments raliser. Les interactions entre les acteurs et le systme (au sein des cas dutilisation) seront explicites sous forme textuelle et sous forme graphique au moyen de diagrammes de squence (cf. section 9.2.2). Les utilisateurs ont souvent beaucoup de difficults exprimer clairement et prcisment ce quils attendent du systme. Lobjectif de cette tape et des deux suivantes (section 9.2.2 et 9.2.3) est justement de les aider formuler et formaliser ces besoins.
Figure 9.3: Les diagrammes de squence systme illustrent la description textuelle des cas dutilisation. Dans cette tape, on cherche dtailler la description des besoins par la description textuelle des cas dutilisation (cf. section 2.5.3) et la production de diagrammes de squence systme illustrant cette description textuelle (figure 9.3). Cette tape amne souvent mettre jour le diagramme de cas dutilisation puisque nous somme toujours dans la spcification des besoins. Les scnarii de la description textuelle des cas dutilisation peuvent tre vus comme des instances de cas dutilisation et sont illustrs par des diagrammes de squence systme. Il faut, au minimum, reprsenter le scnario nominal de chacun des cas dutilisation par un diagramme de squence qui rend compte de linteraction entre lacteur, ou les acteurs, et le systme. Le systme est ici considr comme un tout et est reprsent par une ligne de vie. Chaque acteur est galement associ une ligne de vie. Lorsque les scnarii alternatifs dun cas dutilisation sont nombreux et importants, lutilisation dun diagramme dtats-transitions ou dactivits peut savrer prfrable une multitude de diagrammes de squence.
128
Figure 9.4: Une maquette dIHM facilite les discussions avec les futurs utilisateurs. Une maquette dIHM (Interface Homme-Machine) est un produit jetable permettant aux utilisateurs davoir une vue concrte mais non dfinitive de la future interface de lapplication (figure 9.4). La maquette peut trs bien consister en un ensemble de dessins produits par un logiciel de prsentation ou de dessin. Par la suite, la maquette pourra intgrer des fonctionnalits de navigation permettant lutilisateur de tester lenchanement des crans ou des menus, mme si les fonctionnalits restent fictives. La maquette doit tre dveloppe rapidement afin de provoquer des retours de la part des utilisateurs.
129
Figure 9.5: La phase danalyse du domaine permet dlaborer la premire version du diagramme de classes. La modlisation des besoins par des cas dutilisation sapparente une analyse fonctionnelle classique. Llaboration du modle des classes du domaine permet doprer une transition vers une vritable modlisation objet. Lanalyse du domaine est une tape totalement dissocie de lanalyse des besoins (sections 9.2.1, 9.2.2 et 9.2.3). Elle peut tre mene avant, en parallle ou aprs cette dernire. La phase danalyse du domaine permet dlaborer la premire version du diagramme de classes (figure 9.5) appele modle du domaine. Ce modle doit dfinir les classes qui modlisent les entits ou concepts prsents dans le domaine (on utilise aussi le terme de mtier) de lapplication. Il sagit donc de produire un
130
modle des objets du monde rel dans un domaine donn. Ces entits ou concepts peuvent tre identifis directement partir de la connaissance du domaine ou par des entretiens avec des experts du domaine. Il faut absolument utiliser le vocabulaire du mtier pour nommer les classes et leurs attributs. Les classes du modle du domaine ne doivent pas contenir dopration, mais seulement des attributs. Les tapes suivre pour tablir ce diagramme sont (cf. section 3.6.1) :
y y y y
identifier les entits ou concepts du domaine ; identifier et ajouter les associations et les attributs ; organiser et simplifier le modle en liminant les classes redondantes et en utilisant lhritage ; le cas chant, structurer les classes en paquetage selon les principes de cohrence et dindpendance.
Lerreur la plus courante lors de la cration dun modle du domaine consiste modliser un concept par un attribut alors que ce dernier devait tre modlis par une classe. Si la seule chose que recouvre un concept est sa valeur, il sagit simplement dun attribut. Par contre, si un concept recouvre un ensemble dinformations, alors il sagit plutt dune classe qui possde elle-mme plusieurs attributs.
131
Figure 9.6: Le diagramme de classes participantes effectue la jonction entre les cas dutilisation, le modle du domaine et les diagrammes de conception logicielle. Le diagramme de classes participantes est particulirement important puisquil effectue la jonction entre, dune part, les cas dutilisation (section 9.2.1), le modle du domaine (section 9.3.1) et la maquette (section 9.2.3), et dautre part, les diagrammes de conception logicielle que sont les diagrammes dinteraction (section 9.4.1) et le diagramme de classes de conception (section 9.4.2). Les diagrammes de conception logicielle napparaissent pas encore sur la figure 9.6. Il nest pas souhaitable que les utilisateurs interagissent directement avec les instances des classes du domaine par le biais de linterface graphique. En effet, le modle du domaine doit tre indpendant des utilisateurs et de linterface graphique. De mme, linterface graphique du logiciel doit pouvoir voluer sans rpercussion sur le c ur de lapplication. Cest le principe fondamental du dcoupage en couches dune application. Ainsi, le diagramme de classes participantes modlise trois types de classes danalyse, les dialogues, les contrles et les entits ainsi que leurs relations.
132
Les classes de dialogues Les classes qui permettent les interactions entre lIHM et les utilisateurs sont qualifies de dialogues. Ces classes sont directement issues de lanalyse de la maquette prsente section 9.2.3. Il y a au moins un dialogue pour chaque association entre un acteur et un cas dutilisation du diagramme de cas dutilisation de la section 9.2.1. En gnral, les dialogues vivent seulement le temps du droulemet du cas dutilisation concern. Les classes de contrles Les classes qui modlisent la cinmatique de lapplication sont appeles contrles. Elles font la jonction entre les dialogues et les classes mtier en permettant au diffrentes vues de lapplication de manipuler des informations dtenues par un ou plusieurs objets mtier. Elles contiennent les rgles applicatives et les isolent la fois des dialogues et des entits. Les classes entits Les classes mtier, qui proviennent directement du modle du domaine (cf. section 9.3.1), sont qualifies dentits. Ces classes sont gnralement persistantes, cest--dire quelles survivent lexcution dun cas dutilisation particulier et quelles permettent des donnes et des relations dtre stockes dans des fichiers ou des bases de donnes. Lors de limplmentation, ces classes peuvent ne pas se concrtiser par des classes mais par des relations, au sens des bases de donnes relationnelles (cf. section 3.6.3). Lors de llaboration du diagramme de classes participantes, il faut veiller au respect des rgles suivantes :
y y
y y
Les entits, qui sont issues du modle du domaine, ne comportent que des attributs (cf. section 9.3.1). Les entits ne peuvent tre en association quavec dautres entits ou avec des contrles, mais, dans ce dernier cas, avec une contrainte de navigabilit interdisant de traverser une association dune entit vers un contrle. Les contrles ne comportent que des oprations. Ils implmentent la logique applicative (i.e. les fonctionnalits de lapplication), et peuvent correspondre des rgles transverses plusieurs entits. Chaque contrle est gnralement associ un cas dutilisation, et vice versa. Mais rien nempche de dcomposer un cas dutilisation complexe en plusieurs contrles. Les contrles peuvent tre associs tous les types de classes, y compris dautres contrles. Dans le cas dune association entre un dialogue et un contrle, une contrainte de navigabilit doit interdire de traverser lassociation du contrle vers le dialogue. Les dialogues comportent des attributs et des oprations. Les attributs reprsentent des informations ou des paramtres saisis par lutilisateur ou des rsultats dactions. Les oprations ralisent (gnralement par dlgation aux contrles) les actions que lutilisateur demande par le biais de lIHM. Les dialogues peuvent tre en association avec des contrles ou dautres dialoques, mais pas directement avec des entits. Il est galement possible dajouter les acteurs sur le diagramme de classes participantes en respectant la rgle suivante : un acteur ne peut tre li qu un dialogue.
Certaines classes possdent un comportement dynamique complexe. Ces classes auront intrt tre dtailles par des diagrammes dtats-transitions. Lattribution des bonnes responsabilits, dgage dans la section 9.2.2, aux bonnes classes est lun des problmes les plus dlicats de la conception oriente objet. Ce problme sera affront en phase de conception lors de llaboration des diagrammes dinteraction (section 9.4.1) et du diagramme de classes de conception (section 9.4.2). Lors de la phase dlaboration du diagramme de classes participantes, le chef de projet a la possibilit de dcouper le travail de son quipe danalystes par cas dutilisation. Lanalyse et limplmentation des
133
fonctionnalits dgages par les cas dutilisation dfinissent alors les itrations raliser. Lordonnancement des itrations tant dfini par le degr dimportance et le coefficient de risque affect chacun des cas dutilisation dans la section 9.2.1.
Figure 9.7: Les diagrammes dactivits de navigation reprsentent graphiquement lactivit de navigation dans lIHM. Les IHM modernes facilitent la communication entre lapplication et lutilisateur en offrant toute une gamme de moyens daction et de visualisation comme des menus droulants ou contextuels, des palettes doutils, des botes de dialogues, des fentres de visualisation, etc. Cette combinaison possible doptions daffichage, dinteraction et de navigation aboutis aujourdhui des interfaces de plus en plus riches et puissantes. UML offre la possibilit de reprsenter graphiquement cette activit de navigation dans linterface en produisant des diagrammes dynamiques. On appelle ces diagrammes des diagrammes de navigation. Le concepteur le choix dopter pour cette modlisation entre des diagrammes dtats-transitions et des diagrammes dactivits. Les diagrammes dactivits constituent peut-tre un choix plus souple et plus judicieux. Les diagrammes dactivits de navigation sont relier aux classes de dialogue du diagramme de classes participantes. Les diffrentes activits du diagramme de navigation peuvent tre strotypes en fonction de leur nature : fentre , menu , menu contextuel , dialogue , etc.
134
Figure 9.8: Les diagrammes dinteraction permettent dattribuer prcisment les responsabilits de comportement aux classes danalyse. Maintenant, il faut attribuer prcisment les responsabilits de comportement, dgage par le diagrammes de squence systme dans la section 9.2.2, aux classes danalyse du diagramme de classes participantes labor dans la section 9.3.2. Les rsultats de cette rflexion sont prsents sous la forme de diagrammes dinteraction UML (figure 9.8). Inversement, llaboration de ces diagrammes facilite grandement la rflexion. Paralllement, une premire bauche de la vue statique de conception, cest--dire du diagramme de classes de conception, est construite et complte. Durant cette phase, lbauche du diagramme de classes de
135
conception reste indpendante des choix technologiques qui seront faits ultrieurement (dans la section 9.4.2). Pour chaque service ou fonction, il faut dcider quelle est la classe qui va le contenir. Les diagrammes dinteractions (i.e de squence ou de communication) sont particulirement utiles au concepteur pour reprsenter graphiquement ces dcisions dallocations des responsabilits. Chaque diagramme va reprsenter un ensemble dobjets de classes diffrentes collaborant dans le cadre dun scnario dexcution du systme. Dans les diagrammes dinteraction, les objets communiquent en senvoyant des messages qui invoquent des oprations sur les objets rcepteurs. Il est ainsi possible de suivre visuellement les interactions dynamiques entre objets, et les traitements raliss par chacun deux. Avec un outil de modlisation UML (comme Rational Rose ou PowerAMC), la spcification de lenvoi dun message entre deux objets cre effectivement une opration publique sur la classe de lobjet cible. Ce type doutil permet rellement de mettre en uvre lallocation des responsabilits partir des diagrammes dinteraction.
Figure 9.9: Le systme des diagrammes de squences systme, vu comme une bote noire, est remplac par un ensemble dobjets en collaboration. Par rapport aux diagrammes de squences systme de la section 9.2.2, nous remplaons ici le systme, vu comme une bote noire, par un ensemble dobjets en collaboration (cf. figure 9.9). Ces objets sont des instances des trois types de classes danalyse du diagramme de classes participantes, savoir des dialogues, des contrles et des entits. Les diagrammes de squences labors dans cette section doivent donc toujours respecter les rgles dictes dans la section 9.3.2. Ces rgles doivent cependant tre transposes car, pour que deux objets puis interagir directement, il faut que :
136
y y
les classes dont ils sont issus soient en association dans le diagramme de classes participantes1 ; linteraction respecte la navigabilit de lassociation en question.
Figure 9.10: Chane complte de la dmarche de modlisation du besoin jusquau code. Lobjectif de cette tape est de produire le diagramme de classes qui servira pour limplmentation (figure 9.10). Une premire bauche du diagramme de classes de conception a dj t labore en parallle du diagramme dinteraction (section 9.4.1). Il faut maintenant le complter en prcisant les oprations prives des diffrentes classes. Il faut prendre en comptes les choix techniques, comme le choix du langage de programmation, le choix des diffrentes librairies utilises (notamment pour limplmentation de linterface graphique), etc. Pour une classe, le couplage est la mesure de la quantit dautre classes auxquelles elle est connecte par des associations, des relations de dpendances, etc. Durant toute llaboration du diagramme de classes de conception, il faut veiller conserver un couplage faible pour obtenir une application plus volutive et plus
137
facile maintenir. Lutilisation des design patterns est fortement conseille lors de llaboration du diagramme de classes de conception. Pour le passage limplmentation, referez vous la section 3.6. Parfois, les classes du type entits ont intrt tre implmentes dans une base de donnes relationnelle (cf. section 3.6.3). 1 Si elles ne sont pas en association, il doit au moins exister une relation de dpendance comme illustre par la figure 3.21 de la section 3.3.10.
Bibliographie
[1] Wikipdia, encyclopdie librement distribuable. Internet. http://fr.wikipedia.org/ wiki/ Accueil. [2] Mamoun Alissali. Support de cours introduction au gnie logiciel. Internet, 1998. http:// wwwic2.univ-lemans.fr/ ~alissali/ Enseignement/ Polys/ GL/ gl.html. [3] Franck Barbier. UML 2 et MDE. Dunod, 2005. [4] Donald Bell. Umls sequence diagram. Internet, 2004. http://www-128.ibm.com/ developerworks/ rational/ library/ 3101.html#notes. [5] Grady Booch, James Rumbaugh, and Ivar Jacobson. Le guide de lutilisateur UML. Eyrolles, 2003. [6] Eric Cariou. Support de cours "le langage de contraintes ocl". Internet, novembre 2003. http:// www.univ-pau.fr/ ~ecariou/ cours/ mde/ cours-ocl.pdf. [7] Benot Charroux, Aomar Osmani, and Yann Thierry-Mieg. UML2. Pearson Education France, 2005. [8] Laurent Debrauwer and Fien Van der Heyd. UML 2 Initiation, exemples et exercices corrigs. eni, 2005. [9] Developpez.com. Club http://www.developpez.com/. [10] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design patterns: elements of reusable object-oriented sofware. Addison-Wesley, 1995. [11] Erik Gollot. Les cas dutilisation. Internet, 2004. http:// ego.developpez.com/ uml/ tutoriel/ casUtilisation/. [12] Pierre Grard. Uml. Internet, 2007. http:// www-lipn.univ-paris13.fr/ ~gerard/ fr_ens_uml.html. [13] Craig Larman. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process. Printice Hall, 1997. [14] Hugues Malgouyres, Jean-Pierre Seuma-Vidal, and Gilles Motet. Rgles de cohrence uml 2.0 (version 1.1). Internet, 2005. http:// www.lesia.insa-toulouse.fr/ UML/ CoherenceUML_v1_1_100605.pdf.
138
dentraide
des
dveloppeurs
francophones.
Internet.
[15] Bernard Morand. Analyse et conception des systmes dinformation : Les diagrammes de unified modeling language (uml). Internet. http:// www.iutc3.unicaen.fr/ ~moranb/ cours/ acsi/ menucoo.htm. [16] Pierre-Alain Muller and Nathalie Gaertner. Modlisation objet avec UML. Eyrolles, 2000. [17] Object Management Group (OMG). Uml resource page. Internet. http://www.uml.org/. [18] Object Management Group (OMG). Unified modeling language: Superstructure. Internet, aot 2004. http://www.uml.org/. [19] Object Management http://www.uml.org/. [20] Tom Penders. Introduction UML. OEM, 2002. [21] Laurent Piechocki. Uml en franais. Internet. http://uml.free.fr/. [22] Dan Pilone and Neil Pitman. UML 2 en concentr. OReilly, 2006. [23] Pascal Roques. UML - Modliser un site e-commerce. Les cahiers du programmeur. Eyrolles, 2002. [24] Pascal Roques. UML2 - Modliser une application web. Les cahiers du programmeur. Eyrolles, 2006. [25] Pascal Roques. UML2 par la pratique (tude de cas et exercices corrigs). Eyrolles, 5 edition, 2006. [26] Pascal Roques and Franck Valle. UML en action. Eyrolles, 2 edition, 2003. [27] James Rumbaugh, Ivar Jacobson, and Grady Booch. UML 2.0 Guide de rfrence. CampusPress, 2004. [28] Michel Volle. De lInformatique (Savoir vivre avec lautomate). Economica, 2006.
Index y Acteur, 2.2.1 o identification, 2.5.1 o principal, 2.3.1 o reprsentation graphique, 2.2.1, 2.2.1 o secondaire, 2.3.1 Action o diagramme dactivits, 6.2.1 Activit o diagramme dactivits, 6, 6.2.2, 6.7 o groupe, 6.2.3 o n ud, 6.2.4 Agrgation, 1.3.4 o composite , voir relation de composition o implmentation en Java, 3.6.2, 3.6.2 Approche o fonctionnelle, 1.3.1 o fonctionnelle vs. objet, 1.3.3 o objet (concepts), 1.3.4 y Historique o modlisation objet, 1.4.2 o programmation par objets, 1.3.5
Group
(OMG).
Object
constraint
language.
Internet,
Mai
2006.
y y
Implmentation o en Java, 3.6.2, 3.6.2 agrgation, 3.6.2 association 1 vers N, 3.6.2 association bidirectionnelle 1 vers 1, 3.6.2 association bidirectionnelle 1 vers N, 3.6.2 association unidirectionnelle 1 vers 1, 3.6.2 association unidirectionnelle 1 vers N, 3.6.2 attribut, 3.6.2
139
y y
y y y
o oriente objet, 1.3.2 o structure, 1.3.1 Artefact (diagramme de dploiement), 8.3.3 Association o 1 vers 1 (implmentation en SQL), 3.6.3 o 1 vers N (implmentation en Java), 3.6.2 o 1 vers N (implmentation en SQL), 3.6.3 o bidirectionnelle 1 vers 1 (implm. en Java), 3.6.2 o bidirectionnelle 1 vers N (implm. en Java), 3.6.2 o quivalences, 3.3.7 o instance, 3.5.2 o modles quivalents, 3.3.7 o N vers N (implmentation en SQL), 3.6.3 o n-aire, 3.3.3, 3.3.7 o n-aire (modle quivalent), 3.3.7 o n-aire vs classe-association vs qualifie, 3.3.7 o notion et discussion, 3.3.1 o qualifie, 3.3.6, 3.3.7 o qualifie vs n-aire vs classe-association, 3.3.7 o unidirectionnelle 1 vers 1 (implm. en Java), 3.6.2 o unidirectionnelle 1 vers N (implm. en Java), 3.6.2 Attribut, 3.2.6, 3.3.1 o drivs, 3.2.6 o de classe, 3.2.6 o de la classe, 3.2.6 o implmentation en Java, 3.6.2 o implmentation en SQL, 3.6.3 o syntaxe, 3.2.6 Auto-association sur classe-association, 3.3.7 Automate tats finis, 5.1.2 Caractristique o dune classe, 3.2.2 o terminaison dassociation, 3.2.2 Cas dutilisation, 2.2.2 o description textuelle, 2.5.3 o diagramme de cas dutilisation, 2, 2.5.4 o interne, 2.3.1 o recensement, 2.5.2 o reprsentation graphique, 2.2.2, 2.2.2 o Use case Realization, 2.5.4 Classe, 1.3.4, 3.2, 3.2.8 o abstraite, 3.2.7 o abstraite (implmentation en Java), 3.6.2 o active, 3.2.8 o attribut, 3.2.6 o attribut drivs, 3.2.6 o attribut de classe, 3.2.6 o attribut de la classe, 3.2.6 o caractristique, 3.2.2 o diagramme de classes, 3, 3.4 o encapsulation, 3.2.4 o implmentation en Java, 3.6.2 o implmentation en SQL, 3.6.3
y y
Instance o association, 3.5.2 o classe, 3.2.1, 3.5.2 o classe-association, 3.5.2 o notion, 3.2.1 o relation, 3.5.2 Interaction, 7.1.4 o diagramme dinteraction, 7, 7.3.4 Interface, 1.3.4, 3.2.4, 3.2.7, 3.4 o implmentation en Java, 3.6.2
classe, 3.6.2 classe abstraite, 3.6.2 composition, 3.6.2 hritage simple, 3.6.2 interface, 3.6.2 opration, 3.6.2 ralisation dune interface, 3.6.2 en SQL, 3.6.3, 3.6.3 association 1 vers 1, 3.6.3 association 1 vers N, 3.6.3 association N vers N, 3.6.3 attribut, 3.6.3 classe, 3.6.3 classe-association N vers N, 3.6.3 gnralisation, 3.6.3 hritage, 3.6.3 opration, 3.6.3 relation dhritage, 3.6.3 relation de gnralisation, 3.6.3
Ligne de vie, 7.1.4 o diagramme de communication, 7.2.1 o diagramme de squence, 7.3.1 Logiciel, 1.1.2 o cycle de vie, 1.2.2 o qualit, 1.1.4
y y y
Mthode, 3.2.2, 3.2.7 o abstraite, 3.2.7 o de classe, 3.2.7 o de la classe, 3.2.7 o syntaxe, 3.2.7 Matre d uvre, 1.2.1 Matre douvrage, 1.2.1 Message o asynchrone, 7.3.2 o de cration, 7.3.2 o de destruction, 7.3.2 o diagramme de communication, 7.2.3 o diagramme de squence, 7.3.2, 7.3.2 o vnement, 7.3.2 o perdu, 7.3.2 o porte, 7.3.2 o synchrone, 7.3.2 o trouv, 7.3.2
140
y y y
o instance, 3.2.1, 3.5.2 o interface, 3.2.4 o mthode, 3.2.2, 3.2.7 o mthode de classe, 3.2.7 o mthode de la classe, 3.2.7 o notion, 3.2.1 o opration, 3.2.2 o proprits, 3.2.2 o proprits structurelles, 3.2.2 o reprsentation graphique, 3.2.3 o syntaxe du nom, 3.2.5 o visibilit, 3.2.4 Classe-association, 3.3.7, 3.3.7 o auto-association, 3.3.7 o instance, 3.5.2 o liens multiples, 3.3.7 o modle quivalent, 3.3.7 o N vers N (implmentation en SQL), 3.6.3 o pour plusieurs associations, 3.3.7 o reprsentation graphique, 3.3.7 o vs association n-aire vs association qualifie, 3.3.7 Classeur, 2.4.3 o interface, 3.4 o structur, 7.1.2 Collaboration, 7.1.3 Communication o diagramme de communication, 7.2, 7.2.3 Composant o diagramme de composant, 8.2.2 o diagramme de composants, 8.2, 8.2.4 Concurrence o dans un diagramme dtats-transitions, 5.6.5 Contrainte, 4.1.2 o prdfinie, 4.1.3 o reprsentation, 4.1.3 o typologie des contraintes OCL, 4.3, 4.3.7 Cycle de vie o en cascade, 1.2.3 o en spirale, 1.2.3 o en V, 1.2.3 o logiciel, 1.2.2 o modle par incrment, 1.2.3
y y
Mise en uvre dUML, 9, 9.4.2 Modle, 1.2.1 o cycle de vie en cascade, 1.2.3 o cycle de vie en spirale, 1.2.3 o cycle de vie en V, 1.2.3 o cycles de vie, 1.2.3 o incrment, 1.2.3 o Pourquoi modliser ?, 1.2.1 o Qui doit modliser ?, 1.2.1 Multiplicit o relation dassociation, 2.3.1
y y
N ud o daction, 6.3.1 o dactivit, 6.2.4 o dactivit structure, 6.3.2 o dobjet, 6.5 o dunion, 6.4.4 o de bifurcation, 6.4.4 o de contrle, 6.4 o de dbranchement, 6.4.4 o de dcision, 6.4.3 o de fin dactivit, 6.4.2 o de fin de flot, 6.4.2 o de fusion, 6.4.3 o de jointure, 6.4.4 o de stockage des donnes, 6.5.6 o diagramme de dploiement, 8.3.2 o excutable, 6.3 o final, 6.4.2 o initial, 6.4.1 o tampon central, 6.5.5 Navigabilit, 3.3.5 o reprsentation graphique, 3.3.5 Note, 2.4.5 o reprsentation graphique, 2.4.5
y y
y y y y Dploiement o diagramme de dploiement, 8.3, 8.3.4 Dpendance o classe, 3.3.10 Diagramme o dtats-transitions, 5, 5.6.5 o dactivits, 6, 6.7 o dinteraction, 7, 7.3.4 o dobjets, 3.5, 3.5.3 o de cas dutilisation, 2, 2.5.4 o de classes, 3, 3.4 o de communication, 7.2, 7.2.3
Object constraint langage, 4, 4.7 Objet o diagramme dobjets, 3.5, 3.5.3 o qualifi, 3.3.6 o reprsentation graphique, 3.5.2 OCL, 4, 4.7 o -(), 4.6.2 o =(), 4.6.2 o ->, 4.6.1 o ., 4.6.1 o ::, 4.6.1 o accs aux attributs (self), 4.5.1 o accs aux caractristiques, 4.5, 4.5.8 o accs aux objets, 4.5, 4.5.8 o accs aux oprations (self), 4.5.1 o accder une caractristique (oclAsType()), 4.5.6 o allInstances, 4.5.8
redfinie
141
o de composants, 8.2, 8.2.4 o de dploiement, 8.3, 8.3.4 o de squence, 7.3, 7.3.4 Diagramme dtats-transitions, 5, 5.6.5 o concurrence, 5.6.5 o tat, 5.2 o tat composite, 5.6, 5.6.5 o tat final, 5.2.2 o tat historique, 5.6.3 o tat historique profond, 5.6.3 o tat initial, 5.2.2 o vnement, 5.3, 5.3.5 o vnement dappel, 5.3.3 o vnement de changement, 5.3.4 o vnement de type signal, 5.3.2 o vnement temporel, 5.3.5 o point de choix, 5.5, 5.5.2 o point de dcision, 5.5.2 o point de jonction, 5.5.1 o points de connexion, 5.6.4 o transition, 5.4, 5.4.6 o transition dachvement, 5.4.5 o transition externe, 5.4.4 o transition interne, 5.4.6 Diagramme dactivits, 6, 6.7 o action, 6.2.1 o activit, 6.2.2 o exceptions, 6.2.1, 6.7 o flot dobjet, 6.5.4 o groupe dactivits, 6.2.3 o n ud daction, 6.3.1 o n ud dactivit, 6.2.4 o n ud dactivit structure, 6.3.2 o n ud dobjet, 6.5 o n ud dunion, 6.4.4 o n ud de bifurcation, 6.4.4 o n ud de contrle, 6.4 o n ud de dbranchement, 6.4.4 o n ud de dcision, 6.4.3 o n ud de fin dactivit, 6.4.2 o n ud de fin de flot, 6.4.2 o n ud de fusion, 6.4.3 o n ud de jointure, 6.4.4 o n ud de stockage des donnes, 6.5.6 o n ud excutable, 6.3 o n ud final, 6.4.2 o n ud initial, 6.4.1 o n ud tampon central, 6.5.5 o partitions, 6.6 o pin dentre, 6.5.2 o pin de sortie, 6.5.2 o pin de valeur, 6.5.3 o transition, 6.2.5 Diagramme dinteraction, 7, 7.3.4 o interaction, 7.1.4 o ligne de vie, 7.1.4 Diagramme dobjets, 3.5, 3.5.3 o relation de dpendance dinstanciation, 3.5.3 o reprsentation graphique, 3.5.2 Diagramme de cas dutilisation, 2, 2.5.4
o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o
asBag(), 4.6.2 asOrderedSet(), 4.6.2 asSequence(), 4.6.2 body, 4.3.5 collect, 4.6.3 collections, 4.4.4 context, 4.3.2 contexte (context), 4.3.2 count(), 4.6.2 dfinition dattributs et de mthode (def et letin), 4.3.6 def, 4.3.6 est un langage typ, 4.4.3 excludes(), 4.6.2 excludesAll(), 4.6.2 excluding(), 4.6.2 exists, 4.6.3 forAll, 4.6.3 includes(), 4.6.2 includesAll(), 4.6.2 including(), 4.6.2 init, 4.3.7 initialisation (init), 4.3.7 intersection(), 4.6.2 inv, 4.3.3 invariants (inv), 4.3.3 isEmpty(), 4.6.2 let in, 4.3.6 navigation depuis une classe association, 4.5.5 navigation vers une classe association, 4.5.4 navigation via une association, 4.5.2 navigation via une association qualifie, 4.5.3 notEmpty(), 4.6.2 oclAsType(), 4.5.6, 4.5.7 oclInState(), 4.5.7 oclIsKindOf(), 4.5.7 oclIsNew(), 4.5.7 oclIsTypeOf(), 4.5.7 oprateurs prdfinis, 4.4.1 opration sur les classes, 4.5.8 oprations, 4.4, 4.4.4 oprations collect, 4.6.3 oprations exists, 4.6.3 oprations forAll, 4.6.3 oprations reject, 4.6.3 oprations select, 4.6.3 oprations prdfinies sur tous les objets, 4.5.7 oprations sur les lments dune collection, 4.6.3 oprations sur les collections, 4.6, 4.6.2, 4.6.4 oprations sur les ensembles, 4.6.2 post, 4.3.4 postconditions (post), 4.3.4 prcdence des oprateurs, 4.6.4 prconditions (pre), 4.3.4 pre, 4.3.4 product(), 4.6.2 rgles de prcdence des oprateurs, 4.6.4 rsultat dune mthode (body), 4.3.5 reject, 4.6.3 select, 4.6.3 self, 4.5.1, 4.6.1
142
acteur, 2.2.1 acteur principal, 2.3.1 acteur secondaire, 2.3.1 cas dutilisation, 2.2.2 cas dutilisation interne, 2.3.1 identifier les acteurs, 2.5.1 recenser les cas dutilisation, 2.5.2 relation dassociation, 2.3.1 relation dextension, 2.3.2 relation dinclusion, 2.3.2 relation de gnralisation, 2.3.2, 2.3.2, 2.3.3 o relation de spcialisation, 2.3.2, 2.3.2 o relations, 2.3, 2.3.3 o reprsentation graphique, 2.2.3 o Use case Realization, 2.5.4 Diagramme de classes, 3, 3.4 o auto-association sur classe-associations, 3.3.7 o classe, 3.2, 3.2.8 o classe association, 3.3.7, 3.3.7 o classe association (instance), 3.5.2 o classe association pour plusieurs associations, 3.3.7 o classe-association vs association n-aire vs association qualifie, 3.3.7 o laboration, 3.6.1 o interface, 3.4 o notion dassociation, 3.3.1 o possession dune terminaison dassociation, 3.3.2 o propritaire dune terminaison dassociation, 3.3.2 o relation dagrgation, 3.3.8 o relation dassociation, 3.3.3, 3.3.7 o relation dassociation binaire, 3.3.3 o relation dassociation n-aire, 3.3.3 o relation dassociation qualifie, 3.3.6 o relation dhritage, 3.3.9 o relation de composition, 3.3.8 o relation de dpendance, 3.3.10 o relation de gnralisation, 3.3.9 o terminaison dassociation, 3.3.2 Diagramme de communication, 7.2, 7.2.3 o connecteur, 7.2.2 o ligne de vie, 7.2.1 o messages, 7.2.3 Diagramme de composants, 8.2, 8.2.4 o composant, 8.2.2 o port, 8.2.3 Diagramme de dploiement, 8.3, 8.3.4 o artefact, 8.3.3 o n ud, 8.3.2 Diagramme de squence, 7.3, 7.3.4 o vnement, 7.3.2 o excution de mthode, 7.3.2 o excution simultane, 7.3.2 o fragment dinteraction combin, 7.3.3, 7.3.3 o ligne de vie, 7.3.1 o message, 7.3.2 o o o o o o o o o o o
o size(), 4.6.2 o sum(), 4.6.2 o types, 4.4, 4.4.4 o types du modle UML, 4.4.2 o types prdfinis, 4.4.1 o typologie des contraintes, 4.3, 4.3.7 o union(), 4.6.2 Oprateur o alt, 7.3.3 o loop, 7.3.3 o opt, 7.3.3 o par, 7.3.3 o strict, 7.3.3 Opration, 3.2.2 o implmentation en Java, 3.6.2 o implmentation en SQL, 3.6.3
y y y
y y y y y y y y
Paquetage, 2.4.1 o reprsentation graphique, 2.4.1 Partitions (diagramme dactivits), 6.6 Pin o dentre (diagramme dactivits), 6.5.2 o de sortie (diagramme dactivits), 6.5.2 o de valeur (diagramme dactivits), 6.5.3 Point de choix, 5.5, 5.5.2 o point de dcision, 5.5.2 o point de jonction, 5.5.1 Point de dcision, 5.5.2 Point de jonction, 5.5.1 Points de connexion, 5.6.4 Polymorphisme, 1.3.4 Port (diagramme de composants), 8.2.3 Porte, 7.3.2 Proprit (terminaison dassociation), 3.3.2 Proprits o dune classe, 3.2.2 o structurelles dune classe, 3.2.2
y y y y
Qualificatif, 3.3.6 Ralisation dune interface o implmentation en Java, 3.6.2 Relation o instance, 3.5.2 Relation dagrgation o classe, 3.3.8 o implmentation en Java, 3.6.2 o reprsentation graphique, 3.3.8 Relation dassociation o acteur cas dutilisation, 2.3.1 o binaire, 3.3.3 o cardinalit, 3.3.4 o classe, 3.3.3, 3.3.7 o implmentation en Java, 3.6.2, 3.6.2 o implmentation en SQL, 3.6.3, 3.6.3
143
o o o o o o o o o o o o o o o
message asynchrone, 7.3.2 message de cration, 7.3.2 message de destruction, 7.3.2 message perdu, 7.3.2 message synchrone, 7.3.2 message trouv, 7.3.2 objet actif, 7.3.2 oprateur alt, 7.3.3 oprateur loop, 7.3.3 oprateur opt, 7.3.3 oprateur par, 7.3.3 oprateur strict, 7.3.3 porte, 7.3.2 syntaxe des messages, 7.3.2 utilisation dinteraction, 7.3.4
y y y
y y
y y y
y y y y
Encapsulation, 1.3.4, 3.2.4 Espace de noms, 2.4.2 tat, 5.2 o composite, 5.6, 5.6.5 o final, 5.2.2 o historique, 5.6.3 o historique profond, 5.6.3 o initial, 5.2.2 tats-transition o diagramme dtats-transitions, 5, 5.6.5 tude du Standish Group, 1.1.2 Exceptions (diagramme dactivits), 6.2.1, 6.7 vnement, 5.3, 5.3.5 o dappel, 5.3.3 o de changement, 5.3.4 o de type signal, 5.3.2 o diagramme de squence, 7.3.2 o temporel, 5.3.5
y y
o multiplicit, 2.3.1, 3.3.4 o n-aire, 3.3.3 o navigabilit, 3.3.5 o qualificatif, 3.3.6 o reprsentation graphique, 2.3.1, 3.3.3, 3.3.3 Relation dassociation qualifie o classe, 3.3.6 Relation dextension o cas dutilisation, 2.3.2 Relation dhritage o classe, 3.3.9 o implmentation en SQL, 3.6.3 o reprsentation graphique, 3.3.9 Relation dinclusion o cas dutilisation, 2.3.2 Relation de composition o classe, 3.3.8 o implmentation en Java, 3.6.2 o reprsentation graphique, 3.3.8 Relation de dpendance o classe, 3.3.10 o reprsentation graphique, 2.3.2, 3.3.10 Relation de dpendance dinstanciation, 3.5.3 Relation de gnralisation o acteur, 2.3.3 o classe, 3.3.9 o diagramme de cas dutilisation, 2.3.2, 2.3.2 o implmentation en SQL, 3.6.3 o reprsentation graphique, 2.3.3, 3.3.9 Relation de spcialisation o acteur, 2.3.3 o cas dutilisation, 2.3.2, 2.3.2
y y
y y
Flot dobjet (diagramme dactivits), 6.5.4 Fragment dinteraction combin, 7.3.3, 7.3.3 o Oprateur alt, 7.3.3 o Oprateur loop, 7.3.3 o Oprateur opt, 7.3.3 o Oprateur par, 7.3.3 o Oprateur strict, 7.3.3
y y y
Squence o diagramme de squence, 7.3, 7.3.4 Spcialisation, 1.3.4 o acteur, 2.3.3 o cas dutilisation, 2.3.2, 2.3.2 Strotype, 2.4.4 Standish Group (tude du), 1.1.2 Terminaison dassociation, 3.2.2, 3.3.1, 3.3.2 o possession, 3.3.2 o proprit, 3.3.2 o propritaire, 3.3.2 Transition, 5.4, 5.4.6 o condition de garde, 5.4.2 o dachvement, 5.4.5 o diagramme dactivits, 6.2.5 o effet, 5.4.3 o externe, 5.4.4 o interne, 5.4.6 Typologie des contraintes OCL, 4.3, 4.3.7 Utilisation dinteraction, 7.3.4
y Gnralisation, 1.3.4 o cas dutilisation, 2.3.2, 2.3.2 o classe, 3.3.9 o implmentation en SQL, 3.6.3 Gnie logiciel, 1.1, 1.1.3 Gnie logiciel (crise), 1.1.3 Groupe dactivits (diagramme dactivits), 6.2.3 Hritage, 1.3.4
y y y y
y y
144
o o o
Visibilit, 3.2.4
UML 2 LAURENT AUDIBERT La version finalise, largement enrichie et corrige de cette premire bauche de cours est parue, dans la collection Info+ chez les ditions Ellipses, sous le titre UML 2 - de l'apprentissage la pratique (cours et exercices) (FNAC, amazon.fr)
Ce cours a dj t consult 2 710 373 fois. Ce document a t traduit de LATEX par HEVEA
145