Polymorphisme

Résolu/Fermé
Java_question - Modifié le 11 déc. 2017 à 14:43
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 11 déc. 2017 à 14:50
Bonjour,
Je voudrais savoir si vous avez quelque suggestions pour optimiser/factoriser mon code surtout au niveau de la méthode getNbreEmployers().On voudrait être capable de savoir le nombre d’employers créés dans chaque catégorie à tout instant.
public abstract class Employer {
 protected String nom,prenom;
 protected int age;
 protected int anciennete;
 protected static int nbreEmployers=0;
 public Employer(String nom, String prenom, int age, int anciennete) {
  this.nom = nom;
  this.prenom = prenom;
  this.age = age;
  this.anciennete = anciennete;
  ++nbreEmployers;
 }
 public String getNom() {
  return nom;
 }
 public void setNom(String nom) {
  this.nom = nom;
 }
 public String getPrenom() {
  return prenom;
 }
 public void setPrenom(String prenom) {
  this.prenom = prenom;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public int getAnciennete() {
  return anciennete;
 }
 public void setAnciennete(int anciennete) {
  this.anciennete = anciennete;
 }
 public abstract double calculer_salaire();
 public String toString() {
   return prenom+" "+nom+" gagne "+this.calculer_salaire()+" Dhs par mois";
  }
 public static int getNbreEmployers() {
  return nbreEmployers;
 }
}
public class Manutentionnaires extends Employer {
 private double tarifHoraire;
 private int nbHeures;
 private static int nbreEmployers_m=0;
 public Manutentionnaires(String nom, String prenom, int age, int anciennete, double tarifHoraire,int nbHeures) {
  super(nom, prenom, age, anciennete);
  this.tarifHoraire=tarifHoraire;
  this.nbHeures=nbHeures;
  ++nbreEmployers_m;
 }
 public double getTarifHoraire() {
  return tarifHoraire;
 }
 public void setTarifHoraire(double tarifHoraire) {
  this.tarifHoraire = tarifHoraire;
 }
 public double calculer_salaire() {
  return tarifHoraire * nbHeures; 
 }
 public static int getNbreEmployers_m() {
  return nbreEmployers_m;
 }
}
public class Commerciaux extends Employer {
 private double salaireBase;
 private double chiffreAffaire;
 private static int nbreEmployers_c=0;
 public Commerciaux(String nom, String prenom, int age, int anciennete,double salaireBase,double chiffreAffaire) {
  super(nom, prenom, age, anciennete);
  this.salaireBase=salaireBase;
  this.chiffreAffaire=chiffreAffaire;
  ++nbreEmployers_c;
 }
 public double calculer_salaire() {
  return salaireBase + 0.015* chiffreAffaire; 
 }
 public static int getNbreEmployers_c() {
  return nbreEmployers_c;
 }
}

...Ainsi de suite(Je ne vais pas vous montrer toutes les classes filles)
Merci d'avance.

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
11 déc. 2017 à 14:50
Bonjour,

"On voudrait être capable de savoir le nombre d’employers créés dans chaque catégorie à tout instant."
Ici tu ne comptes pas le nombre d'employés, mais tu comptes le nombre d'objets créés, c'est assez différent car tu mélanges la conception technique de la classe avec ce qu'elle représente.

Dans ce genre de cas il faudrait plutôt créer une classe, Usine par exemple, qui stockerait la liste de chacun des employés, le nombre d'employés serait donc associé à la taille de cette liste.

public class Usine {

    private final List<Employe> employes;

    // ...

    public int getNbreEmployes() {
        return employes.size();
    }
}
0