Master 2 LITL Programmation pour le TAL (SLT0905V) Schémas de conversion UML → Java et 3 patrons de conception Franck Sajous/CLLE-ERSS http://fsajous.free.fr/ Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 1/19 Schémas de conversion Objectif une fois vos diagrammes de classes et d'objets réalisés. . . car vous commencez toujours par ça, n'est-ce pas ? écrire de façon aussi systématique que possible le code Java correspondant → concerne la partie structurelle essentiellement peut interroger la dynamique également Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 2/19 Relations génériques et composition/agrégation relation 1 à 1 relation 1 à plusieurs relation plusieurs à plusieurs Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 3/19 Relations génériques et composition/agrégation relation 1 à 1 relation 1 à plusieurs relation plusieurs à plusieurs Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 3/19 Relation 1 à 1 Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 4/19 Relation 1 à 1 On s'intéresse à l'instance de A comme membre de B Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 4/19 Relation 1 à 1 Une instance de B peut avoir (ne dites pas ça ! Écrivez-le encore moins !!!) une instance de A, ou non Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 4/19 Relation 1 à 1 Si on impose que toute instance de B est en relation avec une instance de A. . . Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 4/19 Relation 1 à 1 Une solution : créer une instance de A par défaut (éventuellement modiable par une méthode public void setA(A a) Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 4/19 Relation 1 à 1 Autre solution : imposer l'utilisation d'un constructeur qui prenne une instance de A en argument. C'est à l'utilisateur de la classe B (celui qui crée un instance de B) de créer et éventuellement initialiser l'instance de A. Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 4/19 Relation un à plusieurs Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 5/19 Relation un à plusieurs Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 5/19 Relation un à plusieurs si besoin... (ou utile) Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 5/19 Relation plusieurs à plusieurs Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 6/19 Agrégation : c'est un relation générique. . . à laquelle vous donnez une signication particulière Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 7/19 Agrégation : c'est un relation générique. . . à laquelle vous donnez une signication particulière agrégation Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 7/19 Agrégation : c'est un relation générique. . . à laquelle vous donnez une signication particulière agrégation Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 7/19 Composition. . . c'est une agrégation dont on change la multiplicité Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 8/19 Composition. . . c'est une agrégation dont on change la multiplicité On a vu jusqu'ici comment implémenter la contrainte au moins un . Si c'est A qui connaît ses Bs (ArrayList<B>) comment assurer qu'une instance de B n'apparaisse pas dans 2 instances de A ? Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 8/19 Composition. . . Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 9/19 Composition. . . Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 9/19 Composition. . . Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 9/19 Composition. . . Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 9/19 Composition. . . Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 9/19 Composition. . . Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 9/19 Implémentation de la composition une solution possible Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 10/19 Implémentation de la composition une solution possible Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 10/19 Implémentation de la composition une solution possible Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 10/19 Implémentation de la composition une solution possible Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 10/19 Implémentation de la composition une solution possible Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 10/19 Design Patterns : composite Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 11/19 Composite : les objets graphiques de vos débuts Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 12/19 Composite : les objets graphiques de vos débuts Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 13/19 Adapter Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 14/19 Adapter (Token) Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 15/19 Singleton : assurer l'unicité d'instance d'une classe donnée Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 16/19 Singleton : assurer l'unicité d'instance d'une classe donnée synchronized Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 16/19 Singleton : motivation Même si nous n'avons vu que la programmation mono-threadée. . . d'autres pourraient utiliser vos classes en créant plusieurs threads qui s'exécutent en parallèle et créent des objets de classes que vous avez développés Exemples 1 lecture de chiers en // et table de fréquence unique : 2 vous développez DependenciesBuilder qui garde en mémoire et produit en sortie la fréquence des triplets syntaxiques d'un corpus un autre développeur crée une application multithreadée qui lit plusieurs chiers Talismane en // et utilise DependenciesBuilder stockage d'une ressource volumineuse en mémoire vous développez un gestionnaire de ressource qui stocke en mémoire le dictionnaire GLAWI et en donne des moyens d'accès un autre développeur crée une application multithreadée... combien de Go stockés en mémoire ? Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 17/19 Autres patrons À la découverte de nouveaux patrons de conception Il en existe beaucoup d'autres Le plus dur lorsqu'on découvre ces patrons est de comprendre l'intérêt de chacun → l'ouvrage du gang of four n'est pas remarquable sur le plan pédagogique utilisez Internet et multipliez les sources (au bout d'une vingtaine de sites traitant du même patron, vous trouverez peut-être un exemple convainquant) Des patrons que vous pouvez regarder : les créateurs le prototype : en Java, rien à faire, le mécanisme est déjà prévu (méthode clone()) la fabrique abstraite (abstract factory) et l'implémentation le monteur (builder), pour la construction de parties d'objets Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 18/19 Autres patrons Modèles de comportement relatifs à la dynamique lors de l'exécution : ux de contrôle, responsabilité de chaque objet, communication entre objets certains sont plus ou moins intimement liés aux interfaces graphiques, e.g. l'observateur (observer), lié à la notion de système Modèle-Vue-Contrôleur d'autres sont liés à l'accès aux structures de données. Vous en connaissez un : l'itérateur (iterator). découpage d'algorithmes complexes en sous-problèmes et possibilité d'avoir plusieurs implémentations du traitement de chaque sous-problème : le patron de méthode (Template method pattern). Franck Sajous/CLLE-ERSS Séance 10 conversion UML → Java & Design Patterns 19/19