Petite mise en situation
Prenons l'exemple d'un vendeur d'ordinateurs qui souhaiterait obtenir (en JS
, même si ce n'est pas le langage le plus adapté) la liste des ordinateurs qu'il vend, ainsi que leurs caractéristiques. Le problème se pose de savoir comment enregistrer toutes ces données...
C'est là qu'interviennent les objets : ils vont en fait nous permettre de regrouper dans une même "structure" toutes les données communes à un même ordinateur.
Encore mieux : on va même pouvoir définir et appliquer des fonctions directement à cette structure, pour en récupérer certaines données (les caractéristiques de l'ordinateur notamment), pour les modifier, pour les comparer, etc.
Un objet, c'est quoi ?
D'abord, une classe...
En POO, on va définir des
classes d'objets, qui regroupent :
- des variables, appelées attributs, qui caractériseront l'objet : ce sont les bases de notre "structure". Un attribut peut très bien être un objet : on dira alors que c'est un sous-objet de notre classe.
- des fonctions, appelées méthodes, qui permettront (entre autre) d'agir sur cet objet.
En JS, certains objets possèdent également des évènements, que l'utilisateur pourra utiliser pour déclencher un script.
C'est un peu particulier, c'est pourquoi nous en parlons séparément.
Dans notre cas, on va définir notre classe "ordinateur" par les attributs :
- cpu : la fréquence du processeur
- disqueDur : la capacité du disque dur
- ram : la quantité de mémoire vive
- carteGraphique : le nom de la carte graphique
On pourra définir les méthodes suivantes :
- description() qui retourne (sous forme de phrase) les caractéristiques de l'ordinateur. Du style : "Cet ordinateur est équipé d'un processeur cadencé à xx GHz, d'un disque dur d'une capacité de ... blabla..."
- caracteristiques() : renvoie une liste en HTML des composants avec leur(s) caractéristique(s)
- plusDeRamQue(x) : renvoie true si l'ordi possède plus de x Mo de Ram, sinon false
- etc. selon les besoins / votre imagination
.
Ensuite, des instances...
Bref : on a notre
classe d'objet. C'est en quelque sorte un modèle, grâce auquel on va construire tous nos objets "ordinateur" : ces derniers sont appelés des
instances (comprenez : des "exemplaires", des "répliques") de cette classe d'objets. Les instances s'enregistrent dans des variables.
Par exemple, on pourra créer l'instance "ordiDeJean", dont les attributs auront des valeurs qui correspondent à l'ordinateur de Jean.
Lorsqu'on parle d'objet, on désigne soit une classe d'objet, soit une instance : il faut bien en être conscient.
Dans un premier temps, nous vous le préciserons, pour que vous ne mélangiez pas tout. Mais ensuite, ce sera à vous de distinguer les deux sens du mot "objet", selon son contexte...
Des exemples de classes d'objets
Voici quelques autres objets que l'on peut créer, qui auront des utilisations différentes...
On peut imaginer, comme l'a fait
M@teo21 dans son cours sur le C/C++, un objet "personnage" représentant un personnage dans un jeu de rôle. Parmi les attributs, on trouvera la vie, la mana, la force, etc. et parmi les méthodes, on aura attaquer, boire une potion, changer d'arme, etc.
Pour changer de domaine, on peut imaginer des objets mathématiques, tels que les fractions : on pourra les additionner, les soustraire, les multiplier, les diviser entres elles, simplifier une fraction, etc. L'intérêt, c'est de manipuler des nombres (y compris les résultats) sous forme de fraction.
Bref, suivant nos besoins, on va pouvoir créer toutes sortes d'objets. Vous verrez, c'est pratique

.
Deux points de vue...
L'un des (nombreux ?) avantages de la POO, c'est qu'elle sépare le travail en deux : d'un côté, le concepteur de la classe d'objet, et de l'autre, l'utilisateur.
- Le concepteur va définir entièrement la classe d'objet en question (il va définir un certain nombre d'attributs et programmer des méthodes associées à cette classe).
Une fois la classe créée, il pourra l'améliorer (en rajoutant des méthodes ou en optimisant le code existant).
- L'utilisateur va pouvoir utiliser cette classe d'objet dans ses programmes, en créant des instances de l'objet, et en utilisant les méthodes fournies par le concepteur.
Il n'a pas à se soucier de tout le code de la classe (c'est justement le boulot du concepteur) : c'est ça qui est génial
.
Dans un premier temps, nous allons adopter le second point de vue, pour découvrir les nombreux objets qui existent déjà en JS (ce qui n'est pas une mince affaire, croyez-moi

).
Puis ensuite seulement nous allons nous attaquer à la création de nos propres objets, ce qui est un réel jeu de construction...