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().
La liste des contacts
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);
Transtypage explicite
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()); } } }