Aller au menu - Aller au contenu

Icône La POO, kézako ?

Mise à jour : 22/07/2009
5 116 visites depuis 7 jours, dont 76 sur ce chapitre classé 38/786
Commençons par le commencement : la POO, c'est quoi ?
Derrière ce sigle qui signifie Programmation Orientée Objet se cache en fait une manière de programmer, qui va se baser sur... des objets ! :D

Bon, reformulons la question :
En informatique, qu'est-ce qu'un objet ?


C'est un concept qu'on se représente très bien dès qu'on l'utilise, mais qui est difficile à expliquer clairement avec des mots. Pour cette raison, nous allons partir d'un exemple...

Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Qu'est-ce qu'un objet ?

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...

Avant d'attaquer la pratique, je vous conseille de lire la première partie du chapitre d'introduction à la POO (partie intitulée "Des objets... pour quoi faire ?") du cours de C/C++ de M@teo21.

Comment ça s'utilise ?

Assez parlé, voyons plutôt comment s'utilisent des objets. Ca vous aidera à comprendre ce que c'est, et à quoi ça sert.
Mais en fait, vous connaissez déjà une classe d'objet : les tableaux, dont le nom est Array !
Son utilisation diffère un peu des objets "classiques", mais on y retrouve néanmoins les éléments typiques des objets.


Créer une instance



Pour créer une instance, on utilise simplement le mot-clé new.
Code : JavaScript
1
var monTableau = new Array();

Dans cet exemple, nous avons donc créé une instance "monTableau" de la classe Array.

Dans les parenthèses, on spécifie des paramètres propres à cette instance de l'objet. Par exemple, pour l'objet "ordinateur", ça peut donner quelque chose comme ceci :
Code : JavaScript
1
var ordiDeJean = new Ordinateur("2 GHz", "120 Go", "512 Mo", "FX 2100");


L'objet (la classe) "ordinateur" n'a pas encore été défini, on ne sait donc pas trop s'il faut indiquer les caractéristiques sous forme de chaînes de caractères, de nombres, ...
Ce sera à nous de le choisir au moment de la création de cet objet, et il nous faudra l'indiquer au vendeur, pour qu'il l'utilise correctement.



Les attributs



Pour accéder à un attribut (une variable) d'un objet (d'une instance), on utilise le nom de l'objet, suivi d'un point, puis du nom de l'attribut, comme ceci :
objet.attribut


Un exemple avec l'attribut length de l'objet "Array" :
Code : JavaScript
1
monTableau.length


Que faire avec les attributs ? Et bien ce sont des variables qui "appartiennent" à l'objet, on peut donc les lire et/ou les modifier (bien que dans certains cas, comme ici, ça ne serve pas à grand chose de les modifier).

Ainsi, si Jean rajoute de la RAM à son ordinateur, on va pouvoir modifier l'attribut correspondant :
Code : JavaScript
1
ordiDeJean.ram = "1024 Mo";


Il est également possible d'accéder à un attribut de cette manière :
Code : JavaScript
1
ordiDeJean["ram"];

Eh oui, les éléments d'un tableau associatif ne sont en fait que des attributs qu'on rajoute à notre tableau...



Les méthodes




Pour exécuter une méthode d'un objet (d'une instance), on utilise la même syntaxe que pour accéder à un attribut, sans oublier les parenthèses (puisqu'une méthode est une fonction).
Un exemple avec la méthode sort() de l'objet Array :
Code : JavaScript
1
monTableau.sort();


Avec notre classe "ordinateur", on va pouvoir créer une méthode qui retournera une description sous forme de caractère. On l'utilisera ainsi :
Code : JavaScript
1
2
var message = ordiDeJean.description();
alert(message);



Destruction d'un objet



Petit rappel : comment ça se passe dans l'ordinateur lorsqu'on crée un tableau, avec var toto = new Array() ?
Citation : chapitre sur les tableaux
Étudions de plus près ce qui se passe :
  • L'ordinateur crée un tableau en mémoire (on lui en a donné l'ordre avec new).
  • Il va également créer une variable dans sa mémoire (on lui a demandé avec var).
  • Mais schématiquement, voilà ce qui va se passer : en fait, on ne va pas "mettre" le tableau dans la variable (ça ne rentrerait pas, une variable c'est trop petit). On va dire à la variable où se situe notre tableau dans la mémoire de l'ordinateur (c'est beaucoup plus facile comme ça).


Bref, revenons à nos objets. Dans cet exemple, notre tableau se retrouve "perdu" dans la mémoire de l'ordinateur :
Code : JavaScript
1
2
var toto = new Array();
toto = null;


Tout ça pour vous dire que JS possède un système nommé ramasse-miettes, ou encore garbage collector pour les anglophones, qui se charge de détruire automatiquement tout ce qui se retrouve ainsi "perdu".
Ainsi, lorsqu'il n'y aura plus aucun "lien" vers un objet, ce dernier sera détruit.

Si on veut détruire un tableau, il nous suffit donc de modifier la valeur de la variable qui contient l'adresse du tableau. C'est ce qu'on a fait dans l'exemple ci-dessus : le tableau se retrouve "perdu" en mémoire, et le ramasse-miettes le détruira :pirate: .

Le mot-clé null est généralement utilisé pour désigner "rien".

On récapitule le vocabulaire...

Avant de terminer ce chapitre, récapitulons le vocabulaire utilisé à propos de la POO, pour qu'il soit clair pour vous.

  • Classe : c'est un modèle, une définition d'une "structure", qui va posséder des attributs et des méthodes.
    Exemple : une voiture, qui possède une couleur, une marque, un nom, etc.
  • Instance : c'est un exemplaire d'une classe.
    Exemple : la voiture de mon oncle, qui a la couleur "rouge", de marque "Pijo" et de nom "Pijo 404".
  • Objet : selon le sens, il s'agit d'une classe ou d'une instance.
  • Attribut : c'est une variable qui "appartient" à un objet.
    Exemple : l'attribut "couleur" pour la voiture.
  • Méthode : c'est une fonction propre à une classe. Elle va pouvoir agir sur l'instance à laquelle on l'applique.
    Exemple : repeindre la voiture.

Q.C.M.

Parmi ces affirmations, l'une est fausse.
Laquelle ?
De manière simple, on pourrait résumer comme ceci le fonctionnement d'un objet : on crée des exemplaires à partir d'un modèle.
Avec les mots exacts, il faut dire :
Un objet peut posséder des [...], des [...], des [...] et des [...], mais pas :
Quelle syntaxe utiliser pour accéder à un élément d'un objet ?

Statistiques de réponses au QCM

C'en est terminé pour cette approche, plutôt théorique des objets.
Nous allons maintenant découvrir les objets qui proviennent de la page HTML : de quoi s'occuper pendant quelques chapitres :p .
Chapitre précédent Sommaire Chapitre suivant

Partager

6 commentaires pour "La POO, kézako ?"
Note moyenne : 3.51 / 4 (260 votes)
Pseudo Commentaire
Hors ligne Seishi # Posté le 17/11/2009 à 12:07:51
Avatar

Je crois qu'il y a une erreur dans la correction du QCM lors de la question sur la POO.

" Réponse attendu : La POO est un autre langage de programmation o_O "

Cordialement, Seishi
Hors ligne Amine333 # Posté le 28/11/2009 à 09:26:00

Ce chapitre est très compliqué, j'ai rien compris x) et pour régler ça, ch'ui allé au chapitre sur la POO de M@ateo21 et j'ai pu comprendre à merveille :)
Hors ligne Legarspol # Posté le 16/07/2010 à 20:54:07

Avis : Très bon

de même que Seishi je remarque un problème dans le QCM de la Poo:
Voici la correction de la première question:

Mauvaise réponse : La POO permet de regrouper des variables et fonctions dans ces fameux objets.
La bonne réponse était : La POO est un autre langage de programmation.

Explications : La POO n'est pas un langage de programmation. C'est une façon de programmer se basant sur des objets.
Ces objets sont constitués de méthodes (des fonctions), et d'attributs (des variables).
---------------------------------------------------------
superbe boulot ces TUTO !!!
Hors ligne Ceydeirom # Posté le 17/07/2010 à 15:24:12
Avatar

Avis : Très bon

Vous avez mal lu la question du QCM, c'est :
Citation : JoSé2
Parmi ces affirmations, l'une est fausse.
Laquelle ?


Et non pas "Trouver la bonne affirmation qui désigne ce qu'est la POO".

Donc forcement d'après les affirmations disponible la bonne est bien "La POO est un autre langage de programmation."
Hors ligne shiter # Posté le 21/03/2012 à 15:57:51
On s'interresse à moi ?? :)

Avis : Mitigé

A chaque fois que je cherche quelque chose sur la POO, quel que soit le langage, ça parle d'un truc abstrait pour mieux faire comprendre, alors j'ai compris le principe, mais dès qu'il faut passer à la pratique je me casse la figure. Je n'arrive toujours pas à intégrer le truc, je ne sais pas quand l'utiliser, c'est possible d'avoir quelque chose du type TP qui montre vraiment à quoi sert la POO ? Le mieux ce serait d'aller au bout d'un petit projet sans POO, puis de montrer pas à pas les limites et comment en se servant de class on peut mieux organiser son code.

euh...
 

Voir tous les commentaires