En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies pour vous proposer des contenus et services adaptés. Mentions légales.

Faire transporter un message

 Problématique

Faites transporter un message par vos lutins

Vous savez que saisir une URL permet d’accéder à une ressource sur le Web. Avant de vous expliquer plus en détail comment cette ressource arrive, depuis son point de départ (sa source) jusqu’à vous (sa destination), je vous propose une petite activité sur Scratch qui va permettre de simuler le trajet de la ressource.

Défi N°1

Mettez votre réseau en place

Votre objectif, ici, c’est de satisfaire votre cliente : elle fait une requête auprès de vous, et en tant qu’admirable serveur, vous devez accéder à sa demande.

Bobby est un bon serveur Ada Lovelace  est tellement satisfaite qu’elle demande qu’on lui livre  des petits pains d’épices au miel.

Problème : le sens de l’orientation de Bobby n'est pas trés bon. Heureusement pour lui, son ami Bretzel dispose de toute une armée de petits bretzels prêts à aider. Ces petits bretzels, que nous nommerons A, B, C, D, E, F et G , sont placés à des endroits stratégiques dans le manoir :

minireseau.png

La cuisine étant le lieu de stockage des gourmandises, c’est de là que tout partira. Pour éviter à Bobby d’avoir à se déplacer - et donc lui éviter de se perdre - les routeurs-bretzels ont été installés. Ils vont permettre d’acheminer les paquets de pâtisseries, chacun des bretzels passant le paquet à l’un de ses voisins.

Cliquer sur l'image Scratch pour charger le programme ( au besoin créer votre compte avec le mail de l'IFS)

ou en cliquant sur ce lien https://scratch.mit.edu/projects/724494197

ATTENTION : Cliquer sur REMIX pour que vos modifications soit faite sur votre compte   remix.png

Déterminez une liste de voisins

Dans notre exemple, le bretzel A est le premier qui reçoit le paquet. Pour le faire parvenir à Ada Lovelace, il peut soit l’envoyer au bretzel B, soit au bretzel E. S’il l’envoie à B, alors B devra l’envoyer à C, qui lui-même l’enverra à D : le paquet est alors arrivé à destination. Mais si A l’envoie à E, E l’enverra alors à F, qui lui-même l’enverra à G, qui l’enverra à C, qui l’enverra à D : le paquet arrive à destination.

Évidemment, de notre point de vue, si A envoyait le paquet à B directement, il arriverait à destination plus rapidement. Quoique… N’entrons pas dans les détails, mais considérons simplement, à ce stade, que A  ne connaît pas le plus court chemin : il a ses deux voisins B et E, et donne aléatoirement le paquet à l’un ou l’autre. Nous allons donc devoir dire à A qui sont ses voisins, en créant une liste spécifique pour A.

Pour cela, dans la catégorie Données, je clique sur “Créer une liste” :

creeer_liste.png

Une fenêtre apparaît, je sélectionne “Pour ce lutin uniquement” :

select_lutin.png

Puis je nomme ma liste “voisins” :

Et je valide en cliquant sur “Ok”. Ma liste apparaît alors, mais uniquement pour le lutin A :

scratch1.png

 J’écris donc le script qui va me permettre d’ajouter, dans cette liste, les voisins de A, en l’occurrence B et E :

Déterminer, dans des listes propres à chacun de vos lutins-routeurs, chacun de leurs voisins.

Défi N°2

Envoyez le paquet !

Bien… votre réseau est en place, mais il reste l’essentiel à faire : acheminer le paquet de la source vers la destination.

Dans notre exemple, ça donne ça :

routagegif.gif

Quand on clique sur Bobby, il envoie le paquet à A. A peut alors soit l’acheminer via B, soit via E.

Faire en sorte que votre paquet parte bien de la source pour arriver à la destination.

La première étape, c’est d’indiquer vers quel voisin le paquet doit aller. Pour cela, j’ai créé une variable pour tous les lutins, que j’ai appelée “destination”. Cette variable va me permettre de savoir, à tous moments, vers quel routeur doit aller le paquet. La destination finale est bien sûr le client (représenté ici par le bretzel D).

Dans l’exemple, j’ai choisi de déclencher l’action d’envoi en cliquant sur Bobby. La première destination étant nécessairement le bretzel A, j’initialise ma variable, et j’envoie un signal à tous les lutins pour indiquer que Bobby a été cliqué (ou autrement dit, que la requête a été faite).

defi3-1.png

Lorsque le lutin-paquet reçoit ce signal, il va créer une copie de lui-même, ou un clone, que vous retrouverez dans la catégorie Contrôle :

defi3-2.png

C’est cette copie qui se déplacera. Où ira-t-elle ? Vers les coordonnées du lutin-routeur inscrit dans la variable “destination”. Pour indiquer ces coordonnées variables, vous trouverez les blocs adéquats dans la catégorie Contrôle et mouvement :

defi3-3.png

À cette étape, votre variable “destination” est initialisée au premier routeur, ici A. La copie du lutin-paquet se déplace donc jusqu’au routeur A. Bien sûr, nous ne pouvons pas nous arrêter là : il faut changer la destination maintenant que le premier routeur a été atteint.

Le lutin A doit donc déjà détecter qu’il a bien reçu le paquet. Et si c’est le cas, il va rediriger la destination du paquet vers l’un de ses voisins (voisins que vous avez déterminés à l’étape précédente), comme ceci :

defi3-4.png

Si vous testez votre programme à ce stade, vous verrez que rien ne change : votre paquet va vers votre premier routeur, puis s’arrête. Pourtant, la variable “destination” change bien ! Mais souvenez-vous, votre lutin-paquet ne bouge qu’une seule fois : vers A. Il va donc falloir lui dire de répéter cette action :

defi3-5.png

Je vous laisse donc coder tous vos routeurs (ça devrait prendre 3 minutes à peine !) et re-tester votre programme.

Si vous cliquez plusieurs fois sur votre lutin-serveur (ici Bobby), vous vous apercevrez peut-être d’un bug curieux : tous les clones arrivés à destination se déplacent à nouveau. Et c’est normal, puisque c’est ce que vous avez codé…

Pour parer à cela, vous pouvez supprimer vos clones une fois qu’ils sont arrivés à destination, comme ceci :

defi3-6.png

 En résumé
  • Les routeurs permettent d’acheminer un paquet vers la destination.

  • Plusieurs chemins sont possibles pour aller vers une même destination.

  • Dans Scratchles listes permettent de stocker des variables.

  • Dans Scratch, un clone est une copie du lutin qui peut avoir son existence propre et être utilisée temporairement.

Merci à Claude Terosier Fondatrice de Magic Makers,Magic Lily Conception pédagogique, Isabelle Chrisment Professeure des Universités à TELECOM Nancy, Université de Lorraine.


Date de création : 24/08/2022 17:22
Catégorie : -
Page lue 229 fois