Conversation with Merlin [email protected] · Mon Dec 18 2023

Exercice 2: (17 points) L'objectif de l'exercice et de réaliser une application de paie qui calcule les salaires des employés d'une entreprise. Nous utilisons pour cela 4 classes: • Classe "Employe" : une superclasse abstraite. Elle contient :

Deux données membre privées "prenom" et "nom". Un constructeur à deux paramètres pour initialiser "prenom" et "nom". Deux méthodes "getprenom()" et getnom(). Une méthode toString(). Une méthode abstraite "gains()". 

.

Classe "Patron": ces employés ont un salaire hebdomadaire fixe. La classe hérite de "Employe". Elle contient Une donnée membre "salaireHebdo" de type double Une méthode "setSalaireHebdo(double)" qui met à jour "salaireHebdo". Un constructeur à trois paramètres pour initialiser "prenom", "nom" et "Salaire Hebdo". Cette méthode fait appel à la méthode "setSalaireHebdo(String)" pour mettre à jour le salaire. Une méthode "gains()" qui retourne la valeur du salaire. Une méthode "toString()" : à part le nom et le prénom, cette méthode doit préciser que c'est un patron. Classe "TravailleurCommission": le salaire est composé d'un salaire de base auquel s'ajoute un pourcentage lié aux ventes. La classe hérite de "Employe". Elle contient : Les données membres "salaire", "commission" et "quantite" Une méthode "setCommission (double)" qui met à jour "commission". Une méthode "setQuantite (int)" qui met à jour "quantite". Une méthode "setSalaire (double)" qui met à jour "salaire". Un constructeur à cinq paramètres pour initialiser "prenom", "nom", "salaire", "commission" et "quantite". Cette méthode fait appel aux trois méthodes précédentes. Une méthode "gains()" qui calcule et retourne la valeur du salaire Une méthode "toString(": à part le nom et le prénom, cette méthode doit préciser que c'est un travailleur à la commission. Classe "TravailleurPiece": rétribué selon le nombre de pièces produites. La classe hérite de "Employe".

Les données membres "retributionParPiece", "quantite". Une méthode " setRetribution(double)" qui met à jour" retributionParPiece ". Une méthode "setQuantite(int)" qui met à jour "quantite". Un constructeur à quatre paramètres pour initialiser "prenom", "nom", "salaire" et "retributionParPiece". Cette méthode fait appel aux deux méthodes précédentes. Une méthode "gains()" qui calcule et retourne la valeur du salaire Une méthode "toString()" : à part le nom et le prénom, cette méthode doit préciser que c'est un travailleur à la pièce. Remarque 1 les trois dernières classes sont déclarées "final" puisqu'on ne veut pas les dériver. Remarque 2: utilisez le plus possible les fonctions membres de la superclasse "Employe" Implémentez ces quatre classes puis écrivez une classe << TestEmploye » qui permet de · Créer un objet de type "Patron", " TravailleurCommission" et " TravailleurPiece". Afficher le nom, le prénom et le gain de ces employés de deux manières différentes : Appeler de la fonction "toString()" et "gains()" par chacun des objets créés. ·

Créer un tableau dont les éléments sont de types "Employe", mettre les trois employés dans ce tableau et appeler les méthodes "toString(" et "gains()" à partir des éléments de ce tableau. Que remarque-t-on ? Bon Travail

Pour réaliser l'application de paie demandée, il faut définir les classes selon les directives fournies. Voici exemple d'implémentation en Java :

Classe Employe :

public abstract class Employe { String prenom; private String nom; public Employe(String prenom, nom) { this.prenom = prenom; this.nom = nom; } public String getprenom() { return prenom; public String getnom() { return nom; } @Override public String toString() { return String.format("L'employé %s %s", pre, nom); } public abstract double gains(); }

Classe Patron :

public final class extends Employe { private double salaireHebdo; public Patron(String prenom, String nom, double salaire) { super(prenom, nom); setSalaireHebdo(sala); } public void setSalaireHebdo(double salaireHebdo) { this.sireHebdo = salaireHebdo; @Override public double gains() { return salaireHebdo; } @Override public String toString() { return String.format("Le patron %s %s", getprenom(), getnom()); } }

Cl TravailleurCommission :

public final class TravailleurCommission extends Employe { private double salaire; // Salaire base private double commission; private int quantite; public TravailleurCommission(String prenom, String nom, double salaire, double commission, quantite) { super(prenom, nom); setSalaire(salaire); setCommission(commission); setQuantite(quantite); } public void setSalaire(double salaire) { this.salaire = salaire; } public void set(double commission) { this.commission = commission; } public void setQuantite(int quantite) { this.quantite = quantite; } @Override public double gains() { return salaire + (commission * quantite); } @Override public String toString() { return String.format("Le travailleur à la commission %s %s", getprenom(), getnom()); } }

Classe TravailleurPiece :

public final class TravailleurPiece Employe { private double retributionParPiece; private int quantite; public Travailleur(String prenom, String nom, double retributionParPiece, int quantite) { superrenom, nom); setRetribution(retributionParPiece); setQuantite(quantite); } public void setRetrib(double retributionParPiece) { this.retributionParPiece = retributionParPiece; public void setQuantite(int quantite) { .quantite = quantite; } @Override public double gains() { return retributionParPiece * quantite; } @Override public String toString() { return String.format("Le travailleur à la pièce %s %s", getprenom(),nom()); } }

Classe TestEmploy :

public class TestEmploye { public static void main(String[] args) { Patron patron = new Patron("Jean", "Dupont", 1000.0); TravleurCommission travailleurCommission = new TravailleurCommission("Marie", "Curie", 400.0, 30., 50); TravailleurPiece travailleurPiece new TravailleurPiece("Henri", "Poincaré", 5.0, 300); Employe[] employes = new Employe[] { patron, travailleur, travailleurPiece }; for (Employe employe employes) { System.out.println(employe.toString() + " a un de " + employe.gains()); } }

À la fin du programme TestEmploye, remarque que bien que chaque objet soit instancié à partir d'une classe différente, leorphisme nous permet de traiter ces objets de man générale via une référence de la superclasse Employe En utilisant les méthodes toString()etgains()` définies (et évent surchargées) dans chaque classe, on peut obtenir les informations pertinentes pour chaque type d'employé sans avoir besoin de savoir de quel type spécifique