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

Jouons !


Ce TD se déroule en autonomie. Les rendus sont à faire sur la plate-forme elearning.
https://elearning.univ-mlv.fr/mod/assign/view.php?id=29535
Les consignes précises du rendu : Rappel : le travail en autonomie peut inclure des discussions entre vous mais le résultat / le rendu doit être le résultat de VOTRE compréhension.
Ce TD permet d'approfondir les notions de hierarchie de types.

Exercice 1 - Questions

Les réponses aux questions doivent être faites en 15 minutes maximum (ensuite les rendus ne seront plus possibles) Ne faites pas de copier/coller Wikipedia ! ce qui nous intéresse, c'est votre compréhension et vos mots !

  1. pourquoi les champs d'une classe doivent être privés
  2. rappeler ce qu'est une conception top-down ou bottom-up. quelle est votre préférence et pourquoi ?
  3. nommer les 5 principes essentiels de POO regroupés sous l'acronyme SOLID et donner pour chacun une phrase courte de définition, avec vos mots.

Exercice 2 - Enfin la paye

Le rendu est à faire sur la plate-forme elearning à la fin du TD (les dépôts sont refusés après) Ce qui est attendu : code dans un zip + 1 page max d'explications (comment vous avez fait *et* pourquoi vous avez fait comme ça !) + photo de votre UML fait sur une feuille.
Attention, pour vos diagramme UML, vous ne devez indiquer que les relations qui sont intéressantes et non pas toutes les relations possibles comme vous le sortirait un logiciel de dessin automatique de diagramme UML (on doit sentir l'intelligence ici).
On souhaite modéliser la paye des employés d'une entreprise. Chaque employé possède un nom (pour le debug) un salaire et un bonus optionnel, le salaire total d'un employé est la somme de son salaire et de son bonus s'il existe. La somme totale que soit verser l'entreprise à la fin d'un mois est la somme de la paye de chaque employé.
Un boulot de première modélisation a déjà été effectué par votre chef de projet sous la forme des classes Employee , Bonus et Payment .
Employee.java
Bonus.java
Payment.java
Ainsi qu'un main de test
				public static void main(String[] args) {
				  Payment payment = new Payment();
				  Employee bob = new Employee("bob", 90);
				  Employee marta = new Employee("marta", 80);
				  Employee carol = new Employee("carol", 120);
				  payment.addEmployee(bob);
				  payment.addEmployee(marta);
				  payment.addEmployee(carol);
				  bob.setSalary(100);
				  marta.setBonus(new Bonus(30));
				  System.out.println(payment.getAll());
				  //System.out.println(payment.totalPayment());
				}
			

  1. Faire sur une feuille blanche une modélisation UML des relations entre les différentes classes.
    Rudiment d'UML à partir de la page 16.
  2. Décrire en une phrase la responsabilité de chaque classe.
    Puis décrire en un court paragraphe, les relations entre les classes.
    Puis utiliser le smartphone de votre voisin (où le votre) pour récupérer l'image de votre modélisation UML pour l'inclure dans votre rapport comme appui visuel à ce que vous venez d'écrire.
  3. Expliquer
    • Pourquoi le champs amount de Bonus et le champs name de Employee sont déclarés final
    • Pourquoi il y a 1 test pour savoir si amount est négatif dans Bonus et deux tests pour savoir si salary est négatif dans Employee ?
      Que faire pour éviter la (petite) duplication de code ?
    • A quoi sert l'appel à la méthode Objects.requireNonNull dans Employee et dans Payment ?
    • Pourquoi Payment.getAll ne renvoie pas directement la référence sur employees mais fait un appel à Collections.unmodifiableList ? Expliquer pourquoi il n'y a pas de getters (de méthode getXXX ) dans Bonus ou Employee ?
    • Pourquoi tous les champs sont marqués private sauf pour Bonus.amount ?
  4. Avant de commencer l'implantation, on peut remarquer qu'il est possible de créer un Employee mais d'oublier de l'ajouter dans une instance de Payment .
    On souhaite changer l'API pour ne pas permettre de créer un Employee qui ne sera pas enregistré.
    Si vous préferrez, la méthode d'ajout doit créer un employé et il ne doit pas y avoir d'autre moyen de créer un employé que de passer par la méthode d'ajout.
  5. On vous demande d'ajouter le calcul de la paye totale à la classe Payment , Pour cela, ecrire un paragraphe sur la façon dont il faut écrire le code pour ne pas allez à l'encontre des responsabilités des classes que vous avez décrites précédemment.
  6. Implanter la solution que vous avez décrite.
  7. L'entreprise accueille aussi des étudiants qu'il faut payer. Ceux-ci ont un salaire identique et fixe de 50 et peuvent avoir un bonus.
    Indiquer en un paragraphe comment il faut modifier le diagramme des classes et produisez sur une nouvelle feuille blanche une version UML du nouveau diagramme de classes dont vous ferez aussi une photo.
    Attention à ne pas stocker en mémoire des choses inutiles (par exemple le salaire des étudiants est tojours 50 donc chaque étudiant n'a pas besoin d'avoir un champ avec la même valeur) et à ne pas faire de duplication de code.
  8. Implanter la solution retenue.