:: Enseignements :: Master :: M1 :: 2016-2017 :: Programmation Orientée Objet - Design Patterns ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Dessinons ! |
Le but de ce TD est de voir dans quel cas on crée des hierarchie d'objets
et d'avoir une première introduction à la POO.
Exercice 1 - Etudes techniques librairie Canvas
Objectif: découvrir la "lib" Canvas et savoir utiliser les
principales fonctions.
CanvasArea.java
-
Dans un premier temps, comprendre ligne à ligne l'exemple suivant:
-
Modifier l'exemple pour afficher les deux diagonales (sous forme de ligne)
en plus du rectangle.
Note: RTFM !
-
Modifier l'exemple pour afficher une ellipse (inscrite) dans le rectangle.
Exercice 2 - Dessins des lignes
On souhaite prendre en paramètre du programme un fichier simple
contenant la description de diffèrentes figures, pour l'instant on supposera que
le fichier ne contient que des lignes.
Le programme doit lire le fichier, stocker l'ensemble des figures dans une liste
puis afficher celles-ci sur l'écran.
Le format d'une ligne est le suivant : "line x0 y0 x1 y1".
Exemple de fichier
line 0 0 100 100
line 0 50 100 50
On peut lire un fichier ligne à ligne en utilisant le code suivant:
Path path = Paths.get("figures.txt");
try(Stream<String> lines = Files.lines(path)) {
lines.forEach(line -> System.out.println(line));
}
Pour décomposer une ligne en "mots" on peut utiliser
String.split et
Integer.parseInt comme ceci:
String[] tokens = text.split(" ");
int x1 = Integer.parseInt(tokens[1]);
int y1 = Integer.parseInt(tokens[2]);
int x2 = Integer.parseInt(tokens[3]);
int y2 = Integer.parseInt(tokens[4]);
-
Ecrire le code qui prend un fichier en tant que premier argument de la ligne
de commande, qui lit celui-ci et stocke l'ensemble des lignes dans une liste.
-
Puis, afficher la liste des lignes précédemment obtenues sur l'écran.
Exercice 3 - Et des ellipses ...
On souhaite modifier le programme précédent pour traiter
les fichiers contenant à la fois des lignes et des ellipses.
-
Bien sûr, ici, on généralise le problème en permettant au programme de
lire des figures, de stocker des figures puis d'afficher des figures.
-
Si vous ne l'avez pas déjà fait, séparer le parsing du fichier et la creation des figures.
-
Ajouter ensuite un rectangle. Que doit-on modifier ?
Est-ce normal ? Comment gérer le fait qu'une ellipse et un rectangle ont les mêmes coordonées ?
Attention à ce que le partage d'implantation ne soit pas visible pour un utilisateur externe
car comme son nom l'indique c'est un détail d'implantation.
Exercice 4 - Un peu de selection
On souhaite afficher sur la console (au moins dans un premier temps)
la figure la plus proche de l'endroit où l'utilisateur a cliqué.
Pour que les choses soit simples, la figure la plus proche est définie
comme étant la figure qui a son centre à la distance la plus courte
par rapport aux coordonées de la souris.
Note: la distance entre deux points se calcul avec pythagore !
Note 2: il n'est pas nécessaire de faire une racine carré car on
peut comparer les carrés !
Le code suivant permet d'écouter les clics de la souris
-
Comment doit-on modifier le programme pour prendre en compte
cette nouvelle fonctionnalité ?
-
Comment doit on gérer le cas où il n'y a pas de sélection ?
-
Si vous ne l'avez pas déjà fait, pourquoi doit-on encapsuler
la liste des figures dans une classe ?
Exercice 5 - Selection colorée
Modifier le programme précédent pour que au lieu d'afficher la selection
sur la console, la figure selectionnée s'affiche en orange.
-
Sachant que l'on veut garder la figure étant selectionnée dans un champs pour la suite,
expliquer pourquoi stocker une couleur dans chaque figure est une erreur.
-
Implanter le code !
© Université de Marne-la-Vallée