Comparaison de révisions

Création de la hiérarchie

Révision 275302 :

Révision 275302 par Julien.stuby le

Révision 222593 :

Révision 222593 par Julien.stuby le

Titre :
Création de la hiérarchie
Création de la hiérarchie
Identifiant d'URL :
JavaScript_Guide/L'exemple_de_l'employé/Création_de_la_hiérarchie
JavaScript//Guide/L'exemple_de_l'employé/Création_de_la_hiérarchie
Contenu :

Révision 275302
Révision 222593
t7    <h3 id="Cr.C3.A9ation_de_la_hi.C3.A9rarchie" name="Cr.C3.A9att
>ion_de_la_hi.C3.A9rarchie"> 
8      Création de la hiérarchie
9    </h3>
10    <p>
11      Plusieurs manières de définir les fonctions constructeur ap
>propriées pour implémenter la hiérarchie de l'employé exisent. Le 
> choix dépendra fortement de ce que vous désirez pouvoir faire da 
>ns votre application. 
12    </p>
13    <p>
14      Cette section montre comment utiliser des définitions très 
>simples (et comparativement peu flexibles) afin de comprendre com 
>ment 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éa 
>tion d'un objet. Les objets créés reçoivent simplement les valeur 
>s 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. 
15    </p>
16    <p>
17      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'exempl 
>e_de_l'employ%C3%A9/Des_constructeurs_plus_flexibles" title="fr/G 
>uide_JavaScript_1.5/L'exemple_de_l'employé/Des_constructeurs_plus 
>_flexibles">Des constructeurs plus flexibles</a> pour plus d'info 
>rmations). Pour l'instant, ces définitions simples suffiront à mo 
>ntrer comment l'héritage fonctionne.&nbsp; 
18    </p>
19    <p>
20      <img alt="Image:Hier02_mod.png" class="internal" src="/@api
>/deki/files/1296/=Hier02_mod.png"><br> 
21      <small><strong>Figure 8.2.1 : création de la hiérarchie</st
>rong></small> 
22    </p>
23    <p>
24      <img alt="prototype.memory.png" class="internal default" sr
>c="/@api/deki/files/3497/=prototype.memory.png?size=webview" styl 
>e="width: 522px; height: 394px;"><br> 
25      <small><strong>Figure 8.2.2 : représentation de la hiérarch
>ie (vue mémoire)<br></strong></small> 
26    </p>
27    <p>
28      Les définitions d'<code>Employé</code> en Java et en JavaSc
>ript sont semblables. Les seules différences sont la nécessité de 
> spécifier le type de chaque propriété en Java mais pas en JavaSc 
>ript, et de créer une méthode constructeur explicite pour la clas 
>se Java. 
29    </p>
30    <table class="fullwidth-table">
31      <tbody>
32        <tr>
33          <th>
34            JavaScript
35          </th>
36          <th>
37            Java
38          </th>
39        </tr>
40        <tr>
41          <td>
42            <pre>
43function Employé () {
44   this.name = "";
45   this.dept = "général";
46}
47</pre>
48          </td>
49          <td>
50            <pre>
51public class Employe {
52   public String nom;
53   public String departement;
54   public Employe () {
55      this.nom = "";
56      this.departement = "général";
57   }
58}
59</pre>
60          </td>
61        </tr>
62      </tbody>
63    </table>
64    <p>
65      Les définitions de <code>Manager</code> et <code>Collaborat
>eur</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 superclass 
>e) au sein de la définition de classe. On ne peut pas changer la  
>superclasse en dehors de la définition de la classe. 
66    </p>
67    <table class="fullwidth-table">
68      <tbody>
69        <tr>
70          <th>
71            JavaScript
72          </th>
73          <th>
74            Java
75          </th>
76        </tr>
77        <tr>
78          <td>
79            <pre>
80function Manager () {
81   this.supervise = [];
82}
83Manager.prototype = new Employé;
84 
85function Collaborateur () {
86   this.projets = [];
87}
88Collaborateur.prototype = new Employé;
89</pre>
90          </td>
91          <td>
92            <pre>
93public class Manager extends Employe {
94   public Employe[] supervise;
95   public Manager () {
96      this.supervise = new Employe[0];
97   }
98}
99 
100public class Collaborateur extends Employe {
101   public String[] projets;
102   public Collaborateur () {
103      this.projets = new String[0];
104   }
105}
106</pre>
107          </td>
108        </tr>
109      </tbody>
110    </table>
111    <p>
112      Les définitions d'<code>Ingénieur</code> et <code>Commercia
>l</code> créent des objets descendants de <code>Collaborateur</co 
>de> et donc aussi d'<code>Employé</code>. Un objet d'un de ces ty 
>pes dispose des propriétés de tous les objets situés plus haut da 
>ns la chaîne. En plus de cela, ces définitions écrases des valeur 
>s héritées de la propriété <code>département</code> avec de nouve 
>lles valeurs spécifiques à ces objets. 
113    </p>
114    <table class="fullwidth-table">
115      <tbody>
116        <tr>
117          <th>
118            JavaScript
119          </th>
120          <th>
121            Java
122          </th>
123        </tr>
124        <tr>
125          <td>
126            <pre>
127function Commercial () {
128   this.département = "ventes";
129   this.quota = 100;
130}
131Commercial.prototype = new Collaborateur;
132 
133function Ingénieur () {
134   this.département = "développement";
135   this.machine = "";
136}
137Ingénieur.prototype = new Collaborateur;
138</pre>
139          </td>
140          <td>
141            <pre>
142public class Commercial extends Collaborateur {
143   public double quota;
144   public Commercial () {
145      this.departement = "ventes";
146      this.quota = 100.0;
147   }
148}
149 
150public class Ingenieur extends Collaborateur {
151   public String machine;
152   public Ingenieur () {
153      this.departement = "développement";
154      this.machine = "";
155   }
156}
157</pre>
158          </td>
159        </tr>
160      </tbody>
161    </table>
162    <p>
163      À l'aide de ces définitions, il est possible de créer des i
>nstances de ces objets disposant des valeurs par défaut pour leur 
>s proprités. La figure 8.3 illustre l'utilisation de ces définiti 
>ons JavaScript pour créer de nouveaux objets et montre les valeur 
>s des propriétés pour ces nouveaux objets. 
164    </p>
165    <p>
166      <strong>Note&nbsp;:</strong> le terme <em>instance</em> a u
>ne signification technique spécifique dans les langages basés sur 
> les classes. Dans ces langages, une instance est un membre indiv 
>iduel d'une classe et est fondamentalement différent d'une classe 
>. En JavaScript, une «&nbsp;instance&nbsp;» n'a pas cette signifi 
>cation technique, étant donné que JavaScript ne fait pas de diffé 
>rence entre classes et instances. Cependant, lorsqu'on parle de J 
>avaScript, «&nbsp;instance&nbsp;» peut être utilisé de manière in 
>formelle pour signifier un objet créé à l'aide d'une fonction con 
>structeur particulière. Donc, dans cet exemple, on dira informell 
>ement que <code>jenny</code> est une instance de <code>Ingénieur< 
>/code>. De même, bien que les termes <em>parent, enfant, ancêtre< 
>/em> et <em>descendant</em> n'aient pas de signification formelle 
> en JavaScript, on peut les utiliser de manière informelle pour s 
>e référer à des objets situés plus haut ou plus bas dans la chaîn 
>e des prototypes. 
167    </p>
168    <p>
169      <img alt="Image:hier03.png" class="internal" src="/@api/dek
>i/files/1380/=Hier03.png"><br> 
170      <small><strong>Figure 8.3&nbsp;: Création d'objets à l'aide
> de définitions simples</strong></small> 
171    </p>
172    <div class="noinclude">
173      <p>
174        {{ PrécédentSuivant("Guide JavaScript 1.5:L\'exemple de l
>\'employé", "Guide JavaScript 1.5:L\'exemple de l\'employé:Propri 
>étés des objets") }} 
175      </p>
176    </div>
177    <p>
178      {{ languages( { "en": "en/Core_JavaScript_1.5_Guide/The_Emp
>loyee_Example/Creating_the_Hierarchy", "es": "es/Gu\u00eda_JavaSc 
>ript_1.5/El_ejemplo_Employee/Creando_la_jerarqu\u00eda", "ja": "j 
>a/Core_JavaScript_1.5_Guide/The_Employee_Example/Creating_the_Hie 
>rarchy", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Praca 
>_z_przyk\u0142adem/Tworzenie_hierarchii" } ) }} 
179    </p>

Retour à l'historique