Formation Design Patterns juillet 2004
Envoyer un courrier :   Dernière mise à jour (Last update):


Liens

Présentation synthétique dans ../patterns/ (au format Open Office)
../uml/UML-bookmarks.html - ../java/liens.html
Bruce Eckel's MindView, Inc: Thinking in Patterns with Java - aussi sur ce site plusieurs livres en HTML.
Démarrer avec CVS - Programme formation CVS par J.M. Vanel 

Exercices

Exercice 1

Programmer en Java l'exemple d'une base de données de Villes avec le Modèle de Conception Observateur-Observé; on peut s'inspirer d'une version en C++ (classes GeoApp, Geographie, VillepasTrouveeException, ObservateurPopulation).

Solution en Java (ligne de commande)


Exercice 2

Faire apparaitre la hiérarchie de java.awt.Component dans eclipse; examiner la classe Container. Quelle différence avec le Pattern Composite "officiel" ?

Télécharger les exemples du livre "Java examples in a Nutshell" (http://examples.oreilly.com/jenut3/); faire tourner  ComponentTree.
Pouvez-voir dans ComponentTree une conséquence fâcheuse de la différence avec le Patterns Composite "officiel"  ?
Solution


Exercice 3

Aller sur ma page "the same GUI in different (computer) languages. This a what I call the Rosetta stone of GUI's".

Faire tourner Bonjour.java (vous pouvez faire tourner les autres via cygwin).

Quel Design Pattern pouvez-vous reconnaitre?
Solution

Exercice 4

Conseil : faire d'abord le no 3.
Ajouter une IHM à la Solution en Java (ligne de commande) de la base de données de Villes (exercice 1).

Solution en Java (classes InputWindow, QueryWindow, ObserverWindow)

Exercice 5

A partir de ecolosim. Voir "Manuel utilisateur" dans LISEZMOI.txt de la distribution ecolosim (dans les fichiers téléchargés avec CVS).

Créer un "emballage" (décorateur, wrapper) autour de deux classes Individual qui va ajouter les vecteurs déplacements de ces 2 modèles.

On l'appelera VectorAddWrapperModel.

  1. Pour tester on "ajoutera" SimpleAgregationModel et RandomSimpleModel . De cette façon va ajouter une composante aléatoire à un déplacement qui serait autrement uniquement de se rassembler au centre de gravité
  2. Pour généraliser je suggère le squelette de code suivant où l'on peut "ajouter" un nombre quelconque de modèles :
package ecolosim.simu.models;
public class VectorAddWrapperModel implements Individual {
 List<Individual> 
public addDisplacement(Individual model) {
   //????
 }
}

Comment ajouter cette classe à la liste des classes disponibles dans le menu déroulant dans ecolosim:
Voir "Manuel développeur" dans LISEZMOI.txt de la distribution ecolosim (dans les fichiers téléchargés avec CVS).

Exercice 5 bis

Plein d'autres exercices sur ecolosim ici :
http://jmvanel.free.fr/java/formation-5jours/exercices.html

Exercice 5 ter

Installer BlueJ . L'utiliser pour visualiser les classes de Ecolosim (les fichiers bluej.pkg sont déjà là dans tous les packages).
Quels exemples de délégation peut-on trouver? Parmi ceux-ci lesquels sont des Décorateurs?

Exercice 6

A cette adresse on trouvera un projet de livre d'un auteur qui, comme moi, a un point de vue "structurel" sur les DP:
Bruce Eckel's MindView, Inc: Thinking in Patterns with Java -
Il y a des exemples en Java pour la plupart des Patterns.
En faire tourner quelques-uns.

Exercice 7

Télécharger les exemples Java en Français du livre en Français sur Java avec BlueJ, et l'environnement pédagogique BlueJ (Barnes et Kölling).
Faire tourner les exemples des chapitres 5, 7, 10, 11, 12 . Le cas des renards et des lapins (chap. 10) est joli à voir et ressemble pas mal à ecolosim, mais là les animaux se déplacent dans un quadrillage discret.

Exercice 8

Suite à l'exercie 1 ou 4, utiliser la fonctionalité "encapsulate field" d'eclipse dans Refactoring pour "privatiser" le champ ville dans la classe EvenementVille .

Exercice 8: Java 1.5

cf http://java.sun.com/developer/technicalArticles/releases/j2se15/

Un petit échantillon qui mélange la généricité, l' "auto-boxing" et la boucle for améliorée:

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, new Integer(42));
int total = list.get(0);
// i n'est pas l'indice, c'est le contenu
for (Integer i : list) {
System.out.println( i );
}
Attention : ça ne passera pas avec eclipse 3.0, il faudra compiler en ligne de commande:
$JAVA_HOME/bin/javac Java15.java
$JAVA_HOME/bin/java -classpath . Java15

Installations et téléchargements

A télécharger :

Programme complémentaire

Solutions

Exercice 2

Examiner la classe Container. Quelle différence avec le Patterns Composite "officiel" ?
Déjà la ressemblance:

Les différences:
Pouvez-voir dans ComponentTree une conséquence fâcheuse de la différence avec le Patterns Composite "officiel"  ?
Si Component implémentait :
Il serait possible de parcourir l'arborescence des composants graphiques très simplement. A cause de ça le programme ComponentTree est obligé de faire pas mal de instanceof (toujours un mauvais symptome, le instanceof !).

Exercice 3

Il fallait reconnaitre le Modèle de Conception "Observateur". JButton est un observable.

Formation Design Patterns juillet 2004
Envoyer un courrier :   Dernière mise à jour (Last update):

Solutions

Exercices 2 et 3: Solutions
Exercice 4: Solution en Java (classes InputWindow, QueryWindow, ObserverWindow)

Liens

Présentation synthétique dans ../patterns/ (au format Open Office)
http://jmvanel.free.fr/uml/UML-bookmarks.html
http://jmvanel.free.fr/java/liens.html

Bruce Eckel's MindView, Inc: Thinking in Patterns with Java - sur ce site plusieurs livres en HTML.
Démarrer avec CVS - Programme formation CVS par J.M. Vanel 

Exercices

Exercice 1

Programmer en Java l'exemple d'une base de données de Villes avec le Modèle de Conception Observateur-Observé; on peut s'inspirer d'une version en C++ (classes GeoApp, Geographie, VillepasTrouveeException, ObservateurPopulation).

Solution en Java (ligne de commande)


Exercice 2

Faire apparaitre la hiérarchie de java.awt.Component dans eclipse; examiner la classe Container. Quelle différence avec le Pattern Composite "officiel" ?

Télécharger les exemples du livre "Java examples in a Nutshell" (http://examples.oreilly.com/jenut3/); faire tourner  ComponentTree.
Pouvez-voir dans ComponentTree une conséquence fâcheuse de la différence avec le Patterns Composite "officiel"  ?
Solution


Exercice 3

Aller sur ma page "the same GUI in different (computer) languages. This a what I call the Rosetta stone of GUI's".

Faire tourner Bonjour.java (vous pouvez faire tourner les autres via cygwin).

Quel Design Pattern pouvez-vous reconnaitre?
Solution

Exercice 4

Conseil : faire d'abord le no 3.
Ajouter une IHM à la Solution en Java (ligne de commande) de la base de données de Villes (exercice 1).

Solution en Java (classes InputWindow, QueryWindow, ObserverWindow)

Exercice 5

A partir de ecolosim. Voir "Manuel utilisateur" dans LISEZMOI.txt de la distribution ecolosim (dans les fichiers téléchargés avec CVS).

Créer un "emballage" (décorateur, wrapper) autour de deux classes Individual qui va ajouter les vecteurs déplacements de ces 2 modèles.

On l'appelera VectorAddWrapperModel.

  1. Pour tester on "ajoutera" SimpleAgregationModel et RandomSimpleModel . De cette façon va ajouter une composante aléatoire à un déplacement qui serait autrement uniquement de se rassembler au centre de gravité
  2. Pour généraliser je suggère le squelette de code suivant où l'on peut "ajouter" un nombre quelconque de modèles :
package ecolosim.simu.models;
public class VectorAddWrapperModel implements Individual {
 List<Individual> 
public addDisplacement(Individual model) {
   //????
 }
}

Comment ajouter cette classe à la liste des classes disponibles dans le menu déroulant dans ecolosim:
Voir "Manuel développeur" dans LISEZMOI.txt de la distribution ecolosim (dans les fichiers téléchargés avec CVS).

Exercice 5 bis

Plein d'autres exercices sur ecolosim ici :
http://jmvanel.free.fr/java/formation-5jours/exercices.html

Exercice 5 ter

Installer BlueJ . L'utiliser pour visualiser les classes de Ecolosim (les fichiers bluej.pkg sont déjà là dans tous les packages).

Exercice 6

A cette adresse on trouvera un projet de livre d'un auteur qui, comme moi, a un point de vue "structurel" sur les DP:
Bruce Eckel's MindView, Inc: Thinking in Patterns with Java -
Il y a des exemples en Java pour la plupart des Patterns.
En faire tourner quelques-uns.

Exercice 7

Télécharger les exemples Java en Français du livre en Français sur Java avec BlueJ, et l'environnement pédagogique BlueJ (Barnes et Kölling).
Faire tourner les exemples des chapitres 5, 7, 10, 11, 12 . Le cas des renards et des lapins (chap. 10) est joli à voir et ressemble pas mal à ecolosim, mais là les animaux se déplacent dans un quadrillage discret.

Exercice 8

Suite à l'exercie 1 ou 4, utiliser la fonctionalité "encapsulate field" d'eclipse dans Refactoring pour "privatiser" le champ ville dans la classe EvenementVille .

Exercice 8: Java 1.5

cf http://java.sun.com/developer/technicalArticles/releases/j2se15/

Faire tourner ce petit échantillon qui mélange la généricité, l' "auto-boxing" et la boucle for améliorée:

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, new Integer(42));
int total = list.get(0);
// i n'est pas l'indice, c'est le contenu
for (Integer i : list) {
System.out.println( i );
}
Attention : ça ne passera pas avec eclipse 3.0, il faudra compiler en ligne de commande:
$JAVA_HOME/bin/javac Java15.java
$JAVA_HOME/bin/java -classpath . Java15

Installations et téléchargements

A télécharger :

Programme complémentaire

Solutions

Exercice 2

Examiner la classe Container. Quelle différence avec le Patterns Composite "officiel" ?
Déjà la ressemblance:

Les différences:

Pouvez-voir dans ComponentTree une conséquence fâcheuse de la différence avec le Patterns Composite "officiel"  ?
Si Component implémentait :
Il serait possible de parcourir l'arborescence des composants graphiques très simplement. A cause de ça le programme ComponentTree est obligé de faire pas mal de instanceof (toujours un mauvais symptome, le instanceof !).

Exercice 3

Il fallait reconnaitre le Modèle de Conception "Observateur". JButton est un observable.