ouvert_a_tous:slam2:tp4:avecheritage:classe_personne

Corrigé indicatif : avec Héritage

Personne.java . Clic droit avec la souris pour récupérer le fichier. Attention : Le fichier doit être renommé avec une initiale en majuscule avant de l'enregistrer sur votre disque.

  • Initialisation des attributs avec des valeurs par défaut ou création d'objets.
  • this() pour appeler le constructeur non paramétré de cette classe.
  • le code du constructeur non paramétré n'est pas très lisible : il pourrait être bien de le déplacer dans une classe utilitaire nommée SequencePersonne.

Pour vous montrer :

  • comment gérer un fichier Properties
  • Gestion des exceptions
  • IOException et try{} catch{}

Contenu du fichier sequenceIdPersonne.properties :

#Sat May 12 12:26:16 CEST 2012
numId=41

Le code Java

package tp4.avecheritage;
 
import java.util.Properties;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
 
import java.io.File;
 
import java.util.logging.Level;
import java.util.logging.Logger;
 
import tp4.commun.Adresse;
 
/**
 * La classe Personne décrit un objet qui a un nom, une adresse, un numéro de
 * téléphone et une adresse de courriel. Il y a une légère modification par
 * rapport au sujet. Une personne a, aussi, un identifiant.
 *
 * @author BA
 * @version 1.0
 */
public abstract class Personne {
 
    /**
     * Constructeur pour des objets de classe Personne. Initialise l'objet avec
     * des valeurs par défaut.
     */
    public Personne() {
        // initialise les variables d'instance avec des valeurs par défaut.
        nom = null;
 
        Properties prop = new Properties();
        File f = new File("G:/fichiersDeDonness/sequenceIdPersonne.properties");
        if ( ! f.exists() ){
            try{
                prop.setProperty("numId", "0");
                prop.store(new FileOutputStream("G:/fichiersDeDonness/sequenceIdPersonne.properties"), null);
            } catch (IOException ex) {
                Logger.getLogger(Personne.class.getName()).log(Level.SEVERE, null, ex);
            } 
        }
        else{
            System.out.println("url else != null");
        }
 
        try {
            prop.load(new FileInputStream("G:/fichiersDeDonness/sequenceIdPersonne.properties"));
            String numCh=prop.getProperty("numId");
            numId = Integer.valueOf(numCh)+1;
            prop.setProperty("numId",String.valueOf(numId));
             prop.store(new FileOutputStream("G:/fichiersDeDonness/sequenceIdPersonne.properties"), null);
        } catch (IOException pExcptn) {
            pExcptn.printStackTrace();
        }
    }
 
    /**
     * Constructeur paramétré pour les objets de classe Personne.
     */
    public Personne(String pNom) {
        // initialise les variables d'instance (attributs) avec les valeurs des paramètres reçus.
        this(); // Exécution du constructeur non paramétré
        nom = pNom;
        System.out.println("Personne + nom");
    }
 
    /**
     * Constructeur paramétré pour les objets de classe Personne.
     */
    public Personne(String pNom, Adresse pAdrs) {
        // initialise les variables d'instance (attributs) avec les valeurs des paramètres reçus.
        this();  // Exécution du constructeur non paramétré
        nom = pNom;
        adresse = pAdrs;
        System.out.println("Personne + nom+ adresse");
    }
 
    public final String getNom() {
        return nom;
    }
 
    public void setNom(String value) {
        nom = value;
 
    }
 
    public final String getNumTel() {
        return numTel;
    }
 
    public void setNumTel(String value) {
        numTel = value;
    }
 
    public final Adresse getAdresse() {
        return adresse;
    }
 
    public void setAdresse(Adresse value) {
        adresse = value;
    }
 
    public final String getAdresseCourriel() {
        return adresseCourriel;
    }
 
    public void setAdresseCourriel(String value) {
        adresseCourriel = value;
    }
 
    public int getNumId() {
        return numId;
    }
 
    /**
     * Cette méthode renvoie une chaîne de caractères. Cette méthode est
     * abstraite car ce qui est renvoyé dépend de l'objet (la classe) dont on
     * doit afficher les informations essentielles. Le format des données
     * renvoyées déepnd de la classe. Le contenu de cette méthode devra être
     * re-défini dans les classes héritières de la classe Personne.
     */
    public abstract String chaineAffichageEnModeTexte();
    /**
     * variables d'instance
     */
    private int numId;
    private String nom;
    private String numTel;
    private Adresse adresse;
    private String adresseCourriel;
 
}
  • ouvert_a_tous/slam2/tp4/avecheritage/classe_personne.txt
  • Dernière modification : 2022/12/03 07:45
  • de 127.0.0.1