La POO
La programmation, c'est essentiellement ce qu'on a vu jusqu'à présent. Cependant, un besoin s'impose, celui d'organiser son code pour des projets volumineux tout en conservant une clarté dans la lecture et dans les différentes définitions et algorithmes. C'est pour cela que l'on a créé la POO
(Programmation Orientée Objet).
Les classes
On organise alors notre code en objets. Chaque objet est décrit par une classe. La classe
est un ensemble de variables/constantes
et de fonctions
. Les variables/constantes
propres à une classe
sont appelés des attributs
. Les fonctions
propres à une classe
sont appelés des méthodes
.
Une classe voiture peut par exemple posséder des attributs comme son nom
, son modèle
, son kilométrage
. Elle posséderait éventuellement des méthodes telles que rouler
, renommer
, vendre
. À l'intérieur de la méthode vendre
, on pourrait par exemple effectuer une série d'instructions qui aboutiraient au changement de son attribut propriétaire
, vu qu'une vente de véhicule implique un changement de propriétaire.
Voici un exemple de définition d'une classe en JavaScript
:
// constructor est la méthode en JavaScript qui est executée
// lors de l'initialisation d'une instance. On appelle cela la méthode d'initialisation.
// Elle porte un nom différent selon les langages mais s'appelle souvent "init".
// carname est un attribut.
// constructor et present sont des méthodes.
class Car {
constructor(brand) {
this.carname = brand;
}
present() {
return 'I have a ' + this.carname;
}
}
// myCar est une instance de la classe "Car". C'est un objet.
var myCar = new Car('Peugeot 307');
Les prototypes
Les prototypes ne sont pas exactement comme les classes, qui rappelons le, définissent le comportement des objets. Les prototypes décrivent plutôt les classes dans une certaine mesure. Ils contrôlent les types de valeurs pour les différentes entrées et sorties pour chaque méthode et attributs d'une classe. Ils sont utilisés par les debuggers et compilateurs pour la gestion d'erreurs. Ainsi, ces informations suffisent pour remarquer les incohérences de manipulation d'objets.
On peut manipuler la structure même des classes dynamiquement en JavaScript
via cette notion de prototypes mais ce n'est absolument pas une pratique standard de programmation :
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.name = function() {
return this.firstName + " " + this.lastName;
};
Ici, on a ajouté un attribut name
à la classe Person
. Ce n'est absolument pas recommandé et cette pratique est non standard. Les prototypes
servent initialement à ce que j'ai expliqué juste au dessus. Vous trouverez juste ci-dessous un exemple de prototype
en C++
pour un exemple plus parlant et pertinent qu'en JavaScript
.
// Prototype d'une fonction
double someFunction( double, int );
// Prototype d'une classe
class MyClass {
public:
// Méthode publique pour afficher un message avec une chaîne en entrée
void displayMessage(const std::string& message);
private:
// Attribut privé pour stocker un entier
int myNumber;
};
Les instances
Les instances de classe sont des objets que l'on a initialisé à l'aide d'une classe. Par exemple lorsque j'ai fait :
// myCar est une instance de la classe "Car". C'est un objet.
var myCar = new Car('Peugeot 307');
J'avais créé une variable myCar
qui est une instance de la classe Car
. On peut donc se servir de ses méthodes et ses attributs, tels que définit dans la classe.
var message = myCar.present();
console.log(message);
// On aura alors imprimé dans la sortie standard : "I have a Peugeot 307".
On verra dans la page suivante la notion de gestion d'accès des attributs et méthodes via des mots clés que vous avez sûrement déjà croisés : private
, protected
, public
.
Mis à jour
Ce contenu vous a-t-il été utile ?