Schémas de conversion UML→Java et quelques

publicité
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
Téléchargement