Date, String, Image
.Math
var tabNom = new Array(N); var tabPrenom = new Array(N); var tabAnnee_naissance = new Array(N);L'émiettement des données relatives à une personne dans de nombreux tableaux complique les traitements et apparait artificiel : que représente au fond le tableau des années de naissance ? et l'unité d'une personne tient au choix du même numéro d'indice dans tous les tableaux !
Dans la conception objet, la personne redevient le centre des préoccupations. On en fait une description générale dans la déclaration d'une classe d'objets, qui se compose de 2 parties qui décrivent ses propriétés et ses actions.
// La classe Rectangle posséde 2 propriétés // Voici son constructeur function Rectangle ( L, l) { this.largeur = l; this.longueur = L ; } // rect1 et rect2 sont des instances de la classe Rectangle. // Les objets sont crées avec l'opérateur new. var rect1 = new Rectangle(10 , 6) var rect2 = new Rectangle(15 , 10.5) // Lors de la création de rect1 par new, this est "remplacé" par rect1. // Exemple d'utilisation document.write("largeur = "+rect1.largeur
) document.write("longueur = "+rect2.longueur
) // la fonction suivante calcule l'aire du rectangle function calcule_aire () { return this.largeur * this.longueur } /* On peut se servir de la fonction calcule_aire() pour intégrer * une méthode dans la définition de la classe Rectangle * la méthode est appeléeaire
*/ function Rectangle ( L, l) { this.largeur = l ; this.longueur = L ; this.aire = calcule_aire ; } // utilisation de la méthode var a2 = rect2.aire()) document.write("L'aire du rectangle rect1 = "+rect1.aire() );
Propriétés
Puis, les noms des propriétés (ou variables d'objet) qui décrivent les caractéristiques stables des objets, même si les valeurs de ces propriétés changent.
Ainsi pour Personne
, les propriétés retenues peuvent être nommées : nom, prenom, adresse, codePostal, ville, numTel, annee_naissance, solde ...
A tout moment un objet, c'est-à-dire une personne particulière, possède une valeur pour chaque propriété, valeur qui peut varier au cours du temps, comme son adresse ou le solde de son compte bancaire.
Méthodes
A coté de ces caractéristiques, les méthodes de l'objet décrivent son comportement, plus précisément les traitements auquels tout objet est soumis.
Par exemple, une personne peut calculer son âge, déménager, changer de N° de téléphone, avoir son compte crédité ou débité ...et avoir un nouveau-né !
Le plus souvent, ces méthodes d'objet agissent sur les propriétés et en modifient les valeurs. Elles sont donc décrites par du code de fonction, intégré à la définition de l'objet.
Constructeur d'objets
En JS, la classe d'un objet est complètement décrite par une (seule) fonction particulière appelée constructeur de l'objet
La classe de l'objet et son constructeur portent le même nom.
Son écriture va contenir 2 parties : les déclarations des propriétés et des méthodes.
Schéma de constructeur
Le mot this
, comme dans tous les langages orientés objets, permet de référencer les futurs objets de la classe.
//constructeur de la classe function nom-classe(param1, param2 ...) { // déclaration et initialisation des propriétés this.propriété1 = param1 ; this.propriété2 = param2 ; ........ // affectation des méthodes this.méthode1 = fonction1 ; ........ }
Exemple de constructeur de Personne
//déclaration des fonctions-méthodes, elles peuvent suivre la fonction-constructeur function calculer_age() { ..... } function mouvement_compte() { ..... } function nouvelle_naissance() { ..... } // Constructeur de l'objet Personne function Personne(n, p, ad, cp, v, t, a, nb) { // Definition des propriétés this.nom = n ; this.prenom = p ; this.adresse=ad ; this.codePostal=cp; this.ville=v; this.numTel=t; this.annee_naissance = a; this.nb_enfant = nb ; // Définition des méthodes this.age = calculer_age ; this.compte = mouvement_compte ; this.naissance = nouvelle_naissance; }
Cette classe est une sorte de modèle selon lequel on va pouvoir créer des objets concrets, manipulables.
Ces objets concrets _ exemplaires tirés du modèle_ s'appellent les instances de la classe.
Pour créer une telle instance, on effectue un appel à l'aide de l'opérateur new au constructeur de l'objet, et on affecte le résultat à un identificateur de variable.
(Remarque : new
a déjà été utilisé dans ce rôle pour créer des objets du type Date, Array.. )
Ecriture générale
var instance1 = new nom-classe(liste de valeurs)
Les valeurs passées en paramètre vont affecter les propriétés de l'instance (et ainsi les initialiser), conformément au code du constructeur : ils doivent donc correspondre exactement, en place et en nombre, aux paramètres formels du constructeur.
Mais on peut alternativement appeler le constructeur par défaut, sans paramètre, reportant à plus tard l'initialisation des propriétés.
Exemple : création et utilisation d'instances de Personne
// création et initialisation complète d'une instance var p = new Personne('Toto','Jules',1,'10 rue V.Hugo','93000','Bobigny','01222222',1950,3); // ou création, puis initialisation d'une instance var p = new Personne(); p.prenom= "Jules"; p.nom= "Toto"; .........
var personnes = new Array (N); for (var i=0; i<personnes.length; i++) personnes[i] = new Personne(); personnes[0].nom = "Toto"; .......
<SCRIPT SRC=personne.js"> </SCRIPT>
window,
document
..
<SCRIPT LANGUAGE="JavaScript"> function proprietes(objet,nom) { var texte = ""; for (var i in objet ) texte +=nom+"."+i+" = " +objet[i] +"
"; document.write(texte) } // parcours des propriétés des instances de Personne for (var i=0; i<personnes.length; i++) proprietes(personnes[i], personnes[i].nom) </SCRIPT>
ClasseA
et ClasseB
. On suppose que :ClasseB
contienne une propriété de "type" ClasseA
, ou plus exactement qu'une de ses propriétés soit construite par affectation d'une instance de ClasseA
.
function ClasseA( n, ........) { // Definition des propriétés de ClasseA this.nom = n; ........... } function ClasseB( a, b, objetA, ....) { // Definition des propriétés de Classe2 this.ppa = a; this.ppb = b; // objetA sera remplacé à la construction par // une instance existante de la ClasseA this.ppc = objetA; ........... } var instA = new ClasseA( ...); var instB = new ClasseB( aa, bb, instA, ...); document.write('La valeur de la ppté ppc de instB est : ', instB.instA.ppc);Exemple
Voiture
dotée des propriétés suivantes :
function Voiture(ma, mo, a, p) { this.marque=ma; this.modele=mo; this.annee=a; // le proprietaire est implicitement un "objet" de typePersonne
! this.proprietaire = p; // p sera une instance de Personne this.presenter=presenter_voiture; } var toto = new Personne('Toto', 'Jules', .....); toto.presenter(); // Par cette construction, la propriétéproprietaire
devient une instance dePersonne
! var auto = new Voiture('Renault','Clio',1997, toto); // Maintenant posons quelques questions importantes ! // toto et auto se présentent avec leur méthodes particulières toto.presenter(); auto.presenter(); // combien d'enfants a le propriétaire de auto ? document.write('Le propriétaire de la voiture auto a ', auto1.proprietaire.nb_enfant ,' enfant(s)'); // quel est l'âge du propriétaire de (l') auto ? document.write('Voici l\'âge du propriétaire de la voiture auto : ', auto.proprietaire.age()); // mais laissons le propriétaire de auto se présenter lui-même ! document.write('Présentons l\'heureux propriétaire de la voiture auto'); auto1.proprietaire.presenter();
Exemples
Personne.prototype.sexe = "f" ;
<SCRIPT> // ajout d'une méthode à la classe String function fin() { return this.charAt(this.length-1); } String.prototype.fin = fin ; </SCRIPT> </HEAD> <BODY> <SCRIPT> var ch1 = "Bonjour à tous" var ch2 = "et à demain !" document.write("Le dernier caractère de "+ "\""+ ch1+ "\"" + " : "+ch1.fin()+"<br>"); document.write("Le dernier caractère de "+ "\""+ ch2+ "\"" + " : "+ch2.fin()+"<br>"); </SCRIPT> </BODY> |