Création de la hiérarchie

  • Raccourci de la révision : JavaScript//Guide/L'exemple_de_l'employé/Création_de_la_hiérarchie
  • Titre de la révision : Création de la hiérarchie
  • ID de la révision : 275292
  • Créé :
  • Créateur : BenoitL
  • Version actuelle ? Non
  • Commentaire png images instead of gif

Contenu de la révision

Création de la hiérarchie

Plusieurs manières de définir les fonctions constructeur appropriées pour implémenter la hiérarchie de l'employé exisent. Le choix dépendra fortement de ce que vous désirez pouvoir faire dans votre application.

Cette section montre comment utiliser des définitions très simples (et comparativement peu flexibles) afin de comprendre comment faire fonctionner l'héritage. Dans ces définitions, il n'est possible de spécifier aucune des valeurs de propriétés à la création d'un objet. Les objets créés reçoivent simplement les valeurs par défaut, qui peuvent être modifiées par la suite. La figure 8.2 illustre la hiérarchie créé par ces définitions simples.

Dans une application réelle, on définirait probablement des constructeurs permettant de fournir des valeurs de propriétés à la création (consultez Des constructeurs plus flexibles pour plus d'informations). Pour l'instant, ces définitions simples suffiront à montrer comment l'héritage fonctionne.

Image:hier02.png
Figure 8.2 : définitions de l'objet Employé

Les définitions d'Employé en Java et en JavaScript sont semblables. Les seules différences sont la nécessité de spécifier le type de chaque propriété en Java mais pas en JavaScript, et de créer une méthode constructeur explicite pour la classe Java.

</tr>
JavaScript Java
function Employé () {
   this.name = "";
   this.dept = "général";
}
public class Employe {
   public String nom;
   public String departement;
   public Employe () {
      this.nom = "";
      this.departement = "général";
   }
}

Les définitions de Manager et Collaborateur montrent la différence dans la manière de spécifier l'objet parent dans la chaîne d'héritage. En JavaScript, on ajoute une instance de prototype en l'assignant à la valeur de la propriété prototype de la fonction constructeur. Cela peut se faire à n'importe quel moment une fois que le constructeur a été défini. En Java, on spécifie la classe parente (ou superclasse) au sein de la définition de classe. On ne peut pas changer la superclasse en dehors de la définition de la classe.

</tr>
JavaScript Java
function Manager () {
   this.supervise = [];
}
Manager.prototype = new Employé;

function Collaborateur () {
   this.projets = [];
}
Collaborateur.prototype = new Employé;
public class Manager extends Employe {
   public Employe[] supervise;
   public Manager () {
      this.supervise = new Employe[0];
   }
}

public class Collaborateur extends Employe {
   public String[] projets;
   public Collaborateur () {
      this.projets = new String[0];
   }
}

Les définitions d'Ingénieur et Commercial créent des objets descendants de Collaborateur et donc aussi d'Employé. Un objet d'un de ces types dispose des propriétés de tous les objets situés plus haut dans la chaîne. En plus de cela, ces définitions écrases des valeurs héritées de la propriété département avec de nouvelles valeurs spécifiques à ces objets.

JavaScript Java
function Commercial () {
   this.département = "ventes";
   this.quota = 100;
}
Commercial.prototype = new Collaborateur;

function Ingénieur () {
   this.département = "développement";
   this.machine = "";
}
Ingénieur.prototype = new Collaborateur;
public class Commercial extends Collaborateur {
   public double quota;
   public Commercial () {
      this.departement = "ventes";
      this.quota = 100.0;
   }
}

public class Ingenieur extends Collaborateur {
   public String machine;
   public Ingenieur () {
      this.departement = "développement";
      this.machine = "";
   }
}

À l'aide de ces définitions, il est possible de créer des instances de ces objets disposant des valeurs par défaut pour leurs proprités. La figure 8.3 illustre l'utilisation de ces définitions JavaScript pour créer de nouveaux objets et montre les valeurs des propriétés pour ces nouveaux objets.

Note : le terme instance a une signification technique spécifique dans les langages basés sur les classes. Dans ces langages, une instance est un membre individuel d'une classe et est fondamentalement différent d'une classe. En JavaScript, une « instance » n'a pas cette signification technique, étant donné que JavaScript ne fait pas de différence entre classes et instances. Cependant, lorsqu'on parle de JavaScript, « instance » peut être utilisé de manière informelle pour signifier un objet créé à l'aide d'une fonction constructeur particulière. Donc, dans cet exemple, on dira informellement que jennifer est une instance de Ingénieur. De même, bien que les termes parent, enfant, ancêtre et descendant n'aient pas de signification formelle en JavaScript, on peut les utiliser de manière informelle pour se référer à des objets situés plus haut ou plus bas dans la chaîne des prototypes.

Image:hier03.png
Figure 8.3 : Création d'objets à l'aide de définitions simples

{{wiki.template('PrécédentSuivant', [ "Guide JavaScript 1.5:L\'exemple de l\'employé", "Guide JavaScript 1.5:L\'exemple de l\'employé:Propriétés de l\'objet" ])}}

{{ wiki.languages( { "en": "en/Core_JavaScript_1.5_Guide/The_Employee_Example/Creating_the_Hierarchy", "ja": "ja/Core_JavaScript_1.5_Guide/The_Employee_Example/Creating_the_Hierarchy", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Praca_z_przyk\u0142adem/Tworzenie_hierarchii" } ) }}

Source de la révision

<div class="noinclude"></div>
<h3 name="Cr.C3.A9ation_de_la_hi.C3.A9rarchie"> Création de la hiérarchie </h3>
<p>Plusieurs manières de définir les fonctions constructeur appropriées pour implémenter la hiérarchie de l'employé exisent. Le choix dépendra fortement de ce que vous désirez pouvoir faire dans votre application.
</p><p>Cette section montre comment utiliser des définitions très simples (et comparativement peu flexibles) afin de comprendre comment faire fonctionner l'héritage. Dans ces définitions, il n'est possible de spécifier aucune des valeurs de propriétés à la création d'un objet. Les objets créés reçoivent simplement les valeurs par défaut, qui peuvent être modifiées par la suite. La figure 8.2 illustre la hiérarchie créé par ces définitions simples.
</p><p>Dans une application réelle, on définirait probablement des constructeurs permettant de fournir des valeurs de propriétés à la création (consultez <a href="fr/Guide_JavaScript_1.5/L'exemple_de_l'employ%c3%a9/Des_constructeurs_plus_flexibles">Des constructeurs plus flexibles</a> pour plus d'informations). Pour l'instant, ces définitions simples suffiront à montrer comment l'héritage fonctionne.
</p><p><img alt="Image:hier02.png" src="File:fr/Media_Gallery/Hier02.png"><br>
<small><b>Figure 8.2 : définitions de l'objet <code>Employé</code></b></small> 
</p><p>Les définitions d'<code>Employé</code> en Java et en JavaScript sont semblables. Les seules différences sont la nécessité de spécifier le type de chaque propriété en Java mais pas en JavaScript, et de créer une méthode constructeur explicite pour la classe Java.
</p>

&lt;/tr&gt;
<table class="fullwidth-table">
<tbody><tr>
<th>JavaScript</th>
<th>Java</th>
</tr>
<tr><td>
<pre>
function Employé () {
   this.name = "";
   this.dept = "général";
}
</pre>
</td>
<td>
<pre>
public class Employe {
   public String nom;
   public String departement;
   public Employe () {
      this.nom = "";
      this.departement = "général";
   }
}
</pre>
</td></tr></tbody></table>
<p>Les définitions de <code>Manager</code> et <code>Collaborateur</code> montrent la différence dans la manière de spécifier l'objet parent dans la chaîne d'héritage. En JavaScript, on ajoute une instance de prototype en l'assignant à la valeur de la propriété <code>prototype</code> de la fonction constructeur. Cela peut se faire à n'importe quel moment une fois que le constructeur a été défini. En Java, on spécifie la classe parente (ou superclasse) au sein de la définition de classe. On ne peut pas changer la superclasse en dehors de la définition de la classe.
</p>

&lt;/tr&gt;
<table class="fullwidth-table">
<tbody><tr>
<th>JavaScript</th>
<th>Java</th>
</tr>
<tr><td>
<pre>
function Manager () {
   this.supervise = [];
}
Manager.prototype = new Employé;

function Collaborateur () {
   this.projets = [];
}
Collaborateur.prototype = new Employé;
</pre>
</td>
<td>
<pre>
public class Manager extends Employe {
   public Employe[] supervise;
   public Manager () {
      this.supervise = new Employe[0];
   }
}

public class Collaborateur extends Employe {
   public String[] projets;
   public Collaborateur () {
      this.projets = new String[0];
   }
}
</pre>
</td></tr></tbody></table>
<p>Les définitions d'<code>Ingénieur</code> et <code>Commercial</code> créent des objets descendants de <code>Collaborateur</code> et donc aussi d'<code>Employé</code>. Un objet d'un de ces types dispose des propriétés de tous les objets situés plus haut dans la chaîne. En plus de cela, ces définitions écrases des valeurs héritées de la propriété <code>département</code> avec de nouvelles valeurs spécifiques à ces objets.
</p>
<table class="fullwidth-table">
<tbody><tr>
<th>JavaScript</th>
<th>Java</th>
</tr>
<tr>
<td>
<pre>
function Commercial () {
   this.département = "ventes";
   this.quota = 100;
}
Commercial.prototype = new Collaborateur;

function Ingénieur () {
   this.département = "développement";
   this.machine = "";
}
Ingénieur.prototype = new Collaborateur;
</pre>
</td>
<td>
<pre>
public class Commercial extends Collaborateur {
   public double quota;
   public Commercial () {
      this.departement = "ventes";
      this.quota = 100.0;
   }
}

public class Ingenieur extends Collaborateur {
   public String machine;
   public Ingenieur () {
      this.departement = "développement";
      this.machine = "";
   }
}
</pre>
</td>
</tr>
</tbody></table>
<p>À l'aide de ces définitions, il est possible de créer des instances de ces objets disposant des valeurs par défaut pour leurs proprités. La figure 8.3 illustre l'utilisation de ces définitions JavaScript pour créer de nouveaux objets et montre les valeurs des propriétés pour ces nouveaux objets.
</p><p><b>Note :</b> le terme <i>instance</i> a une signification technique spécifique dans les langages basés sur les classes. Dans ces langages, une instance est un membre individuel d'une classe et est fondamentalement différent d'une classe. En JavaScript, une « instance » n'a pas cette signification technique, étant donné que JavaScript ne fait pas de différence entre classes et instances. Cependant, lorsqu'on parle de JavaScript, « instance » peut être utilisé de manière informelle pour signifier un objet créé à l'aide d'une fonction constructeur particulière. Donc, dans cet exemple, on dira informellement que <code>jennifer</code> est une instance de <code>Ingénieur</code>. De même, bien que les termes <i>parent, enfant, ancêtre</i> et <i>descendant</i> n'aient pas de signification formelle en JavaScript, on peut les utiliser de manière informelle pour se référer à des objets situés plus haut ou plus bas dans la chaîne des prototypes.
</p><p><img alt="Image:hier03.png" src="File:fr/Media_Gallery/Hier03.png"><br>
<small><b>Figure 8.3 : Création d'objets à l'aide de définitions simples</b></small>
</p>
<div class="noinclude">
<p>{{wiki.template('PrécédentSuivant', [ "Guide JavaScript 1.5:L\'exemple de l\'employé", "Guide JavaScript 1.5:L\'exemple de l\'employé:Propriétés de l\'objet" ])}}
</p>
</div>
{{ wiki.languages( { "en": "en/Core_JavaScript_1.5_Guide/The_Employee_Example/Creating_the_Hierarchy", "ja": "ja/Core_JavaScript_1.5_Guide/The_Employee_Example/Creating_the_Hierarchy", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Praca_z_przyk\u0142adem/Tworzenie_hierarchii" } ) }}
Revenir à cette révision