Page 1 UML2 pour les développeurs 21:07 Xavier Blanc Maître de conférences à l’Université Pierre et Marie Curie (Paris 6), Xavier Blanc est responsable de l’enseignement des techniques de modélisation en 3e année de licence et en master d’informatique. Ses recherches portent depuis 1998 sur l’ingénierie guidée par les modèles et il est le représentant du LIP6 (Laboratoire d’informatique de l’Université Paris 6) à l’OMG. Il est également auteur de MDA en action, paru chez le même éditeur. Isabelle Mounier Maître de conférences à l’Université Pierre et Marie Curie, Isabelle Mounier enseigne principalement les techniques de développement d’applications en licence d’informatique. Ses activités de recherche ont d’abord porté sur la vérification de propriétés temporelles de systèmes informatiques modélisés par des réseaux de Petri et elle s’intéresse aujourd’hui aux aspects formels des langages de modélisation tels qu’UML. Un cours d’initiation à UML conçu pour les développeurs et les étudiants en informatique La plupart des livres sur UML s’adressent avant tout aux concepteurs et architectes logiciels, selon une démarche « tout-modèle » dans laquelle la production de code est traitée comme une activité subalterne. Cette approche suscite évidemment des réticences chez les développeurs et déconcerte les étudiants, dont la formation reste axée principalement sur la programmation et qui mesurent mal les enjeux du formalisme UML. UML 2 pour les développeurs prend le contre-pied de ces approches classiques. L’ouvrage montre comment articuler harmonieusement modélisation et programmation, en insistant sur les gains de productivité que permettent ces allers-retours entre les modèles UML et le code. Chaque notion UML importante est introduite par un exemple et chaque chapitre se clôt par une série d’exercices corrigés (90 au total), qui permettront au lecteur de tester ses connaissances. Pour illustrer concrètement les relations entre code et modèles, les auteurs font le choix du langage Java, les principes présentés étant naturellement transposables à d’autres langages. Sur le site www.editions-eyrolles.com • Dialoguez avec les auteurs • Téléchargez les modèles et le code source des exemples du livre 782212 120295 Pourquoi modéliser • Diagrammes de classes • Reverse Engineering • Rétroconception et patrons de conception (design patterns) • Génération de code • Diagrammes de séquence • Diagrammes de séquence de test • Plates-formes d’exécution • Diagrammes de cas d’utilisation • Développement avec UML • Corrigés des exercices. 9 Au sommaire 16,90 € Xavier Blanc Isabelle Mounier avec la contribution de Cédric Besse UML2 UML2 pour les pour les développeurs développeurs Cours avec exercices corrigés Cours avec exercices corrigés X. Blanc I. Mounier 11/09/06 Code éditeur : G12029 • ISBN : 2-212-12029-X blanc © Groupe Eyrolles 2006, ISBN : 2-212-12029-X Table des matières Préface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . III Remerciements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V Avant-propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VII Une approche à contre-pied . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VIII Organisation de ce cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VIII À qui s’adresse ce cours ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IX CHAPITRE 1 Un curieux besoin de modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Construction d’applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Le code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Les modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 CHAPITRE 2 Diagrammes de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Vue structurelle du modèle UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Paradigme orienté objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Concepts élémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Associations entre classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Concepts avancés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 13 14 19 CHAPITRE 3 Reverse Engineering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Sémantiques UML et Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Différences des sémantiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 28 XII UML pour les développeurs Synthèse entre UML et les langages de programmation . . . . . . . . . . . . . . . 30 Passage de code Java vers les diagrammes de classes . . . . . . . . . . . . . . Règles de correspondance du Reverse Engineering . . . . . . . . . . . . . . . . . . 30 Intérêt et limites du Reverse Engineering . . . . . . . . . . . . . . . . . . . . . . . . Diagrammes à faire après un Reverse Engineering . . . . . . . . . . . . . . . . . . . 34 32 35 CHAPITRE 4 Rétroconception et patrons de conception . . . . . . . . . . . . . . . . . . 39 Identification des dépendances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Qu’est-ce qu’une dépendance ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Impact des cycles de dépendances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Casser les cycles de dépendances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Patron de conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le patron de conception Observer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 41 43 45 45 CHAPITRE 5 Génération de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 D’UML à Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 UML vers Java et Java vers UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Approches UML et code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Cycle de développement UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 CHAPITRE 6 Diagrammes de séquence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Vue comportementale du modèle UML . . . . . . . . . . . . . . . . . . . . . . . . . . Concepts élémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le temps dans les diagrammes de séquence . . . . . . . . . . . . . . . . . . . . . . . . 63 64 66 Liens avec la vue structurelle du modèle . . . . . . . . . . . . . . . . . . . . . . . . . Objet et classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diagramme et modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Concepts avancés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interactions et génération de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fragment d’interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Limites intrinsèques des interactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 68 69 70 72 72 Table des matières XIII CHAPITRE 7 Diagrammes de séquence de test . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Les tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comment utiliser les tests ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Écriture de cas de test à partir d’un modèle UML . . . . . . . . . . . . . . . . . Cas de test abstrait et interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cas de test exécutables et interactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 80 80 81 CHAPITRE 8 Plates-formes d’exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Java dans UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modèles 100 % UML et modèles UML pour Java . . . . . . . . . . . . . . . . . . . UML productif ou pérenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 87 88 Niveaux conceptuel et physique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Abstraction de la plate-forme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Niveaux d’abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Cycle de développement UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Intégration des deux niveaux dans le cycle . . . . . . . . . . . . . . . . . . . . . . . . . Approches possibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 90 91 92 92 CHAPITRE 9 Diagrammes de cas d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Vue fonctionnelle du modèle UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctionnalités d’une application orientée objet . . . . . . . . . . . . . . . . . . . . . Concepts élémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 97 98 Liens avec les autres parties du modèle . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Concepts avancés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Concepts avancés relatifs aux cas d’utilisation . . . . . . . . . . . . . . . . . . . . . . Concept avancé relatif aux acteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 101 104 CHAPITRE 10 Développement avec UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Analyse et conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Analyse du problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conception de la solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 110 110 XIV UML pour les développeurs Comment passer du quoi au comment ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Méthode de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La méthode « UML pour le développeur » . . . . . . . . . . . . . . . . . . . . . . . . . 114 115 CHAPITRE 11 Corrigés des TD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 TD1. Un curieux besoin de modélisation . . . . . . . . . . . . . . . . . . . . . . . . . 123 TD2. Diagrammes de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 TD3. Reverse Engineering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 TD4. Rétroconception et patrons de conception . . . . . . . . . . . . . . . . . . . 141 TD5. Génération de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 TD6. Diagrammes de séquence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 TD7. Diagrammes de séquence de test . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 TD8. Plates-formes d’exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 TD9. Diagrammes de cas d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 TD10. Développement avec UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 ANNEXE 1 Code d’un carnet d’adresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 ANNEXE 2 Exemple de partiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Questions de cours (4 points) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Exercices (16 points) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201