, , , ,

La classe en POO

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.

Une classe, en gros, c'est une usine d'objets. Plus précisément, une classe, c'est un moule d'objets.

La grosse machine que j'ai mise sur le côté du transparent, c'est une machine qui crée des baignoires. Ce qu'on voit, c'est que cette machine va créer des milliers de baignoires. Une classe, c'est pareil. Elle va créer des milliers d'objets. Chaque objet est une entité séparée.

Ça signifie que vous pouvez, avec votre masse, casser votre baignoire. Vous n'allez pas casser la baignoire de votre voisin, etc. Ce qu'il faut voir, c'est qu'une classe va spécifier toutes les variables qui définissent la structure de vos objets. Par exemple, pour la baignoire, ce sera la longueur, la profondeur, peut-être le matériau qui est utilisé. Après, chaque baignoire va pouvoir être un peu différente.

La classe va également définir le comportement de toutes les instances. Les classes ont été introduites pour éviter une répétition des méthodes dans chaque instance. Car si vous avez des milliers d'objets et que vous devez répéter des milliers de fois la même méthode, c'est que vous avez au moins des milliers de fois répété des choses pour rien. La classe va être le réceptacle, l'entité qui contiendra les méthodes qui, elles, seront exécutées. Cela permet de factoriser et d'avoir en un seul endroit le comportement pour toutes les instances d'une classe.

Une classe va factoriser les propriétés des objets. D'une première façon, la classe va décrire l'état que tous les objets vont pouvoir avoir. Elle ne va pas dire la valeur d'un état de l'objet, mais va dire, par exemple : “Tous mes rectangles doivent avoir une longueur et une largeur.” Et le comportement. Ça signifie que tous mes rectangles vont devoir pouvoir calculer une aire, les intersections, leur hauteur, ce qu'est le top etc.

La classe va spécifier la structure, l'état, mais ne mettra pas les valeurs de l'état. Chaque instance aura ses propres valeurs et par contre partagera le comportement. Je le répète, une classe définit la structure et le comportement des instances, mais les instances auront des valeurs qui leur sont spécifiques et propres.

Maintenant, regardons la différence entre une classe et des instances. Un objet est instance d'une classe. Il a été créé par une classe. Un objet a été créé par cette classe. Toutes les instances d'une classe vont réagir de la même manière aux messages définis dans la classe. Toutes les instances de la classe vont exécuter les mêmes méthodes. Je reviens sur le fait que toutes les instances d'une classe partagent le même comportement.

Quand je vais envoyer un message à un objet, je vais chercher dans la classe du receveur. Donc, quand j'envoie un message à un rectangle, je vais chercher dans la classe rectangle. La méthode qui est définie dans la classe rectangle va être exécutée avec les valeurs de l'objet qui a reçu le message. Il faut voir que les méthodes sont recherchées dynamiquement dans la classe du receveur, de l'objet qui a reçu le message.

Les méthodes sont recherchées dynamiquement dans la classe du receveur. Là, j'ai pris un autre exemple. J'ai pris des chiens, des chats et des poissons. Quand j'envoie un message à un chien, je vais chercher dans la classe du chien la méthode correspondante et je vais exécuter cette méthode. Par exemple, quand un chien est agressif, il aura un comportement… Montrer des dents, aboyer, essayer de nous mordre. Quand c'est un chat, ça va être différent. Donc là, on voit que j'envoie un message à un objet. Je vais chercher dans la classe de l'objet la méthode correspondante. Donc toutes les instances de la même classe vont partager cette même méthode. Par contre, des instances de classes différentes ne partageront pas les mêmes méthodes. Elles vont les partager par leur classe.

Que devez-vous savoir ? Vous devez savoir que tout objet dans le système est instance d'une classe. Que la classe est une usine, qu'elle va créer des instances. Que toutes les instances d'une classe exécutent les mêmes méthodes, car elles les partagent. Et qu'une classe crée des instances qui partagent le même comportement et qu'une classe définit des méthodes qui seront exécutées sur chacune des instances. Maintenant, une classe va définir la structure de ces instances, mais ne va pas définir les valeurs de ces instances. Chaque instance aura ses propres valeurs.

⌂ Retour au sommaire