Conversation with Merlin [email protected] · Tue Jan 09 2024

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 "setSalaire Hebdo(double)" qui met à jour "salaireHebdo". Un constructeur à trois paramètres pour initialiser "prenom", "nom" et "SalaireHebdo". 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 "Travailleur Commission": 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 " Travailleur Piece". 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

Voici une implémentation possible des classes selon les instructions données:

// Classe abstraite Employe abstract class Employe { private String prenom; private String nom; public Employe(String prenom, String nom) { this.prenom = prenom; this.nom = nom; } public String getPrenom() { return prenom; } public String getNom() { return nom; } @Override public String toString() { return "Nom: " + nom + ", Prénom: " + prenom; } public abstract double gains(); } // Classe Patron final class Patron extends Employe { private double salaireHebdo; public Patron(String prenom, String nom, double salaireHebdo) { super(prenom, nom); setSalaireHebdo(salaireHebdo); } public void setSalaireHebdo(double salaireHebdo) { this.salaireHebdo = salaireHebdo; } @Override public double gains() { return salaireHebdo; } @Override public String toString() { return super.toString() + ", Statut: Patron, Salaire hebdomadaire: " + salaireHebdo; } } // Classe TravailleurCommission final class TravailleurCommission extends Employe { private double salaire; private double commission; private int quantite; public TravailleurCommission(String prenom, String nom, double salaire, double commission, int quantite) { super(prenom, nom); setSalaire(salaire); setCommission(commission); setQuantite(quantite); } public void setCommission(double commission) { this.commission = commission; } public void setQuantite(int quantite) { this.quantite = quantite; } public void setSalaire(double salaire) { this.salaire = salaire; } @Override public double gains() { return salaire + (commission * quantite); } @Override public String toString() { return super.toString() + ", Statut: Travailleur à la commission, Salaire de base: " + salaire + ", Commission: " + commission + ", Quantité: " + quantite; } } // Classe TravailleurPiece final class TravailleurPiece extends Employe { private double retributionParPiece; private int quantite; public TravailleurPiece(String prenom, String nom, double retributionParPiece, int quantite) { super(prenom, nom); setRetribution(retributionParPiece); setQuantite(quantite); } public void setRetribution(double retributionParPiece) { this.retributionParPiece = retributionParPiece; } public void setQuantite(int quantite) { this.quantite = quantite; } @Override public double gains() { return retributionParPiece * quantite; } @Override public String toString() { return super.toString() + ", Statut: Travailleur à la pièce, Rémunération par pièce: " + retributionParPiece + ", Quantité: " + quantite; } } // Classe de test TestEmploye public class TestEmploye { public static void main(String[] args) { Employe patron = new Patron("John", "Doe", 800.0); Employe travailleurCommission = new TravailleurCommission("Jane", "Roe", 400.0, 2.5, 150); Employe travailleurPiece = new TravailleurPiece("Jim", "Beam", 5.5, 200); Employe[] employes = { patron, travailleurCommission, travailleurPiece }; for (Employe e : employes) { System.out.println(e.toString()); System.out.println("Gains: " + e.gains()); System.out.println(); } } }

Dans ce code, nous avons respecté les directives données:

  • La classe Employe est abstraite avec un constructeur initialisant les variables privées prenom et nom, et une méthode abstraite gains().
  • Les trois classes dérivées (Patron, TravailleurCommission et TravailleurPiece) sont toutes finales et implémentent les méthodes gains() et toString().
  • Un tableau de type Employe a été créé et contient des instances des trois types d'employés. En itérant dessus, nous pouvons const