"Premier aperçu des objets, des classes, des méthodes et des messages"
Stéphane Ducasse, research direction, Inria.
-Bonjour.
Dans ce cours, je ferai un survol des concepts qu'on présentera plus tard.
J'expliquerai ce que sont des objets, des classes, des méthodes et des messages
et j'expliquerai aussi la différence entre ces concepts car elle est centrale.
Qu'est-ce qu'un objet ?
Une petite entité qui vit dans le monde de la programmation objet,
donc dans votre système,
et qui est caractérisée par trois choses :
un état, un comportement et une identité.
Prenons un exemple.
Si je prends une tortue Logo,
l'état de la tortue, ce sera une direction et aussi l'état de son stylo.
Est-il appuyé ou levé ? Quelle est la largeur du trait et la couleur ?
Le comportement, ce sera de laisser des lignes au sol ou de sauter.
L'identité, c'est que si j'ai une tortue, ce n'est pas la même qu'une autre.
Là, je vous montre que j'ai une tortue qui représente une araignée.
Ce n'est pas la même qu'une tortue qui représente une tortue.
On appliquera ces concepts dans la programmation objet de façon uniforme.
Tout est un objet,
donc ça signifie que si on prend un fichier sur votre disque,
de toute façon, ce fichier aura un état.
On retrouvera un chemin parmi un système de fichiers.
Il aura un contenu, c'est-à-dire le contenu de votre fichier.
Il aura un comportement.
Vous pourrez le renommer ou modifier son contenu.
Et une identité car deux fichiers sont bien des choses séparées.
Maintenant, j'ai parlé d'identité et d'égalité.
Ça peut être difficile de percevoir la différence.
L'idée, c'est que si vous entrez dans une pizzeria,
que vous commandez une pizza,
qu'un client a une pizza et que vous voulez la même.
L'identité, ce serait d'aller manger sa pizza.
L'égalité, ce serait de commander la même que cette personne.
Vous voyez, l'identité, c'est vraiment un pointeur sur une chose.
Est-ce que le pointeur sur cette chose, c'est la même chose ?
Cela donne-t-il la même chose ?
L'identité, c'est : "Est-ce la même chose que ce qu'on veut ?"
Un objet réagit à des messages.
Quand j'ai un objet, je vais lui envoyer un message.
Par exemple, j'envoie le message "go: 200" à ma tortue.
Que va-t-elle faire ?
Elle va réagir et avancer en laissant une trace au sol.
Donc, un objet va réagir à un message
en exécutant une méthode qui va modifier l'environnement ou l'objet.
Il faut voir que différents objets peuvent comprendre le même message.
Ça signifie que je peux dire à une fenêtre de s'ouvrir.
Là, j'aurai une nouvelle fenêtre sur mon ordinateur.
Ou je peux dire que je veux ouvrir un fichier.
Là, je vais regarder à l'intérieur du contenu du fichier.
Ou imaginons que vous ayez une archive Zip et que vous l'ouvriez,
vous avez envie de dézipper vos éléments.
Vous voyez que c'est le même message,
mais les comportements vont être différents.
Donc, un concept qu'on va souvent rencontrer,
c'est le receveur du message.
C'est l'objet à qui j'envoie le message.
Donc, quand je dis à une tortue d'avancer, c'est elle le receveur.
Quand je dis à un fichier de s'ouvrir, c'est lui le receveur
et pareil pour une fenêtre.
Le receveur est important,
car c'est lui qui va déterminer le comportement qui sera exécuté.
Qu'est-ce qu'une méthode ?
C'est une liste d'expressions qui seront exécutées,
une liste d'instructions qu'on exécutera et à laquelle on donnera un nom.
Par exemple, j'ai donné un nom à une recette de cuisine pour des crêpes.
Je l'appelle 'makeCrepes'. Il y a plusieurs étapes.
Je dois mettre du lait, des œufs, de la farine, du sucre
et j'obtiens mes crêpes.
Donc, une méthode, c'est une séquence d'instructions qu'on va exécuter.
La différence entre un message et une méthode, c'est quoi ?
Un message, c'est : "Je donne un ordre à un objet."
Par exemple : "Stef, fais des crêpes. Robert, fais des crêpes."
Là, j'ai donné l'ordre.
La méthode, c'est : "Comment je vais réaliser cet ordre ?"
On voit qu'un message, c'est le quoi, et la méthode, le comment.
Donc on peut avoir un message et plusieurs méthodes.
Je l'ai montré.
Quand vous ouvrez une fenêtre graphique,
les instructions exécutées ne sont pas les mêmes
que quand vous ouvrez le contenu d'un fichier.
C'est fondamental.
Ça signifie que vous pourrez avoir un même vocabulaire
et différentes exécutions.
D'où viennent les objets ? Ils viennent de classes.
Une classe, c'est une usine à objets.
C'est ce que je vous montre dans le transparent.
Vous avez une machine qui crée des baignoires.
Vous lui filez une plaque d'acier. Elle vous crée une baignoire.
Donc, une classe, cette machine, créera autant de baignoires que vous voulez.
Chacune des baignoires est autonome.
Vous pouvez prendre une masse et détruire une baignoire si vous avez envie.
Ça ne détruira pas toutes les autres.
Donc, vos baignoires ont toutes une identité,
mais elles ont un comportement qui a été défini par la classe.
Donc, la classe est une usine d'objets et en plus, une autre manière de voir,
c'est que la classe définira toutes les descriptions
de l'état de ces objets et du comportement de ces méthodes.
Maintenant, comment est-ce que je crée un nouvel objet ?
J'envoie le message "new" à une classe.
Là, je demande à la classe Turtle de me créer une nouvelle tortue.
J'envoie le message "new" à la classe Turtle.
Il me crée une nouvelle tortue.
Je le ferai pour tous les objets dans le système.
Je vais faire "File new". Ça me créera un nouveau fichier.
Ce qu'il est important de bien comprendre,
on va le revoir dans le cours, c'est que je vais envoyer un message.
Ce message va dynamiquement être résolu.
Le système va trouver la méthode à exécuter et l'exécuter.
Donc, là, j'ai pris trois classes d'animaux :
les chiens, les chats et les poissons.
Je leur envoie le message pour leur dire qu'ils doivent être agressifs.
Le chien ne va pas réagir de la même manière.
Quand j'envoie le message "agressif" au chien, que va-t-il faire ?
Le système va rechercher dans la classe du chien
pour trouver la méthode, qui est une séquence d'instructions,
et exécuter cette séquence.
Évidemment, quand j'enverrai le même message pour le chat,
ce ne sera pas les mêmes séquences d'instructions qui seront exécutées.
Ça s'appelle la liaison tardive.
Là, on voit que les méthodes sont recherchées dynamiquement
lors de l'exécution.
Elles sont cherchées dans la classe du receveur.
En résumé, on a des objets
qui ont un état, un comportement et une identité.
On a une classe qui spécifie l'état et le comportement de ces instances,
des objets qui réagissent à des messages en exécutant des méthodes.
Un message, c'est un ordre.
Une méthode, c'est une séquence d'instructions.
Et différents objets peuvent répondre au même message de manière différente.
C'est ce qu'on verra dans le cours.