"Qu'est-ce qu'un objet ? Une entité avec un état qui réagit à des messages."
Stéphane Ducasse, research direction, Inria.
-Dans ce cours, je vais vous montrer ce qu'est un objet.
C'est une entité qui a un état
et qui va exécuter des méthodes en réaction à un message.
Qu'est-ce qu'un objet ?
C'est une petite entité qui va vivre dans le système informatique
et qui a plusieurs propriétés.
La première, c'est qu'elle a un état. La deuxième, un comportement.
La troisième, une identité.
Et en plus, cette entité va collaborer avec d'autres
pour faire des tâches plus complexes.
Donc, prenons un exemple.
Si j'ai un dé, l'état du dé, ce sera qu'il a plusieurs faces.
Son comportement,
ce sera de tirer aléatoirement une face parmi les faces qu'il a.
Et sa collaboration avec le reste,
c'est qu'on va le mettre dans une poignée de dés
quand on joue à des jeux.
De la même manière, si je prends un rectangle...
Un rectangle, c'est une entité qui aura une largeur, une longueur,
qui pourra offrir certains comportements comme calculer une aire.
"Est-ce que je croise d'autres rectangles ?"
Et typiquement, le système sur votre ordinateur
qui fait le réaffichage des fenêtres interagit avec des rectangles
pour calculer comment minimiser le réaffichage.
De la même manière, un contact. Imaginons que vous avez une liste de contacts.
Un contact va avoir un état qui sera l'adresse,
le numéro de téléphone de la personne que vous voulez contacter.
Un contact va savoir comment s'afficher à l'écran
et va interagir, par exemple, avec un contact manager
qui, lui, pourra trier les contacts.
Finalement, si on regarde ça aussi...
Si vous collectionnez des jeux,
vous aurez une fiche de description d'un jeu
qui va être un objet, qui sera le nom du jeu,
sur quelle plateforme il tourne, quel est son âge, sa cote.
Et en fait, ce jeu va interagir
avec un gestionnaire de fiches pour votre collection, par exemple.
En gros, ce qu'on voit, c'est qu'un objet,
c'est un état, un comportement et une identité.
L'état caractérisera l'objet.
Le comportement, c'est ce qu'il fera en réponse à des messages.
L'identité, c'est ce qui le distingue des autres.
J'ai souvent parlé d'identité et d'égalité.
Et ce sont des concepts, souvent, que vous pouvez confondre.
Je vais vous donner une astuce pour ne pas le faire.
Si vous entrez dans une pizzeria pour commander une pizza
et que vous voulez la même qu'un des clients,
l'identité serait d'aller manger sa pizza.
L'égalité, c'est de commander la même. C'est bien deux choses différentes.
Un objet est une entité qui a des responsabilités.
Ça signifie qu'elle va offrir des services à d'autres objets
et garantir qu'elle les fait.
Par exemple, une tortue va vous offrir comme service :
"Je sais écrire une ligne, changer de direction."
En fait, ces responsabilités sont représentées
sous la forme de l'exécution d'un comportement.
Un objet va aussi encapsuler des données.
Je montre sur le transparent qu'on peut conceptuellement imaginer
que les données sont à l'intérieur et que vous, en tant que client de l'objet,
vous ne pouvez pas accéder aux données, qu'elles sont protégées par une barrière
et que seules les méthodes de l'objet vont accéder à ces données.
Vous, en tant que client, vous pourrez simplement envoyer des messages.
Ces messages exécuteront des méthodes
et les méthodes vont pouvoir accéder et modifier les données.
Ça, c'est un point important qui est l'encapsulation des données
qu'offre la programmation objet.
Je disais qu'un objet réagit à un message.
Là, je vous montre que j'envoie le message "go" à une tortue.
Que va-t-elle faire en réaction ?
Elle va se déplacer à l'écran et laisser une trace au sol.
Il faut voir que différents objets peuvent comprendre le même message.
Par exemple, si je dis à une fenêtre de s'ouvrir,
vous aurez une nouvelle fenêtre sur votre desktop.
Maintenant, si je demande à un fichier de s'ouvrir,
vous verrez peut-être le contenu du fichier.
Si c'est une archive Zip,
vous allez vouloir dézipper votre archive et obtenir son contenu.
Il est important de voir que j'ai envoyé le même message "open"
à trois objets différents.
J'ai eu trois comportements différents.
Pourtant, le message était le même.
Donc, une méthode spécifie un comportement.
Je voulais vous montrer comment la méthode
qui calcule la hauteur d'un rectangle fonctionne.
Que fait-elle ?
Elle fait la différence entre le point en haut et le point en bas du rectangle
et nous dit : "C'est la distance."
De la même façon, si je veux calculer l'aire du rectangle,
je vais multiplier sa hauteur par sa largeur.
Donc mes méthodes spécifient un comportement
qui sont une liste d'instructions.
Donc, une méthode peut utiliser d'autres messages.
Elle peut envoyer d'autres messages pour faire son calcul.
Je vous montre que la méthode topCenter,
elle envoie le message "center" et le message "top"
qui sont des messages qui, eux aussi, peuvent faire appel
à d'autres méthodes en envoyant des messages.
Là, la méthode Center fait appel à "topLeft" et à "bottomRight", etc.
Donc, c'est un système qui, potentiellement,
quand vous envoyez un message, exécute une méthode
qui va, elle, en cascade exécuter un certain nombre d'autres messages
pour satisfaire cette demande.
Donc, il faut voir que, sur l'exemple précédent,
j'ai envoyé un message au rectangle.
Il a exécuté des méthodes du rectangle
et ces méthodes ont demandé d'autres choses sur le rectangle lui-même,
mais je pourrais demander à d'autres objets.
C'est la notion de délégation.
Ça signifie que pour faire une tâche,
je peux demander à un autre objet de la faire à ma place
ou une partie de cette tâche.
Donc je délègue ce que je dois faire à d'autres objets.
Un exemple, quand on veut collectionner des items,
on peut dire à chaque item qu'il sache se sauvegarder sur le disque.
Ou alors on peut dire :
"Je vais demander à un objet spécial qui sait sérialiser,
c'est-à-dire mettre sur le disque,
des objets compliqués et lui demander de me sérialiser."
En tant qu'objet, je n'ai pas à tout savoir.
Vous devez savoir maintenant qu'un objet est caractérisé
par un état, un comportement et une identité,
que les objets répondent à des messages en exécutant des méthodes
et qu'un objet peut déléguer des messages à d'autres objets
pour réaliser des tâches.