Latest Updates: constructeur RSS

  • This: Le mot clef "this" pour déclarer des variables dans un constructeur

    admin 19 h 18 min on 29 septembre 2009 | 0 Permalink | Reply
    Tags: constructeur, ,

    A quoi sert le mot clef « this » en Java ?
    Le mot clef this permet de faire référence à une variable de classe. Souvent, lorsque l’on utilise un constructeur personnalisé pour instancié un objet, il est pratique de reprendre comme nom de variable dans le constructeur, le même nom qu’une variable de classe. Or étant donnée que la variable de classe et la variable déclarée dans le constructeur sont deux variables différente en mémoire, il faut préciser à Java de à quelle variable est ce qu’on l’on fait référence lorsque l’on déclare des variables dans un constructeur.

    Exemple par le code :

    
    public class MaTortue {
    String couleur="vert";
    String type="tortue";
    int age = 2;
    
    public MaTortue (String couleur, int age){
    	this.couleur = couleur; //on récupére la variable couleur de la classe MaTortue et on l'assigne au constructeur que l'on est en train de créer
    	this.age= age; // idem pour la variable age
    
    }
    
    	public static void main (String[] args){
    		MaTortue turtle = new MaTortue("brune",3);
    		System.out.println("cette nouvelle tortue est de couleur " + turtle.couleur + " et est âgée de " + turtle.age + " ans"); // l'objet de type "MaTortue" contenu dans la variable "turtle" possède maintenant une couleur brune et est agée de 2ans
    	} 
    
    }
    



    Explication du code :
    On commence par créer la classe MaTortue et on lui assigne des variables par défaut (notamment une couleur verte, et un âge de 2ans). Ensuite on va déclarer un constructeur personnalisé à partir de la classe MaTortue. Ce constructeur personnalisé va réassigner des valeurs aux variables issues de la classe MaTortue à l’aide du mot clef « this ». Le mot clef « this » permet de distinguer les variables « couleur» et « âge », présente dans la déclaration du constructeur, vis-à-vis des variables initialisées dans la déclaration de la classe MaTortue.
    Ainsi, les objets de type MaTortue qui seront crées dans la méthode main, pourront utiliser ce nouveau constructeur pour « construire » (instancier) des nouveaux objets de types MaTortue possédant des autres couleurs, des autres âges.

     
  • Constructeur d’objet personnalisé en Java : comprendre les bases des constructeurs d’objets

    admin 18 h 27 min on 29 septembre 2009 | 0 Permalink | Reply
    Tags: constructeur,

    Je trouve que la notion de constructeur n’est pas très facile à comprendre pour une personne qui débute dans l’étude du langage java sans jamais avoir étudié de programmation orientée objet.

    Un constructeur permet, entre autre, d’assigner des valeurs aux variables de l’objet, lors de son instanciation.

    Exemple avec du code :

    Pour comprendre à quoi servent les constructeur, peut être vaut-il mieux commencer à lire le code à partir de la ligne n°30. Commencer par lire les déclarations des constructeurs, avant que l’on instancie les objets de ces constructeurs dans la méthode main.

    
    public class Constructeurs {
    	public static void main(String[] args) {
    		Maman m = new Maman();
    		Maman m1 = new Maman("Jojo", "Marie", 29);
    
    		Papa p = new Papa();
    		Papa p1 = new Papa();
    		Papa p2 = new Papa();
    
    		p1.setNom("Dupont");// ici on va créer un premier objet de type papa et on assigne des valeurs aux variables qui caractérisent l'objet papa, en utilisant la méthode "set"
    		p1.setPrenom("Pierre");
    		p1.setAge(50);
    
    		p2.setNom("Paul");//idem que le premier objet de type papa (p1), on crée un deuxième objet de type papa, pour l'exemple, et on lui assigne des valeurs de variable via la méthode set
    		p2.setPrenom("Julien");
    		p2.setAge(49);
    
    		// les variables p3 et p4 permettent de distinguer les deux objets issus de la classe Papa
    		Papa p3 = new Papa("Marc", "Louis", 34);// les variables assignées aux 3èmes et 4èmes objets de type papa le sont directement via leur constructeurs respectif, ici même.
    		Papa p4 = new Papa("Pierre", "Luc", 47);
    
    		System.out.println(p1.prenom);// on affiche le tout pour l'exemple
    		System.out.println(p2.prenom);
    		System.out.println(p3.prenom);
    		System.out.println(p4.prenom);
    	}
    }
    
    class Personne {
    	String nom, prenom;
    	int age;
    }
    
    class Parent extends Personne {
    }
    
    class Papa extends Parent {
    	public Papa() {// constructeur par défault
    
    	}
    	public Papa(String n, String p, int a) {// Ici on utilise un constructeur personnalisé pour assigner des valeurs aux variables qui caractérisent la classe papa
    		nom = n;
    		prenom = p;
    		age = a;
    	}
    	public void setNom(String n) {
    		nom = n;
    	}
    	public void setPrenom(String prenom) {
    		this.prenom = prenom;//le mot clef "this" permet de dire à Java qu'il s'agit de la variable "prenom" issue de la classe personne.
    	}
    	public void setAge(int a) {
    		age = a;
    	}
    }
    
    class Maman extends Parent {
    	//int taille;
    	public Maman() {
    		System.out.println("Maman vide");
    	}
    
    	public Maman(String nom, String prenom, int a) {
    		this.nom = nom;
    		this.prenom = prenom;
    		age = a;
    
    		System.out.println("Maman remplie");
    	}
    }
    

    Explication sur l’utilisation des constructeurs dans ce code :

    Dans ces lignes de code, on va créer  quatre classes.

    1. La classe « personne »
    2. La classe « Parent »
    3. La classe « Papa »
    4. La classe « maman »

    On commence par créer une classe personne (personne dans le sens « une personne-un personnage »).  On y déclare 3 variables qui permettent de stocker un nom, un prénom et un âge.

    On construit ensuite la classe Parent qui reprend les caractéristiques de la classe personne (via le mot-clef « extends »).

    On construit la classe Papa qui reprend les caractéristiques de la classe nommée « Parent » (encore via le mot clef « extends ».) A partir de la classe Papa, on commence à voir l’utilité d’utiliser un constructeur, parce que l’on va assigner des valeurs de variable via  le constructeur.

    Dans cette classe Papa, on place les variables d’instance dans des variables définis par le constructeur de la classe.  Ensuite, on va assigner des valeurs à ces variables du constructeur (D’abord via le constructeur, et ensuite pour l’exemple via la méthode set).

    On construit ensuite la classe Maman.

    Cette classe utilise le mot-clef extends pour reprendre les caractéristiques de la classe Parent. Pour l’exemple, on a déclaré 3 variables dans les variables du constructeur : deux variables (nom, prénom) qui portent le même nom que les variables d’instance de la classe, et une variable qui porte un nom différent. Cela nous permet de voir quel est l’utilité du mot-clef « this » dans le cas présent.

    Lorsqu’une variable déclarée dans un constructeur porte le même nom qu’une variable d’instance de classe, on utilise le mot clef « this » pour distinguer les deux variables portant le même nom.

    La méthode main

    Jusqu’à présent, on s’est contenté de définir des constructeurs dans les classes Papa et Maman. Dans la méthode main, on va utiliser les définitions déclarées par ces constructeurs pour créer tout les objets que l’on souhaite. L’avantage des constructeurs est donc de définir plusieurs prototypes avant leur instanciation.

    Dans cette méthode main, on va créer 2 objets de type Maman, et 5 objets de type Papa.

    Voyons ce qui se passe pour chacune des instanciations d’objets :

    1. Maman m = new Maman();  //ici rien à commenter. Il s’agit du constructeur par défaut.
    2. Maman m1 = new Maman( »Jojo », « Marie », 29);  //Ici par contre on peut voir toute l’utilité des constructeurs, pourquoi ? car on définit directement des valeurs de variable dans les constructeurs.
    3. Papa p1 = new Papa(); //constructeur par défaut, qui va nous servir à appeler la méthode set sur les objets crées.
    4. p1.setNom( »Dupont »); // contrairement à « m1 » on ne donne pas de valeurs aux variables de l’objet via son constructeur mais via l’appel de la méthode « set »

      p1.setPrenom( »Pierre »);

      p1.setAge(50);

    5. Papa p2 = new Papa(); //idem que pour Papa p1, on assigne des valeurs aux variables qui caractérisent l’objet, via la méthode set.

      p2.setNom( »Paul »);

      p2.setPrenom( »Julien »);

      p2.setAge(49);

    6. Papa p3 = new Papa( »Marc », « Louis », 34); //ici par contre, on assigne des valeurs aux variables qui caractérisent l’objet, directement dans sont constructeur lors de son instanciation. Tout comme on le faisait pour l’objet contenu dans la variable « m1 »
    7. Papa p4 = new Papa ( »Pierre », « Luc », 47); // idem que pour Papa p3

    Ensuite on appel la méthode System.out.println () ; afin de faire afficher les prénoms des objets de type Papa (p1, p2, p3, p4).

     
  • Manipulations sur les dates et gestion des exeptions avec le mot clef throws

    admin 14 h 15 min on 19 septembre 2009 | 0 Permalink | Reply
    Tags: constructeur, dates, ,

    public class MaMontre {
    	public static void main(String[] args) {
    		Watch h1 = new Watch(); //Instanciation d'un objet watch (une montre)
    		Watch h2 = new Watch(23, 58); //Instanciation d'un objet watch, on précise nous même l'heure lors de l'instanciation de l'objet
    		//Watch h3 = new Watch(29, 588); // si on décommente, le programme doit planter (ERROR)
    
    		h1.printHour(); // minuit
    		h1.tick(); // minuit 1 minute
    		h1.printHour();
    
    		h2.printHour(); // 23:58
    		h2.tick();
    		h2.tick();
    		h2.tick();
    		h2.printHour();
    		h2.tick(60);
    		h2.printHour();
    
    		System.out.println("----------------------------------------");
    		Watch w = new Watch (23, 58);
    	    w.printHour();
    
    	    w.tick();
    	    w.printHour();
    
    	    w.tick (5);
    	    w.printHour();
    	}
    }
    
    class Watch { //création d'une classe watch, variables d'initialisations dés la ligne suivante
    	int heures;
    	int minutes;
    
    	Watch() { // par défaut : 00h00
    		heures = 0;
    		minutes = 0;
    	}
    
    	/*
    	 * throws Exception dans la signature du constructeur permet de dire
    	 * à Java que ce constructeur, lorsqu'il est appelé, peut éventuellement
    	 * lancer une nouvelle Exception
    	 *
    	 * => l'instruction throw new Exception("..."); permet de dire à Java
    	 * qu'il faut créer un objet Exception avec un String en paramètre pour
    	 * donner le motif et ensuite le throw permet de lancer l'exception
    	 */
    	Watch(int h, int m) throws Error { // heure : hh:mm
    		// petite vérification
    		if(h > 23 || h < 0 || m > 59 || m < 0) { // problème !
    			throw new Error("Erreur : heure incorrecte.");//définition d'un message d'erreur
    		}
    		heures = h;
    		minutes = m;
    	}
    
    	public void tick() {
    		if(minutes == 59) { // le cas XX : 59
    			if(heures == 23) { // le cas 23 : 59
    				heures = 0; // XX + 1 = 0
    				minutes = 0;
    			} else {
    				heures += 1; // XX + 1
    				minutes = 0;
    			}
    		} else {
    			minutes += 1; // le cas sans problème
    		}
    	}
    	public void tick(int n) {
    		// cette boucle permet de tick() n fois
    		for(int i = 0; i < n; i++) {
    			tick();
    		}
    	}
    
    	/*
    	 * on surcharge (override) la méthode toString héritée de l'objet Object (parent de tous les
    	 * objets) et on renvoie un String qui est la représentation de l'objet courant càd
    	 * les heures et les minutes de l'horloge
    	 */
    	public String toString() {
    		return heures + ":" + minutes;
    	}
    
    	public void printHour() {
    		System.out.println(this);
    	}
    
    }
    
     
  • Héritage classe parents/enfants (4)

    admin 14 h 47 min on 17 septembre 2009 | 0 Permalink | Reply
    Tags: constructeur, ,

    Création d’une classe Main dans laquelle on va appeler la méthode main. La méthode main est comme la porte d’entrée du programme. Lorsque le code sera exécuté, Java commence par aller voir ce qui se trouve dans la méthode main.

    </code>
    public class Main {
    public static void main(String[] args) {
    Chien chien = new Chien(); // appel du constructeur via le mot-clef "new"
    Chien pomme = new Chien("pluto");
    Chien poire = new Chien("rex", 5); // poire est une variable de type Chien qui représente un chien appelé rex de 5 ans
    Chien medor = new Chien(10);
    System.out.println(chien.nom); // affichera "par default"
    System.out.println(pomme.nom); // affichera "pluto"
    System.out.println(poire.nom); // affichera "rex"
    System.out.println(medor.nom); // affichera "par default"
    System.out.println(pomme.âge); // affichera O
    System.out.println(poire.âge); // affichera 5
    System.out.println(medor.âge); // affichera 10
    System.out.println(pomme.equals(poire)); // affichera fasle suite au test de la méthode equals
    Pinguin p1 = new Pinguin();   // instanciation d'un objet de type Pingouin
    Pinguin p2 = new Pinguin();   // instanciation d'un second objet de type Pingouin
    System.out.println(p1.equals(p2)); // test si ces deux objets Pinguoin sont les mêmes, affichera "true"
    Chat Victor = new Chat(); // instanciation d'un objet de type Chat
    Chat Gustave = new Chat("gustave"); // instanciation d'un objet de type Chat, on lui donne le nom Gustave via son         constructeur
    System.out.println (Victor.nom); // affichera Victor
    System.out.println (Victor.SaitGrimperAuxArbres); //affichera "true"
    System.out.println (Gustave.nom + " " +  Gustave.pays); // affichera "Gustave Belgique"
    System.out.println ( Gustave.SaitGrimperAuxArbres); //affichera "false"
    System.out.println (Victor.pays);//affichera "france"
    //nouvelle technique pour constuire un objet, mnt on crée l'objet sans déclarer de variable
    System.out.println(new Chien("WOUFFFFFFFFFFFFFFFFF").dire("wouuuufffff"));//affichera "bonne nuit à demain !,    wouf wouf !!, ok!! ok!! wouuufff"
    Chien[] tableauDeChiens = new Chien[10];//création d'un tableau contenant 10 objet chiens dans ses cellules  d'indices
    tableauDeChiens[0] = pomme; // mnt dans le tableau nommé tableauDeChiens il se trouve un chien représenté par la   variable pomme, à l'indice 0
    }
    }
    
    <code>

     
  • Héritage classe parents/enfants (3)

    admin 14 h 32 min on 17 septembre 2009 | 2 Permalink | Reply
    Tags: constructeur, ,

    public class Chat extends AnimalFamilier {
    boolean SaitGrimperAuxArbres;
    String pays;
    Chat () {
    // variables d'initiatilisation
    âge = 20;
    poids = 7;
    SaitGrimperAuxArbres = true;
    nom = "Victor"; // on donne un nom au chat via les variables d'initialisation
    pays="france";
    }
    
    Chat (String Gustave){  // On donne un nom au chat dans le constructeur
    SaitGrimperAuxArbres = false;
    âge= 10;
    pays = belgique;
    nom = Gustave;
    }
    }
    

    Création de la classe enfant Chat qui hérite des caractéristiques de la classe parente. Pour faire hériter les caractéristiques de la classe parente, on utilise le mot clef extends lors de la déclaration de la classe Chat.

    Et maintenant on va créer une classe enfant nommée Pingouin.

    </code>
    public class Pinguin extends AnimalFamilier {
    Pinguin() {
    type = "pinguin";
    }
    public static void sauterDansEau() {
    System.out.println("plouf plouf !");
    }
    }
    
     
  • Héritage classe parents/enfants (2)

    admin 16 h 03 min on 14 septembre 2009 | 0 Permalink | Reply
    Tags: constructeur, ,

    </code>
    <code> public class Chien extends AnimalFamilier {
    public static final String couleur = "noir";
    Chien() { // constructeur par défaut de chien
    type = "chien";
    } // si on ne fait aucune action, il ne sert à rien (il est là automatiquement)
    // constructeur personnalisé qui définit le nom du chien à sa création
    Chien(String aaa) {
    type = "chien";
    nom = aaa;
    }
    Chien(String aaa, float t) {
    type = "chien";
    nom = aaa;
    taille = t;
    }
    Chien(String nomChoisi, int ageChoisi) {
    type = "chien";
    nom = nomChoisi;
    âge = ageChoisi;
    }
    Chien(int a) {
    //nom = Integer.toString(a);
    âge = a;
    type = "chien";
    }
    public void dormir() {
    super.dormir();
    System.out.println("Wouf wouf !!");
    }
    public void wouf () {
    System.out.println ("wouf");
    }
    }</code>
    

    Explication du code

    On créer une classe Chien à partir de la classe parente AnimalFamilier. La classe Chien est donc une classe enfant vis-à-vis de la classe AnimalFamilier. Pour pouvoir reprendre les caractéristiques de la classe AnimalFamilier dans la classe Chien, il faut utiliser le mot clef « extends » dans la déclaration de la classe. Une fois les mots clefs extends déclaré, la classe Chien dispose exactement des mêmes caractéristiques que sa classe parente, c'est-à-dire qu’elle en hérite les variables d’initialisation, et les méthodes.

    On instancie ensuite, un objet de type Chien avec son constructeur vide par défaut.  On déclare la valeur de la variable « type », initialisée dans la classe parente.

    On crée un deuxième objet de type Chien, avec un constructeur qui définit le nom du Chien. Il s’agit d’un constructeur personnalisé.

    Le troisième objet de type Chien possède lui aussi un constructeur personnalisé. Ce constructeur définit un nom pour l’objet Chien, et une taille lors de son instanciation.

    Le constructeur du 4eme objet de type chien définit un âge et un nom lors de la construction de l’objet.

    Le cinquième constructeur effectue une conversion de type de variable. La variable nom qui possède à la base un type String, se converti en type int.

    Une fois les objets de type Chien instancié, on redéfinit la méthode dormir grâce au mot clefs super. Le mot clef « super » permet d’appeler une méthode d’une superclasse (en l’occurrence la super classe ici est AnimalFamilier), et de modifier les propriétés de la méthode. La méthode dormir consistait à appeler la méthode System.out.println et faire afficher la chaine de caractères suivante « bonne nuit à demain ».  Dans la classe Chien, la méthode dormir est modifiée. Le résultat de cette modification est que la méthode dormir affichera dorénavant la chaine de caractère suivante « waouf waouf » lorsqu’elle sera appelée sur l’objet de type Chien.

    On créer ensuite une méthode nommée waouf, qui affiche la chaine de caractère « wouf ».

     
c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
esc
cancel