ouvert_a_tous:slam2:tp4:avecheritage:programme_principal

Points Importants

Il est simplifié car le formatage des chaîne d'affichage est à la charge des classes métier par l'intermédiaire du polymorphisme et de la méthode : chaineAffichageEnModeTexte().

C'est maintenant une liste de Personnes.

    ArrayList<Personne> repertoire = new ArrayList<Personne>();

On peut y stocker n'importe quel type d'objet du moment que leur classe hérite de la classe Personne.

    Personne agent1 = new Agent("n_ag1", "p_ag1", new Adresse("1", "rue 1", "", new Commune("59000", "Lille")));
    (Agent) agent1).setSpecialite("Plombier");
    Personne agent2 = new Agent("n_ag2", "p_ag2", new Adresse("2", "rue 2", "", new Commune("06000", "Nice")));
    ((Agent) agent2).setSpecialite("Jardinier");
 
    Eleve elv1 = new Eleve("n_elv1", "p_elv1", new Adresse("3", "rue du Daim", "", new Commune("01000", "Bourg-en-Bresse")));
    elv1.setLangueVivante1("Anglais");
    elv1.setNumEN("11111");
    elv1.setNumTel("11 11 11 11 ");
    elv1.setAdresseCourriel("elv1@elv1.fr");
    repertoire.add(agent1);
    repertoire.add(lyc1);
    repertoire.add(elv1);
    repertoire.add(ensgnnt1);

Lors de l'affichage, il ne faut plus faire un transtypage (ou cast) explicite pour pouvoir appeler les méthodes spécifiques à l'objet récupéré dans la liste : la méthode get(i) renvoie une Personne.

   Personne prsnn= prmListe.get(i);

On pourra écrire :

       String ch = o.getNom();

Car la méthode getNom() existe dans la classe Personne.

Le polymorphisme passe par l'utilisation de la méthode chaineAffichageEnModeTexte().

On écrit :

   Personne prsnn = prmListe.get(i);
   System.out.println(prsnn.chaineAffichageEnModeTexte());

La méthode qui est réellement exécutée dépend automatiquement du type réel de l'objet prsnn. Pour un agent c'est ceci qui est exécuté :

Pour un élève c'est ceci :

Le code Complet

package tp4;
 
import java.util.ArrayList;
import tp4.commun.Adresse;
import tp4.commun.Commune;
import tp4.commun.Matiere;
import tp4.avecheritage.Personne;
import tp4.avecheritage.Agent;
import tp4.avecheritage.Eleve;
import tp4.avecheritage.Fournisseur;
import tp4.avecheritage.Enseignant;
import tp4.avecheritage.Lycee;
 
/**
 * Write a description of class ProgrammePrincipalSansHeritage here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class ProgrammePrincipalAvecHeritage {
 
    public static void main(String[] parametresChaines) {
        ArrayList<Personne> repertoire = new ArrayList<Personne>();
        Matiere matSio1 = new Matiere("", "");
        matSio1.setLibelle("SIO1");
        Matiere matSlm1 = new Matiere("", "");
        matSlm1.setLibelle("SLAM1");
 
        Personne agent1 = new Agent("n_ag1", "p_ag1", new Adresse("1", "rue 1", "", new Commune("59000", "Lille")));
        ((Agent) agent1).setSpecialite("Plombier");
        Personne agent2 = new Agent("n_ag2", "p_ag2", new Adresse("2", "rue 2", "", new Commune("06000", "Nice")));
        ((Agent) agent2).setSpecialite("Jardinier");
 
        Eleve elv1 = new Eleve("n_elv1", "p_elv1", new Adresse("3", "rue du Daim", "", new Commune("01000", "Bourg-en-Bresse")));
        elv1.setLangueVivante1("Anglais");
        elv1.setNumEN("11111");
        elv1.setNumTel("11 11 11 11 ");
        elv1.setAdresseCourriel("elv1@elv1.fr");
        Eleve elv2 = new Eleve("n_elv2", "p_elv2", new Adresse("3", "rue d'Eu", "", new Commune("02000", "Laon")));
        elv2.setLangueVivante1("Espagnol");
         elv2.setNumEN("22222");
        elv2.setNumTel("22 22 22 22 22");
        elv2.setAdresseCourriel("elv2@elv2.fr");
        Enseignant ensgnnt1 = new Enseignant("n_p1", "p_p1", new Adresse("1", "rue 1", "", new Commune("59000", "Lille")));
        ensgnnt1.setNumTel("01234567890");
        ensgnnt1.setAdresseCourriel("ensgnnt1@lyceejeanbart.fr");
        ensgnnt1.ajouter(matSio1);
        ensgnnt1.ajouter(matSlm1);
 
        Lycee lyc1 = new Lycee("Jean BART", new Adresse("2", "rue 2", "", new Commune("59140", "Dunkerque")));
        lyc1.setCategorie("Lycée Polyvalent");
        lyc1.setNumTel("0328244848");
        lyc1.setAdresseCourriel("infos@lyceejeanbart.fr");
        Lycee lyc2 = new Lycee("de l'Europe", new Adresse("2", "rue du Banc Vert", "", lyc1.getAdresse().getCommune()));
        lyc2.setCategorie("Lycée Général Scientifique et Technologique");
 
        Fournisseur frnssr1 = new Fournisseur("frnssr1");
        frnssr1.setAdresse(new Adresse("F1", "rue de L'an", "", new Commune("02000", "Laon")));
        frnssr1.setNumSIRET("123456");
 
        repertoire.add(agent1);
        repertoire.add(agent2);
        repertoire.add(elv1);
        repertoire.add(elv2);
        repertoire.add(ensgnnt1);
        repertoire.add(lyc1);
        repertoire.add(lyc2);
        System.out.println(repertoire);
        affichage(repertoire);
    }
 
    private static String adresseUneLigne(Adresse pAdrss) {
        String ch;
        ch = pAdrss.getNumero() + " " + pAdrss.getAdresse1() + " " + pAdrss.getAdresse2() + " " + pAdrss.getCommune().getCodePostal() + " " + pAdrss.getCommune().getNom();
        return ch;
    }
 
    private static String adresseEtiquette(Adresse pAdrss) {
        String ch;
        ch = pAdrss.getNumero() + " " + pAdrss.getAdresse1() + "\n" + pAdrss.getAdresse2() + "\n" + pAdrss.getCommune().getCodePostal() + " " + pAdrss.getCommune().getNom();
        return ch;
    }
 
    private static void affichage(ArrayList<Personne> prmListe) {
        for (int indP = 0; indP < prmListe.size(); indP++) {
            Personne p = prmListe.get(indP);
            System.out.println(p.chaineAffichageEnModeTexte());
        }
    }
}

Résultat de l'exécution du programme

  • ouvert_a_tous/slam2/tp4/avecheritage/programme_principal.txt
  • Dernière modification : 2022/12/03 07:45
  • de 127.0.0.1