Outils pour utilisateurs

Outils du site


cours:informatique:dev:programmation_objet_pharo:010_classes_objets_methodes

Introduction aux classes, objets et méthodes

Tutoriel Programmation objet immersive en Pharo proposé par l'inria disponible à l'adresse https://mooc.pharo.org et sur la plateforme FUN-MOOC.

Transcription de la vidéo

Présentation par Stéphane Ducasse, direction de recherche, Inria.

Dans ce cours, je ferai un survol des concepts qu'on présentera en détail 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?

C'est 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,
  • 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/globale. 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é. Il peut être difficile de percevoir la différence. On peut illustrer cela par l'image suivante: vous commandez une pizza, vous entrez dans la pizzeria et croisez un client avec la même pizza que vous vouliez.

  • L'identité, ce serait d'aller manger sa pizza;
  • L'égalité, c'est de commander la même que cette personne.

Vous le voyez, l'identité, c'est vraiment un pointeur sur une entité. Est-ce que le pointeur sur cette chose, c'est exactement la même chose ? L'égalité, répond plutôt à “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 pouvoir 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.

Les classes

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 une entité autonome (identité). 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 d'état de ces objets et le comportement de leurs méthodes.

Maintenant, comment créer 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 et ce message va être résolu dynamiquement. 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.

Retour au sommaire

cours/informatique/dev/programmation_objet_pharo/010_classes_objets_methodes.txt · Dernière modification : 2022/06/25 14:48 de yoann