Qu'est-ce que l'orienté-objet ?

Sur ce site, je suis souvent amenée à parler orienté-objet, probablement parce que la programmation est mon domaine de prédilection. Au lieu de vous renvoyer sur Wikipedia, je vais plutôt tenter de vous donner une approche simple et didactique. Le but n'est pas de faire de vous un expert du domaine mais de vous permettre de mieux comprendre les conversations lorsque l'on parle informatique (et ça arrive souvent)

D'abord, c'est quoi un objet ?

C'est vous, c'est moi, c'est tout ce qui se trouve autour de vous. Le concept d'objet équivaut à peu près à celui de truc. Un objet a une forme, une apparence, des propriétés, peut effectuer certaines actions, en subir d'autres, est crée à un moment et détruit à un autre.
Avant, la programmation était une affaire de barbus à lunettes scientifiques, qui étaient capables d'effectuer des raisonnements abstraits de manière très poussée et d'interpréter des résultats sans signification apparente de manière à les comprendre.

Un jour, certains d'entre eux (on s'est mis à les appeler informaticiens, l'informatique étant devenue une activité à part entière) se sont dit qu'on pourrait connecter leur monde au nôtre. Ils ont alors recherché le moyen de représenter la réalité de manière informatique. De là est née la notion d'objet informatique. (je ne sais pas si mon historique est exact, mais avouez que c'est plaisant !)

Un objet, en informatique, est un élement qui est caractérisé par :

  • Un type : on peut dire en voyant l'objet "Chloé" : "C'est un humain", mais aussi "C'est un mammifère" et "C'est une femme", on y reviendra plus tard.
  • Des propriétés : par exemple en physique, tout corps est muni d'une masse. En informatique à de rares exceptions près, la plupart des objets ont des propriétés, pouvant elles-même être des objets.
  • Des méthodes : les objets peuvent effectuer des actions sur eux-mêmes et sur d'autres objets, tout comme "Chloé" peut respirer, manger, dormir et d'autres choses.

Comme vous pouvez le voir, cela ne relève pas de la sorcellerie. Toutefois, vous vous demandez sûrement "Comment différencier un objet d'un autre". Disons, comment différencier un caillou et un arbre ? C'est là qu'on introduit la notion de classe d'objets.

Une classe ? Qu'est-ce ?

C'est la définition d'un objet, la "structure de son ADN" en quelque sorte. Tous les humains sont différents (à part l'armée secrète de clones de Rael, mais c'est une autre histoire ;-)) mais ont la même structure au niveau de l'ADN. De la même manière, tous les objets d'une même classe ont la même structure. La classe est la recette pour fabriquer un objet, le moule auquel cet objet se conformera.

Si vous voulez créer un objet, vous devez préciser votre demande, sans quoi vous serez incapable de faire quoi que ce soit avec. Imaginez que je rentre dans une épicerie, et que je demande au vendeur : "Vendez-moi un objet". Le pauvre épicier sera incapable d'accéder à ma demande. Ou plutôt, il en sera capable, il lui suffira de prendre n'importe quel article de son magasin et de me le proposer à la vente. Il aura satisfait ma demande, mais avouez que ce n'est pas réjouissant.

Si on veut obtenir un objet capable d'avoir une certaine fonctionnalité, il faut préciser la classe d'objet qu'on désire. A l'animalerie, on peut acheter des tortues, des lapins, des oiseaux... bref, toutes sortes d'animaux. Si on veut un mammifère quelconque (pour, par exemple, étudier leur passionnant système reproductif), on peut tout à fait demander au vendeur "n'importe quel mammifère". Par contre, s'il nous donne un chat et que l'on veut entendre l'aboiement de l'animal, c'est raté. Si on veut entendre des aboiements, on se doit de demander un chien. Pour les objets, c'est pareil. On doit demander, à la construction de l'objet, quel type d'objet (plus précisément, quelle classe d'objet) on désire. Celà nous amène à la notion d'héritage entre classes.

L'héritage expliqué (presque) simplement

Reprenons notre premier exemple : l'objet "Chloé" est un être humain, mais c'est aussi une femme, et une informaticienne en plus . Que de propriétés ! Réfléchissons un peu à ce cas. "Chloé" est un être humain. En conséquence, elle a toutes les propriétés d'un être humain (je vous épargne les détails). "Chloé" est aussi une femme. Une femme est un cas particulier d'être humain, dont la particularité de genre est d'avoir une identité de genre féminine. On peut donc établir une relation d'héritage de propriétés entre la classe être humain et la classe femme : la classe femme hérite de la classe être humain.

C'est aussi une informaticienne. Une informaticienne est un informaticien qui est aussi une femme. Un informaticien est au sens large une personne quelconque qui assure le service sur des ordinateurs. Je pense qu'on peut considérer que certains extra-terrestres pratiquent aussi l'informatique. En conséquence, tous les informaticiens ne sont pas des êtres humains, donc la classe informaticien ne peut pas hériter de la classe être humain. Par contre, les informaticiennes sont des êtres humains femme informaticiens. Les informaticiennes comme "Chloé" héritent donc de la classe femme (qui hérite elle même de la classe être humain) et de la classe informaticien

L'intérêt de l'héritage est la factorisation des propriétés, méthodes : ce qui peut être mis en facteur commun l'est, afin d'éviter à se répéter (les informaticiens sont des gens qui n'aiment pas se répéter, se répéter, se répéter).

Vous remarquerez que considérer "Chloé" comme une femme est tout aussi correct que de la considérer comme un informaticien. On peut avoir différentes vues du même objet "Chloé". D'un côté, lui demander de développer un site Internet, en la voyant comme un informaticien. D'un autre, (attention, commentaire misandre en approche !) on peut lui demander d'être sensible et attentive aux autres, d'écouter, en la voyant comme une femme.

Conclusion

Cette petite explication est loin d'être parfaite et exhaustive, mais je pense qu'elle donne suffisamment d'explications pour intégrer le concept. Avec l'orienté-objet, on programme en faisant intéragir un ensemble d'objets plutôt qu'en faisant subir des traitements divers à des données.

Pour aller plus loin

Je vous suggère de lire l'article de Wikipédia sur l'orienté-objet ou de lire l'excellent L'Orienté objet aux Editions Eyrolles. Pour bien faire la différence, je vous suggère de lire aussi mon introduction à la programmation procédurale.