Les classes ont été introduites récemment en JavaScript (avec ECMAScript 2015) pour fournir une syntaxe plus simple pour créer des objets et manipuler l'héritage. En réalité l'objectif était de masquer l'héritage prototypal du langage pour les développeurs habitués aux langages objets basés sur les classes.
Il faut bien comprendre que malgré cette évolution, le JavaScript reste un langage objet basé sur les prototypes et que toute classe est convertie au final en un objet prototype.
Une classe est une entitĂ© qui va servir Ă crĂ©er des objets de mĂȘme type. Elle va gĂ©nĂ©ralement ĂȘtre composĂ©e de propriĂ©tĂ©s (on parle aussi d'attributs dans d'autres langages) et de mĂ©thodes dont vont hĂ©riter les objets qui seront créés Ă partir de celle-ci.
Une classe va également posséder un constructeur qui sera appelé systématiquement lors de la création d'un objet pour permettre notamment d'initialiser les propriétés de cet objet.
Dans les langages objet basés sur les classes :
Pour déclarer une classe en JavaScript, on utilise le mot clé class
suivi du nom de la classe et d'une paire d'accolades.
Exemple : déclaration de la classe Personne
class Personne {
}
On ajoute ensuite dans cette classe la méthode constructor()
. Cette méthode est reconnue par JavaScript comme étant le constructeur de la classe, elle servira notamment à créer les objets et à initialiser leurs propriétés grùce au passage de paramÚtres.
Exemple : codage du constructeur de la classe Personne
class Personne {
constructor(nom, prenom, age) {
this.nom = nom;
this.prenom = prenom;
this.age = age;
}
}
A noter que contrairement au cas des langage objet basés sur les classes (comme C++ ou Java), les propriétés ne sont pas définies à part comme des attributs mais directement dans le constructeur en utilisant le mot clé this
pour désigner l'objet courant.
Il reste alors à ajouter les méthodes auxquelles les objets devront pouvoir avoir accÚs.
Exemple : ajout de la méthode decrire()
dans la classe Personne
class Personne {
constructor(nom, prenom, age) {
this.nom = nom;
this.prenom = prenom;
this.age = age;
}
decrire() {
let description;
description = `${this.prenom} ${this.nom} est agé de ${this.age} ans.`;
return description;
}
}
AprÚs avoir défini complétement la classe, on l'instancie pour créer un objet. Pour cela :
new
suivi du nom de la classe pour faire l'instanciationExemple : instanciation de la classe Personne
let objPersonne = new Personne('Reese', 'John', 30);
à partir de cet instant, toutes les méthodes définies dans la classe sont accessibles pour l'objet qui a été créé à partir de cette classe.
Exemple : utilisation de la méthode decrire()
avec l'objet objPersonne
console.log(objPersonne.decrire());
Créer une nouvelle version de l'application de calcul d'IMC en utilisant une classe Patient
pour crĂ©er les objets qui reprĂ©sentent un patient. Cette classe sera dĂ©finie avec les mĂȘmes propriĂ©tĂ©s et mĂ©thodes que celles dĂ©finies pour les objets de la version prĂ©cĂ©dente.
Tester la classe en créant 2 patients et en affichant pour chacun d'entre-eux :
Le programme doit ĂȘtre conforme Ă l'exemple donnĂ© pour la version prĂ©cĂ©dente.
Pour créer une classe dérivée qui va hériter des propriétés et des méthodes d'une autre classe, on doit utiliser le mot clé extends
Exemple : création d'une classe Professeur
qui hérite de la classe Personne
class Professeur extends Personne {
}
Dans le cas de cet exemple, on dit que la classe Professeur
est une classe dérivée de la classe Personne
ou encore que la classe Personne
est la classe mĂšre de la classe Professeur
.
Dans le constructeur de la classe dérivée, il faut utiliser le mot clé super
pour appeler le constructeur de la classe mĂšre.
Exemple : codage du constructeur de la classe Professeur
class Professeur extends Personne {
constructor(nom, prenom, age, matiere) {
super(nom, prenom, age); // Appel du constructeur de la classe Personne
ï»żthis.matiere = matiere;
}
}
Dans cet exemple, lorsqu'on créée un objet de la classe Professeur
, les propriétés nom
, prenom
et age
sont initialisés par le constructeur de la classe Personne
, la propriété matiere
spécifique à la classe Professeur
est initialisée directement par le constructeur de cette classe.
Attention :super()
doit toujours ĂȘtre utilisĂ© avant le mot clĂ©this
.
Créer une nouvelle version de l'application qui permet de créer des objets représentant des professeurs ou des élÚves en utilisant l'héritage par classe.
Pour cette version, on implémentera :
Professeur
à partir de laquelle seront créés les objets représentant les professeurs,Eleve
à partir de laquelle seront créés les objets représentant les élÚves.Ces deux classes seront dérivées de la classe Personne
qui sera chargée d'initialiser les propriétés communes aux professeurs et aux élÚves.
Coder les instructions javascript qui permettent de définir :
Personne
telle qu'elle a été définie dans le cours,Professeur
en reprenant l'exemple du cours et en ajoutant la méthode decrire_plus()
telle qu'elle a été implémentée dans la version précédente (cf. héritage par prototype),Eleve
selon les mĂȘmes modalitĂ©s que la classe Professeur
Ajouter les instructions qui permettent de créer un objet de chaque type (Professeur
et Eleve
) à partir de ces classes et de tester les méthodes decrire()
et decrire_plus()
sur chacun de ces objets.
Pour voir si tu as bien compris le fonctionnement des classes, n'hésite-pas à t'entrainer de ton cÎté avec les exercices proposés ci-dessous. Prends ton éditeur préféré, créé un nouveau projet contenant un fichier HTML et JavaScript et c'est parti !
Dans cet exercice, il s'agit de reprendre l'application vue dans le chapitre sur les objets et qui permet de créer des objets représentant les personnages d'un jeu. L'objectif sera d'en faire une nouvelle version dans laquelle ces objets seront créés en utilisant les classes.
Créer un nouveau projet correspondant à cette nouvelle version et coder les instructions qui permettent de :