Cours de Java, module 220 pour l'IPI
- SALAIRE_BASE de type Double et de valeur 1480.27
- NB_CONGES_BASE de type Integer et de valeur 25
- INDICE_MANAGER de type Double et de valeur 1.3
- PRIME_MANAGER_PAR_TECHNICIEN de type Double et de valeur 250
- PRIME_ANCIENNETE de type Double et de valeur 100
Déclarer au niveau de la classe Entreprise, une méthode primeAnnuelleBase, publique et statique calculant la prime de base pour tous les employés de l'entreprise de la manière suivante :
Utiliser la classe LocalDate (de joda time) pour obtenir l'année courante. Prime = 50% de l'année en cours. Ex : 2017 : 2017 / 2 = 1008.5
- nom : String
- prenom : String
- matricule : String
- dateEmbauche : LocalDate
- salaire : Double
Définir un constructeur par défaut dans la classe Employé, puis un constructeur avec l'ensemble des arguments précédemment créés, dans le même ordre
Déclarer et développer la méthode getNombreAnneeAnciennete calculant le nombre d'année d'ancienneté d'un employé
Faire en sorte qu'elle ne puisse être redéfinie dans d'éventuelles sous-classes. Un employé enbauché en 2018 a une ancienneté de 0
Modifier le setter de dateEmbauche pour lever une Exception avec le message "La date d'embauche ne peut être postérieure à la date courante lorsque la date d'embauche est postérieure à la date courante
Développer une méthode getNbConges retournant la constante de classe NB_CONGES_BASE de la classe Entreprise
"Employe{nom='nom', prenom='prenom', matricule='12345', dateEmbauche=1970-01-01, salaire=500.0}"
Redéfinir la méthode equals (héritée d'Object) testant l'égalité sur l'ensemble des attributs de la classe Employe
Redéfinir la méthode hashCode (héritée d'Object) en utilisant Objects.hash(...) et en respectant l'ordre nom, prenom, matricule, dateEmbauche, salaire
Coder la méthode augmenterSalaire prenant en paramètre un pourcentage d'augmentation de type Double et augmentant l'attribut salaire du pourcentage passé en paramètre :
Ex : un salaire de 500.0, avec une augmentation de 0.50, cela donne un salaire de 750.0
Analyser le message d'erreur remonté par l'IDE et utiliser l'IDE pour résoudre le problème
Modifier la classe Commercial pour ajouter un attribut caAnnuel de type Double avec son getter et son setter
Modifier la méthode getPrimeAnnuelle précédemment générée par l'IDE pour que la prime soit égale à 5% du caAnnuel, avec un minimum den500 € même en cas de chiffre d'affaire nul.
Faire en sorte que la prime soit toujours arrondi à l'euro supérieur. Voir la classe Math
Créer un constructeur pour la classe Commercial qui initialise tous les attributs hérités de la classe Employe en faisant appel au constructeur d'Employe et qui initialise également l'attribut caAnnuel
Redéfinir la méthode equals pour permettre de tester l'égalité entre deux instances de la classe Commercial.
Appeler la méthode equals de la classe Employe
- un attribut Integer performance
- une méthode performanceEgale prenant un Integer en paramètre qui renvoie true si la performance du commercial est égale à celle passée en paramètre, false sinon
Créer un enum note avec les valeurs INSUFFISANT, PASSABLE, BIEN, TRES_BIEN et créer une méthode equivalenceNote (sans utiliser de if) dans Commercial traduisant une performance en Note :
- Si performance = 0 ou 50 : INSUFFISANT
- Si performance = 100 : PASSABLE
- Si performance = 150 : BIEN
- Si performance = 200 : TRES_BIEN
Comme pour la classe Commercial, faire hériter la classe Technicien et implémenter la méthode abstraite getPrimeAnnuelle pour qu'elle retourne quelque chose et que la compilation passe (la méthode sera implémentée plus tard)
Ajouter un constructeur par défaut
Modifier la classe Technicien pour ajouter un attribut grade de type Integer avec son getter et son setter
Créer un constructeur pour la classe Technicien qui initialise tous les attributs hérités de la classe Employe en faisant appel au constructeur d'Employe et qui initialise également l'attribut grade.
Modifier le setter de l'attribut grade pour qu'il lève une exception de la classe TechnicienException (à créer) et dont le message est : "Le grade doit être compris entre 1 et 5 : X, technicien : Technicien{grade=X} Employe{nom='NOM', prenom='PRENOM', matricule='MATRICULE', dateEmbauche=DATE, salaire=SALAIRE}"
Avec X = valeur incorrecte passée au setter et NOM, PRENOM... les valeurs des attributs d'Employe. Astuce : Ajouter une méthode toString à Technicien
Redéfinir le setter de l'attribut salaire pour qu'il renvoie la valeur de l'attribut salaire, auquel on ajoute la bonification du grade qui est égale à une augmentation de X0% par rapport au salaire de base :
Ex : Grade 3 : 30% d'augmentation : 1000.0 de salaire avec grade 1 : 1100.0
Redéfinir le getter de nbConges pour retourner le nombre de congés de base + autant de congés que d'année d'ancienneté.
Modifier le code de la méthode getPrimeAnnuelle pour qu'elle renvoie la prime annuelle de base à laquelle on ajoute un pourcentage en fonction du grade (idem exo 305) ainsi que la prime d'ancienneté multipliée par le nombre d'année d'ancienneté
Implémenter l'interface Comparable pour que l'on puisse comparer deux Techniciens en fonction de leur grade plus le grade est haut, plus le technicien est compétent
Comme pour la classe Commercial, faire hériter la classe Manager d'Employe et implémenter la méthode abstraite getPrimeAnnuelle pour qu'elle retourne quelque chose et que la compilation passe (la méthode sera implémentée plus tard)
Modifier la classe Manager pour ajouter un attribut equipe permettant de stocker un ensemble non ordonné de techniciens avec son getter et son setter
Ajouter une méthode ajoutTechnicienEquipe qui prend en paramètre un technicien et qui l'ajoute dans l'équipe
Redéfinir le setter de l'attribut salaire pour qu'il renvoie la valeur du salaire multipliée par l'index manager, auquel on ajoute 10% (sur le salaire passé en paramètre) par membre d'équipe
Modifier le code de la méthode getPrimeAnnuelle pour qu'elle renvoie la prime de base, à laquelle on ajoute la prime du manager en fonction du nombre de membres de son équipe (en utilisant Entreprise.PRIME_MANAGER_PAR_TECHNICIEN)
Ajoutée une méthode interne augmenterSalaireEquipe qui augmente le salaire de tous les membres de l'équipe d'un manager par un pourcentage (Double) avec la méthode précédemment définie dans Employe
Voir ensuite les deux dernières lignes du test et essayer de comprendre pourquoi on teste ces résultats.