Le concept d'envoi et de réception de messages



La notion de message est tout au coeur de la programmation objet.
Un objet est, en quelque sorte, complètement isolé des autres objets. Un objet ne peut communiquer avec un autre que par l'envoi de message. Et un objet ne peut recevoir un message que s'il est disposé à le recevoir.
Tout cela est bien abstrait (même pour nous, adultes) et c'est pourquoi il est important d'illustrer concrètement la chose aux enfants.

Imaginons le dialogue suivant entre deux lutins :
Lutin 1 dit : «bonjour, mon ami !»
Lutin 2 répond : «Salut à toi. Viens-tu jouer avec moi ?»
Lutin 1 : « Bien sûr. Allons au parc jouer au ballon. »
Lutin 2 : « D'accord ! »
Changement de scène où on retrouve nos deux amis au parc avec un ballon.



Télécharger ce fichier Scratch. handout



À savoir absolument


Nota : Ne vous en faites pas si les points ci-dessous ne font pas sens pour vous. Continuez la lecture et tout finira par s'éclairer.



Pour comprendre comment tout cela fonctionne, une analyse des scripts associés à chaque objet sera bienvenue.

script1
handout
Les scripts du lutin 1

script2
handout
Les scripts du lutin 2

script3
handout
Les scripts du ballon

script4
handout
Les scripts de la scène


Première observation : Trois scripts font intervenir le drapeau vert. Le lutin 1 est le premier à prendre la parole. Le ballon ne doit pas apparaître au début du dialogue et l'arrière plan de la scène doit être blanc.

Poursuivons. Lorsque le lutin 1 termine sa phrase d'introduction, il envoie un message nommé envoi1. C'est sa manière de dire à tous les objets potentiels (lutins et scène) qu'ils peuvent prendre le relai s'ils le désirent.
Or le nom de ce message est connu du lutin 2 qui, le recevant, répond aux salutations. Après quoi il envoie lui-même un message nommé envoi2.
Lutin 1 connaît le message nommé envoi2. Il poursuit ainsi le dialogue et envoie le message nommé envoi3.
Lutin 2 sait quoi faire en recevant le message nommé envoi3. Il lance une dernière réplique et envoie le message nommé parc.

Le ballon et la scène reconnaissent le message nommé parc, et exécutent les scripts associés à sa réception.

Simple, n'est-ce pas?

En fait, pour les élèves du primaire, ce n'est pas si simple que cela en a l'air. La distinction entre le nom du message et le message lui-même est subtile. Une élève du secondaire m'est arrivée avec l'image du signal : l'objet envoie un signal aux autres objets. L'idée n'est pas bête, mais éloigne du mot message propre à la programmation objet.

Toujours est-il que je suis arrivé avec une méthode qui pourrait sans doute permettre aux jeunes de comprendre un peu mieux ce qu'il en est.

Je demande aux élèves de se mettre debout devant leur chaise et je leur dis qu'ils réprésentent tous un lutin différent des autres.
Il s'agit de préparer deux séries de carton (j'ai utilisé du bristol) de deux couleurs différentes. Sur les cartons jaunes (par exemple), j'ai mis un seul mot (envoi1, message1, chien, plage, x, y, etc) qui représente le nom du message envoyé. Sur les cartons bleus (par exemple), dans le coin gauche, un mot (qui correspond à l'un des nom du message du carton jaune) et, au centre, un ordre (ce qui représente un script du genre : Dis «bonjour»).
Chaque élève reçoit un carton jaune et un carton bleu. Je commence par un premier élève qui annonce le nom de son message provenant du carton jaune.
Toute la classe vérifie s'il n'est pas le lutin qui reçoit ce message. Si oui, il exécute l'ordre et lance à son tour le nom du message de son propre carton jaune. Et ainsi de suite de manière à ce que tous les élèves de la classe aient reçu et envoyé au moins un message.

Par la suite, je montre comment tout cela se traduit dans Scratch en programmant devant eux le scénario au début de cet article : la tuile "Envoyé à tous" correspondant au carton jaune, la condition "Quand je reçois " et le script associé représentent le carton bleu.

Tout commentaire sera le bienvenu !