COURS JavaScript


Accueil | Etude des objets JavaScript : Les objets personnalisés

Les objets personnalisés


Généralités

Comme nous l'avons déjà étudié, nous savons que les objets en JavaScript sont des entités qui possèdent des propriétés, qui ont des méthodes et qui réagissent à des événements (voir les leçons sur les objets : Introduction et Les objets.).
Nous pouvons (et même nous devons) utiliser les objets tout faits que nous propose JavaScript, ce qui est une bonne chose en soi, mais en plus, nous allons voir que nous pouvons créer de toute pièces et par nous même tous les objets que nous désirons, en leur attribuant par exemple, les propriétés que nous aurons envie de leur attribuer. C'est à nous de les inventer, et vous allez voir que ça n'est pas bien difficile. Par contre, c'est extrêmement pratique pour beaucoup d'utilisations que nous détaillerons plus tard.



Créer un modèle d'objet personnalisé

Pour créer un objet personnalisé, il existe deux manières. Pour ma part, je préfère vous enseigner celle qui est la plus pratique, et qui nous permettra d'instancier (c'est à dire de donner une vie propre, une existence réelle) un objet particulier à partir du modèle d'objet créé.
Je m'explique : Créer un objet personnalisé, revient en fait (selon ma technique) à créer un modèle d'objet. Reprenons toujours (faut pas se disperser) l'exemple que nous avons avons pris pour l'étude des tables (vecteurs). Soit à dire les compositeurs classiques (oui, je sais, je suis un peu limité, mais j'aime bien:-). Si nous imaginons un modèle de l'objet personnalisé "Compositeurs", ça n'est qu'un modèle. Vide de tout contenu. Si nous parlons d'un compositeur en particulier, comme Mozart par exemple, nous dirons que Mozart, est une "Instance" de l'objet "Compositeurs". C'est à dire un objet personnalisé bien particulier (et pas un autre) parmi tous les compositeurs dont nous pourrons créer des instances. Vous voyez ce que je veux dire ? J'espère...

Bon ! Hé bien puisque vous avez compris, nous allons créer dans un premier temps, le modèle de l'objet "Compositeurs". Et puisque nous en parlons, nous l'appellerons bien entendu "Compositeurs". Voilà. C'est dit.
Pour réaliser cette merveille de la technologie moderne, il nous suffira de créer une fonction (vous connaissez les fonctions puisque nous les avons vues à la leçon correspondante : Les fonctions ).Et comme de bien entendu, nous donnerons comme nom à cette fonction, devinez quoi ? Compositeurs, bien entendu. Ce que nous réaliserons le plus facilement du monde en écrivant le code suivant :

function Compositeurs () {

}

N'oubliez jamais les accolades ouvrantes et fermantes.
Un petit truc en passant : lorsque vous créez une fonction, et avant même de remplir le code à l'intérieur de la fonction, faites comme moi (comme ci-dessus) et créez d'amblé les deux accolades (ouvrantes { et fermantes } ) de manière à être certain de ne pas les oublier. Faites de même lorsque vous commencez un test "if" ou une boucle "for" (fin du truc en passant, on reprend...).
Maintenant, nous avons de quoi garnir notre squelette de modèle d'objet personnalisé. Il nous reste à lui inventer des propriétés. Ce qui pourrait nous être utile en tant qu'objet personnalisé correspondant à des profils de compositeurs classiques, ce serait par exemple leur prénoms, leur pays d'origine, leurs dates d'existence (tenons-en nous là pour le moment, ça suffira amplement à comprendre les mécanismes de construction d'objets personnalisés. Bien entendu, vous n'êtes pas limités en nombre de propriétés de vos objets.
Comme d'habitude, ça n'est pas tout d'inventer des propriétés. Encore faut-il que nous leur donnions un nom pour pouvoir, le moment venu, y faire référence. Et comme vous commencez à bien me connaître, je vais vous proposer des noms de propriétés qui reflètent bien leurs contenus. Alors allons y :

Pour la propriété "Prénom" nous l'appellerons : Prenom (attention !, sans accent, sans espace et sans caractère spécial)
Pour la propriété "Pays d'origine" nous l'appellerons : Pays
Pour la propriété "Date de naissance" nous l'appellerons : Date1
Pour la propriété "Date de disparition" nous l'appellerons : Date2

Pas plus difficile que ça.
Maintenant que nous avons nos propriétés, il nous reste à les déclarer dans notre fonction. Nous écrirons :

function Compositeurs (Prenom, Pays, Date1, Date2) { // (1)

       this.Prenom = Prenom; // (2) et (3)
       this.Pays = Pays; // (2)
       this.Date1 = Date1; // (2)
       this.Date2 = Date2; // (2)

} // fin de la fonction

Explications :

(1) Ici, nous passons comme paramètres à notre fonction de création d'objets "Compositeurs" tous les paramètres qui vont lui servir à créer les propriétés correspondantes. Le plus simple est de donner les mêmes noms aux paramètres qu'aux propriétés. Ainsi, nous saurons nous y reconnaître. Comme vous le savez, peu importe le nom donnés aux paramètres, seul compte l'ordre dans lequel les paramètres sont passés à la fonction.

(2) Ici, nous définissons les propriétés elles mêmes, celles qui vont caractériser chacune des instances (les objets particuliers créés avec la fonction) que nous créerons à partir de ce modèle d'objet personnalisé.

(3) Le petit mot "this" (en minuscules) représente la fonction elle même, c'est à dire "Compositeurs()". C'est un raccourcis bien commode dont nous reparlerons plus tard dans d'autres leçons, mais qu'il faudra toujours utiliser avec la plus extrême prudence. Pour l'heure, contentons nous de l'utiliser tel quel. Le fait d'écrire this.Prenom, signifie simplement que nous attribuons à la fonction elle même (plus tard aux objets créés avec cette fonction) la propriété Prenom. Rien de plus.

Nous voici prêts à utiliser cette fonction de création d'objets personnalisés pour créer ces fameux objets personnalisés dont on parle depuis le début. C'est à dire à créer des instances de ces objets. Ici, une instance de "Compositeurs", signifie créer par exemple l'objet personnalisé "Mozart". On dira que Mozart est une instance de "Compositeurs". Est-ce bien clair ? Si non, relisez depuis le début, bien lentement, après avoir pris une bonne tasse de café. :-)).

 



Créer des instances de l'objet personnalisé.

Allons-y. Nous avons maintenant tout en main pour créer autant d'instances de "Compositeurs" que nous voulons.
Pour votre enseignement personnel (à supposer que vous ne le sachiez déjà), Mozart, par exemple, a pour prénoms Wolfgang Amadeus, pour pays d'origine l'Autriche, et ses dates sont : 1756 - 1791. Mais oui, vous pouvez vérifier, c'est dans le Dico.

Pour créer une instance de "Compositeurs" qui aura pour nom "Mozart", nous n'aurons qu'à écrire :

var Mozart = new Compositeur("Wolfgang Amadeus", "Autriche", 1756, 1791); // on crée l'objet "Mozart"

Explications :

Le petit mot "new" (en minuscules) est le mot réservé JavaScript destiné à créer une nouvelle instance de la fonction "Compositeurs". C'est à dire un nouvel objet "Compositeur". Ce nouvel objet personnalisé (qui n'existait pas en JavaScript avant notre intervention).
Je ne reviendrais pas sur le mot "var" qui sert à réserver en mémoire la place à notre objet, vous connaissez déjà.
Et entre les parenthèses, vous reconnaissez les valeurs que nous allons passer aux paramètres de la fonction "Compositeurs()", dans le bon ordre, de manière à ce que JavaScript, attribue à chaque propriété de notre objet, les bonnes valeurs.

Et dorénavant, Mozart devient une instance de l'objet Compositeur. L'objet personnalisé Mozart existe bel et bien dans notre programme. En tant qu'objet personnalisé à part entière. De fait, nous pourrons désormais faire appel à lui et à ses propriétés, pour en voir le contenu. Par exemple, nous pourrons connaître les prénoms de Mozart en demandant :

Mozart.Prenom

Ce qui renverra la valeur "Wolfgang Amadeus".

Ou bien encore connaître son pays d'origine, en demandant :

Mozart.Pays

Ce qui renverra la valeur "Autriche". Et ainsi de suite pour toutes les propriétés que nous aurons nous même inventées pour l'objet en question. N'est-ce pas bien pratique et merveilleux ?

Bien entendu, nous pourrons aussi mettre ces valeurs dans des variables si nous le désirons, faire des tests dessus, ou des recherches sur les chaînes de caractères que représentent les valeurs de chacune de ces propriétés (sauf les dates qui sont numériques) etc... Comme avec n'importe quelle propriété de n'importe quel objet prédéfini JavaScript. La seule différence, c'est que ces objets personnalisés, sont à nous et bien à nous et rien qu'à nous, et que nous pouvons en inventer autant que nous le voulons pour tous les usages que nous voudrons en faire. N'est-ce pas fantastique ? :-)

Nous pourrons aussi créer d'autres instances de "Compositeurs()" pour les autres compositeurs tels que Chopin, Haendel, Bach, etc... Par exemple, pour ceux contenus dans notre table "MeubleClassique" (voir la leçon sur les vecteurs : Les tables indexées à une dimension (vecteurs) ):

var Chopin = new Compositeur("Frédéric", "Pologne", 1810, 1849); // on crée l'objet "Chopin"
var Haendel = new Compositeur("George Fredrich", "Allemagne", 1685, 1759); // on crée l'objet "Haendel"
var Bach = new Compositeur("Jean-Sebastien", "Allemagne", 1685, 1750); // on crée l'objet "Bach"
var Lully = new Compositeur("Jean Baptiste", "Italie", 1632, 1687); // on crée l'objet "Lully"
var Gounod = new Compositeur("Charles", "France", 1818, 1893); // on crée l'objet "Gounod"
var Schubert = new Compositeur("Franz", "Autriche", 1797, 1828); // on crée l'objet "Schubert"
var Brahms = new Compositeur("Johannes", "Allemagne", 1833, 1897); // on crée l'objet "Brahms"
var Verdi = new Compositeur("Guiseppe", "Italie", 1813, 1901); // on crée l'objet "Verdi"
var Wagner = new Compositeur("Richard", "Allemagne", 1813, 1883); // on crée l'objet "Haendel"

De cette manière, nous avons tous les renseignements que nous désirons sur les compositeurs de notre MeubleClassique. Nous verrons dans une autre leçon, comment nous pourrons les utiliser, et même les mettre en table eux mêmes, c'est à dire confectionner des vecteurs d'objets personnalisés. Mais ça, comme disait rudyard Kipling, "c'est une autre histoire".



Ce cours est enseigné par Philippe Médan 
dans le cadre de la formation des professionnels de l'INTERNET.
au CREFAC , 14 rue Scandicci, 93000 Pantin. Tél. : 01 48 46 51 99
au GITA-GRETA , Lycée Technologique Diderot 61, rue David D'Angers 75019 Paris Tél. : 01 40 40 36 27
au CESI à l'Ecole des ingénieurs, 116 Av Aristide Briand, BP 57, 92224 Bagneux CEDEX Tél. : 01 45 36 70 00
au CFA-AFIA Centre de Formation par l'Apprentissage spécialisé en Informatique DUT Licence MIAGE,
PUIO - Bâtiment 640 - Plateau du Moulon - 91405 Orsay Tél. : 01 69 15 35 19.

© Philippe Médan 1999-2007. Tous droits de reproduction réservés pour tous pays.