- Cours: M2103 - support ici
- Enseignants: Marin Bougeret, Sébastien Gagné, Victor Poupet, Petru Valicov, Bruno Yun
- Le forum Piazza de ce cours pour poser vos questions
- Email pour une question d'ordre privée concernant le cours.
- Le sujet du TP en format .pdf téléchargeable et imprimable.
Avant de démarrer le TP, vérifiez que vous n'avez pas atteint votre quota d'espace de stockage autorisé :
- placez-vous dans votre
$HOME
et utilisez les commandes suivantes :du -sh
pour voir combien d'espace vous avez déjà utilisédu -sh *
pour voir combien d'espace vous avez déjà utilisé pour chaque fichier (sans fichiers cachés)du -sch .[!.]* *
pour voir combien d'espace vous avez déjà utilisé pour chaque fichier, y compris les fichiers cachés
- Supprimez les fichiers inutiles.
- Pour éviter des problèmes durant vos TPs d'informatique, vous devriez toujours garder 300-400 Mo d'espace libre.
- Vous respecterez toutes les consignes indiquées dans le TP précédent
- Dans ce TP, un principe important que vous devriez essayer de respecter dans votre code est le principe DRY
Cliquez sur le lien ci-dessous pour faire votre fork privé du TP :
https://classroom.github.com/a/ZHgcAjxK
Date limite de rendu de votre code sur le dépôt GitHub : Dimanche 24 février à 23h00
Vous êtes chargés de proposer une application de gestion des employés dans une entreprise. L’objectif est de développer votre application de manière incrémentale, en ajoutant les fonctionnalités demandées au fur et à mesure sans modifier les fonctionnalités écrites précédemment. Ce que l'on considère ici comme modification c'est effacer et/ou réécrire du code précédemment écrit. Ajouter du code sans modifier le code précédent est donc une opération valide. On dira ici, que pour chaque modification de votre programme (effacement et réécriture) la dette de votre logiciel augmente. Afin de respecter les divers principes en programmation orientée objets (encapsulation, DRY, YAGNI etc.), vous essayerez d'éviter au maximum de modifier le programme écrit précédemment pour ne pas trop augmenter cette dette...
-
Dans un premier temps vous devez modéliser les employés qui sont représentés par les données suivantes : numéro de sécurité sociale, nom, prénom, échelon (entier naturel). Implémentez la classe
Employe
correspondante et ajoutez-y un constructeur approprié. Le constructeur ayant beaucoup de paramètres, il vous est également demandé de proposer un builder pour une construction plus souple (cf. question 5, Exercice 3 du TP3). Vous pouvez générer le builder de manière automatique avec l'outil de refactoring d'IntelliJ IDEA : -
On souhaite pouvoir calculer le salaire brut et le salaire net d'un employé. Le salaire brut de l’employé se calcule de la manière suivante :
base * nbHeures
, oùbase
etnbHeures
seront des attributs de typedouble
. Le salaire net représentera toujours 80% du salaire brut. Ajoutez le code nécessaire pour intégrer ces fonctionnalités. -
Redéfinissez la méthode
toString()
dans la classeEmploye
pour afficher les informations concernant un employé (y compris ses salaires brut et net). -
Votre client vous demande de changer (modifier donc) la formule de calcul du salaire brut car l'entreprise vient de revoir sa politique salariale. La nouvelle formule de calcul du salaire brut est :
base * nbHeures * 1.05
. Combien de modifications devez-vous faire pour que votre programme continue de fonctionner correctement ? Est-ce que vous pouvez faire mieux ? -
Vérifiez votre solution dans le programme principal (la classe
GestionEmployes
). Vous y instancierez plusieurs employés (avec le builder) et afficherez les informations les concernant.
-
Maintenant votre client se rend compte qu’une séparation des traitements est nécessaire pour les différents types d'employés. Il faut spécifier les cas des Commerciaux, Fabricants, et les autres employés qu’on appellera Techniciens.
- Un
Commercial
a comme attributschiffreAffaires
ettauxCommission
(tous les deux de typedouble
). - Un
Fabricant
a comme attributsnbUnitesProduites
ettauxCommissionUnite
(typeint
etdouble
respectivement). - Un
Technicien
n'a pour l'instant aucun nouveau attribut, ni aucune nouvelle méthode. Implémentez les classes correspondantes en les faisant hériter de la classeEmploye
.
- Un
-
Un commercial peut négocier des transactions (avec la méthode
negocierTransaction()
), un fabricant fabrique des produits (méthodefabriquerProduit()
), un technicien effectue les autres tâches dans l’entreprise (méthodeeffectuerTacheTechnique()
). Chacune de ces méthodes sont de typevoid
et se contentent d'afficher un message approprié pour illustrer leur bon fonctionnement. Par exemple, la méthodenegocierTransaction()
devra afficher ”Je négocie une transaction”. -
Vérifiez votre programme dans la classe principale, en instanciant un objet pour chaque nouveau type d'employé et en appelant sa fonction spécifique.
-
On souhaite varier le calcul des salaires bruts des différents types d’employés :
- Le salaire brut d’un technicien est composé de son salaire brut en tant qu’employé + une majoration
en fonction de son échelon. Dans notre exemple, le résultat de ce calcul devrait correspondre à
base ∗ nbHeures + echelon ∗ 100
. - Le salaire brut d’un commercial dépend du chiffre d’affaires qu’il réalise. Ainsi, le salaire brut se calcule
suivant la formule
base + chiffreAffaires ∗ tauxCommission
. - Le salaire brut d’un fabricant est calculé de la même manière que le salaire brut d’un employé en ajoutant une
rémunération supplémentaire en fonction du rendement. Dans notre exemple, le résultat de ce calcul devrait
correspondre à
base ∗ nbHeures + nbUnitesProduites ∗ tauxCommissionUnite
. - Important : La modalité de calcul du salaire net demeure inchangée pour tous les employés (à savoir 80% du salaire brut).
Redéfinissez la méthode calcul de salaire brut dans chaque classe d'employé spécifique pour prendre en compte ces nouvelles formules. Vous ajouterez le code qui vous paraît nécessaire à la classe
Employe
mais sans modifier le code précédemment écrit. - Le salaire brut d’un technicien est composé de son salaire brut en tant qu’employé + une majoration
en fonction de son échelon. Dans notre exemple, le résultat de ce calcul devrait correspondre à
-
Le patron est devenu plus généreux et a décidé d’ajouter 100€ au salaire brut de tous ses employés ! Combien de modifications devez-vous apporter à votre code, pour que ça fonctionne ?
-
Maintenant, votre client se rend compte qu’un
Commercial
ne peut pas être un simple commercial (donc ne peut pas être instancié en tant que tel), mais doit être distingué en tant que vendeur ou représentant. Ajoutez les deux classes correspondantes en faisant un héritage deCommercial
. Vous ajouterez également à la classeCommercial
, le code nécessaire afin que cette classe ne soit pas instanciable. -
Pour terminer, faites en sorte que la méthode de calcul du salaire brut d'un vendeur soit la même que la méthode de calcul du salaire brut d'un commercial, alors que la formule de calcul du salaire brut des représentants soit la même que celle utilisée pour le salaire brut des techniciens. Ajoutez cette fonctionnalité dans votre application.
Attention à ne pas dupliquer du code (principe DRY) et à ne pas modifier le code précédemment écrit ! Sinon la dette de votre logiciel va augmenter. 😏
-
Quels sont les avantages et inconvénients de votre approche ?
-
Question facultative : dessinez le diagramme de classes afin de mieux comprendre votre solution.