:: Enseignements :: Master :: M1 :: 2014-2015 :: Design Pattern ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Jouons ! |
Ce TD se déroule en autonomie.
Les rendus sont à faire sur la plate-forme elearning.
TODO lien sur elarning TODO
Les consignes précises du rendu :
- UN seul zip pour l'ensemble des sources + photo UML + readme au
format MarkDown + ...
- nommage du zip: NOM_PRENOM-td1.zip
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 !
- pourquoi les champs d'une classe doivent être privés
- rappeler ce qu'est une conception top-down ou bottom-up. quelle
est votre préférence et pourquoi ?
- 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());
}
-
Faire sur une feuille blanche une modélisation UML des
relations entre les différentes classes.
Rudiment d'UML
à partir de la page 16.
-
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.
-
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
?
-
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.
-
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.
-
Implanter la solution que vous avez décrite.
-
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.
-
Implanter la solution retenue.
© Université de Marne-la-Vallée