:: Enseignements :: ESIPE :: E4INFO :: 2014-2015 :: Programmation Orientée Objet - Design Patterns ::
[LOGO]

Hierarchie de composants




Exercice 1 - Retours sur vos rendus ...

Exercice 2 - Composants graphiques

On souhaite créer une hierarchie de types representant des composants graphiques. Un composant graphique s'occupe d'une zone rectangulaire de l'écran qu'il va remplir d'information différentes pour chaque composants
Pour effectuer le dessin, nous réutiliseront la librarie graphique CanvasArea
De plus, deux composants de base on déjà été écrit, ColoredFiller et Icon





Ainsi qu'une image composite.png pour tester le composant Icon

  1. On peut noter que la classe Rect a ses champs déclarés public et final, comme une structure en C.
    Quel est le problème d'un tel design ?
    Est-ce grâve docteur ?
  2. On souhaite créer une classe HBox permettant de placer des composants horizontalement en divisant la place disponible en largeur par le nombre de composants.
     
    La première image est une HBox contenant 3 composants, la seconde est une HBox dans une HBox.
    Quelle design pattern utiliser ?
    Implanter la classe HBox.
  3. On souhaite implanter un mécanisme optionnel d'ombrage (drop shadow en anglais) sur le composant ColoredFiller. Une ombre se fait en dessinant un rectangle grisé *avant* le dessin du composant.
    	       area.drawRectangle(zone.x + 9, zone.y + 9, zone.width - 10, zone.height - 10, Brush.DARK_GRAY.asOpaque());
    	     
    • Comment devez vous modifier votre code ?
    • Et si on veut le même mécanisme d'ombrage sur tous les composants ? Comment devez vous modifier votre code ?
    • Et si on veut pouvoir décorer tous les composants avec une autre décoration que drop shadow ?
      Quelle design pattern allez vous utiliser ?
    Implanter le design pattern retenu.
  4. On souhaite implanter un nouveau composant qui permet de placer les composants sur une grille (grid box) dont le nombre de lignes et de colonnes est passé à la création.
    L'algorithme de placement écrit en pseudo-code est celui-ci:
    	     dw est égale à la largeur de la zone courante divisée par le nombre de colonne
    	     dh est égale à la hauteur de la zone courante divisée par le nombre de ligne
    	     index est égale à 0
    	     pour i de 0 au nombre de colonnes
    	       pour j de 0 au nombre de lignes
    	         si il reste des composants à placer
    	           dessiner le composant numéroté index dans la zone rectangulaire
    	             définie par les coordonées:
    	             début de la zone courante en x + i * dw, début de la zone courante en y + j * dh , dw, dh
    	           incrémenter index
    	         sinon
    	           l'algorithme est terminé
    	     

    On veut bien sûr éviter de dupliquer le code de HBox !
    • Proposer un diagramme UML à base d'héritage pour résoudre ce problème.
    • Proposer un diagramme UML à base de délégation pour résoudre ce problème.
    • Quelle solution vous semble la meilleur ?
      Implanter celle-ci.

Exercice 3 - Récapitulatif