:: Enseignements :: Master :: M1 :: 2008-2009 :: Programmation Orientée Objet ::
[LOGO]

Association, Composite, Decorator



Exercice 1 - Représentation UML

Le but de cet exercice est de modéliser un système d'achat en ligne de type Amazon réalisé avec J2EE.
Tout d'abord, téléchargez le fichier td1amazon.zip. et intégrez-le à votre projet courant.

Générez le diagramme de classes de ce paquetage: clic droit sur le paquetage -> "Open UML" -> "class diagram UML". Dans la nouvelle fenêtre cochez "Association", "Inheritance", "Dependency" et validez. Assurez-vous que toutes les classes sont sélectionnées et validez.

  1. Avant de manipuler les classes, comparez les indicateurs de visibilité de la représentation UML (en fait celle d'Eclipse UML) en ajoutant dans le code de la classe Cd des champs public, privé, etc...
  2. À quoi correspondent les propriétés vues dans la représentation UML des classes Author, Editor, Customer en Java ? Comment faire pour que le plugin UML Omondo génère l'un plutôt que l'autre ?
  3. Basculez maintenant en représentation UML classique. ("Window" -> "Preferences" -> "UML"). Après avoir constaté les différences, revenez en représentation Eclipse.
  4. Maintenant, vous allez modifier le diagramme. Faites apparaître les relations d'héritage sur le diagramme: Cd, Dvd et Book héritent de Item.
  5. La prochaine étape va être de créer des associations. Modélisez le fait qu'un Kart ne puisse avoir qu'un client, qui ne doit pas forcément être renseigné au départ.
    Regardez maintenant les apports à la classe Kart. Faites apparaître le champ Customer sur le diagramme Kart.
  6. Ajoutez les associations suivantes avec les cardinalités appropriées en fonction des indications ci-dessous :
    • Un Kart peut avoir plusieurs Item. Ajoutez une association en utilisant une ArrayList.
    • Ajoutez une classe abstraite Product commune à Cd, Dvd et Book.
      Est-il plus facile de faire ce genre de transformation avec le plugin Omondo ou dans Eclipse en Java ?
    • Un Product doit avoir un Editor. Un Editor peut avoir plusieurs Product.
    • Un Book doit avoir un ou plusieurs Author. Un Author peut avoir écrit plusieurs Book.
    • Un Book peut avoir une BookCover.
    • Un Dvd possède plusieurs Language.
  7. Supprimez le diagramme et regénérez-le. Expliquez pourquoi le diagramme n'a pas le même état qu'au début du TD.

Exercice 2 - Composite et Decorator

Vous regrettez l'époque où vous aviez le temps de jouer à Command&Conquer? Voici l'occasion de créer votre version du jeu! Commencez par télécharger le fichier td1war.zip. Importez-le dans le répertoire source de votre projet courant dans Eclipse.

Le but de cet exercice est de modéliser des unités militaires. Certaines unités (AircraftCarrier, ArmyTruck, Helicopter et Destroyer) peuvent jouer un rôle de transport de troupe et contenir d'autres unités.

Dans le paquetage fr.umlv.gl.td2.war se trouvent toutes sortes d'unités militaires sous forme de classes.

  1. Organisez les classes pour que les unités effectuent du transport de troupe, en utilisant le design pattern Composite. Les transporteurs devront donc posséder des méthodes permettant d'ajouter ou de retirer d'autres unités et de visualiser la liste des unités.
  2. Modifier votre implantation pour qu'il soit impossible de transporter une unité étant elle-même un transporteur.
  3. Faites en sorte que la puissance de feu, la vie et la vitesse d'un transporteur soit la somme des caractéristiques des unités de même armes qu'il transporte. Par exemple si un destroyer transporte un soldat et deux marines, ses caractéristiques ne dépendront que des deux marines.
  4. Nous allons maintenant ajouter un système de bonus qui permet de booster les fonctionnalités de feu, de vie et de vitesse des soldats.
    On souhaite avoir des bonus qui ajoutent de la puissance de feu, de la vie ou augmentent la vitesse ainsi que des bonus multipliant par un facteur l'ensemble des caractéristiques d'un soldat. Proposer une solution d'implantation en utilisant le design pattern Decorator.
  5. À vos claviers ! Enfin, faites en sorte que l'on puisse aussi appliquer le système de bonus aux transporteurs.