Points Importants
La liste des contacts
ArrayList repertoire = new ArrayList();
On peut y stocker n'importe quel type d'objet.
repertoire.add(agent2); repertoire.add(lyc1); repertoire.add(elv1); repertoire.add(ensgnnt1);
Transtypage explicite
Lors de l'affichage, il faut 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 un Object.
Object o = prmListe.get(i);
On ne pourra pas écrire :
String ch = o.getNom();
Car la méthode getNom() n'existe pas dans la classe Object.
Il faudra donc écrire :
// La ligne suivante n'est pas nécessaire : elle n'est présente que pour montrer ce qui se passe // System.out.println("==========\no = " + o.getClass().getName()); if (o.getClass() == Agent.class) { Agent a = (Agent) o; String ch = a.getNom() + " " + a.getPrenom(); ......
Le code Complet
package tp4; import java.util.ArrayList; import tp4.commun.Adresse; import tp4.commun.Commune; import tp4.commun.Matiere; import tp4.sansheritage.*; public class ProgrammePrincipalSansHeritage { public static void main(String[] parametresChaines) { ArrayList repertoire = new ArrayList(); Matiere matSi1 = new Matiere("SI1", ""); matSi1.setLibelle("Solutions In... 1"); Matiere matSlm1 = new Matiere("SLAM2", ""); matSlm1.setLibelle("Solutions Logicielles... 2"); Agent agent1 = new Agent("n_ag1", "p_ag1", new Adresse("1", "rue 1", "App1", new Commune("59000", "Lille"))); agent1.setSpecialite("Plombier"); Agent agent2 = new Agent("n_ag2", "p_ag2", new Adresse("2", "rue 2", "Entrée2", new Commune("06000", "Nice"))); agent2.setSpecialite("Jardinier"); Eleve elv1 = new Eleve("n_elv1", "p_elv1", new Adresse("3", "rue de Troyes", "", new Commune("02000", "Laon"))); elv1.setLangueVivante1("Anglais"); Eleve elv2 = new Eleve("n_elv2", "p_elv2", new Adresse("3", "rue d'Eu", "", new Commune("02000", "Laon"))); elv2.setLangueVivante1("Espagnol"); Enseignant ensgnnt1 = new Enseignant("n_ens1", "p_ens1", new Adresse("11", "rue de l'Ain", "", new Commune("59000", "Lille"))); ensgnnt1.ajouter(matSi1); ensgnnt1.ajouter(matSlm1); Lycee lyc1 = new Lycee("Jean BART", new Adresse("2", "rue 2", "BP 1234", new Commune("59140", "Dunkerque"))); lyc1.setCategorie("Lycée Polyvalent"); Lycee lyc2 = new Lycee("de l'Europe", new Adresse("2", "rue du Banc Vert", "BP 5678", 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(lyc1); repertoire.add(elv1); repertoire.add(ensgnnt1); repertoire.add(lyc2); repertoire.add(elv2); System.out.println(repertoire); affichage(repertoire); } private static void affchgLgn(String prmLigne) { System.out.println("--------\n" + prmLigne); } // Affiche une adresse sur une seule ligne. private static String adresseUneLigne(Adresse pAdrss) { String ch = ""; ch = pAdrss.getNumero() + " " + pAdrss.getAdresse1() + " "; ch = ch + pAdrss.getAdresse2() + " - " + pAdrss.getCommune().getCodePostal(); ch = ch + " " + pAdrss.getCommune().getNom(); return ch; } // Affiche une adresse sous forme "rectangulaire" (sur plusieurs lignes) 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 prmListe) { // Parcours de la liste for (int i = 0; i < prmListe.size(); i++) { Object o = prmListe.get(i); System.out.println("==========\no = " + o.getClass().getName()); if (o.getClass() == Agent.class) { Agent a = (Agent) o; String ch = a.getNom() + " " + a.getPrenom(); ch = ch + " - " + adresseUneLigne(a.getAdresse()); affchgLgn(ch + " : " + a.getSpecialite()); } else { if (o.getClass() == Eleve.class) { Eleve e = (Eleve) o; affchgLgn(e.getNom() + " " + e.getPrenom() + " " + adresseUneLigne(e.getAdresse()) + " " + e.getLangueVivante1()); } else { if (o.getClass() == Enseignant.class) { Enseignant ens = (Enseignant) o; Matiere[] matrs = ens.getSesMatieres(); String ch = " - Matières : "; for (int indMat = 0; indMat < ens.nombreDeMatieres(); indMat++) { ch = ch + matrs[indMat].getLibelle()+ " "; } affchgLgn(ens.getNom() + " " + ens.getPrenom() + " " + adresseUneLigne(ens.getAdresse()) + " " + ch); } else { if (o.getClass() == Lycee.class) { Lycee lc = (Lycee) o; affchgLgn(lc.getCategorie() + " " + lc.getNom()); affchgLgn(adresseEtiquette(lc.getAdresse())); } else { if (o.getClass() == Fournisseur.class) { Fournisseur frnssr = (Fournisseur) o; affchgLgn(frnssr.getNom() + " " + frnssr.getNumSIRET()); affchgLgn(adresseEtiquette(frnssr.getAdresse())); } } } } } } } }
Résultat de l'exécution du programme
[tp4.sansheritage.Agent@19106c7, tp4.sansheritage.Agent@540408, tp4.sansheritage.Lycee@1d4c61c, tp4.sansheritage.Eleve@1a626f, tp4.sansheritage.Lycee@34a1fc, tp4.sansheritage.Eleve@176c74b, tp4.sansheritage.Enseignant@116471f] ========== o = tp4.sansheritage.Agent -------- n_ag1 p_ag1 - 1 rue 1 App1 - 59000 Lille : Plombier ========== o = tp4.sansheritage.Agent -------- n_ag2 p_ag2 - 2 rue 2 Entrée2 - 06000 Nice : Jardinier ========== o = tp4.sansheritage.Lycee -------- Lycée Polyvalent Jean BART -------- 2 rue 2 BP 1234 59140 Dunkerque ========== o = tp4.sansheritage.Eleve -------- n_elv1 p_elv1 3 rue de Troyes - 02000 Laon Anglais ========== o = tp4.sansheritage.Lycee -------- Lycée Général Scientifique et Technologique de l'Europe -------- 2 rue du Banc Vert BP 5678 59140 Dunkerque ========== o = tp4.sansheritage.Eleve -------- n_elv2 p_elv2 3 rue d'Eu - 02000 Laon Espagnol ========== o = tp4.sansheritage.Enseignant -------- n_ens1 p_ens1 11 rue de l'Ain - 59000 Lille - Matières : Solutions In... 1 Solutions Logicielles... 2