"Analyse d'objets avec l'Inspector"
Quentin Ducasse.
-Bonjour à tous.
Dans cette vidéo, on va s'intéresser à l'Inspecteur
qui est un outil Pharo très utile et qui nous permet,
comme un microscope, de s'intéresser à nos objets,
de voir comment ils réagissent de près
et aussi de leur donner des méthodes depuis l'intérieur.
On peut envoyer des messages à nos objets tout en les inspectant.
Pour se servir de l'Inspecteur, je vous ai préparé
une expression que vous ne verrez sûrement jamais dans la vraie vie,
mais qui a le mérite d'être bien pour servir d'exemple.
On aura un dictionnaire dans lequel je mettrai, sous la clé "Time",
l'heure qu'il est maintenant, "Date", la date qu'il est aujourd'hui
et une "Morph" que je présenterai tout à l'heure.
On va l'inspecter.
Vous pouvez faire clic droit, Inspect it ou le raccourci Cmd+I.
L'Inspecteur va s'ouvrir. Je range. Ça, on ne va pas en avoir besoin.
Vous pouvez voir qu'il y a trois onglets.
Le premier onglet, Items, je reviendrai dessus.
Pour l'instant, regardons Raw.
Ça va être l'implémentation Pharo de notre dictionnaire.
Donc, on aura la représentation de "self".
Il y a un "OrderedDictionary"
avec nos trois combinaisons de clés valeur avec les flèches.
Ici, on peut avoir accès au dictionnaire directement.
Et ici, on peut avoir accès aux clés ordonnées.
On peut voir "Time", "Date", "Morph",
puis "nil, nil, nil, nil, nil, nil, nil".
On peut voir la représentation textuelle, ici.
Une chose intéressante : si je clique sur "dictionary",
une nouvelle fenêtre va s'ouvrir sur la droite
sur non plus le "OrderedDictionary" mais le "Dictionary" lui-même
avec d'autres choses.
Ici, on aura l'"array" avec "Morph HSVA".
On aura notre dictionnaire qui est au-dessus.
On aura "tally", la taille du dictionnaire.
Et on peut faire la même chose avec les "orderedKeys".
On arrive ici et si on réinspecte le premier élément, "Time",
on peut recliquer dessus.
Ça ouvrira une autre fenêtre.
Et on va avoir "Time"
et la représentation ASCII des caractères, donc T, I, M, E.
On les a ici.
Vous pouvez voir en dessous qu'on peut avoir une preview,
donc un aperçu de la première fenêtre où on était.
Pour y retourner, on clique dessus.
Les deux fenêtres sont décalées. On peut décaler la vue comme ceci.
Et on peut aussi la rétrécir.
Si je veux simplement voir la deuxième vue, je peux faire comme ça.
Je peux réagrandir et réagrandir des deux côtés.
Si vous voulez supprimer la dernière fenêtre,
il suffit de cliquer sur la croix, ici.
Donc, cette vue Raw est intéressante,
mais en général, on aura des objets assez intelligents
pour avoir des vues personnalisées comme ici.
On peut voir dans notre dictionnaire qu'on a un onglet appelé Items.
Je vais fermer Array.
Cet onglet Items, c'est la même chose que ce qu'on a dans Raw,
mais présenté de manière plus lisible.
On va avoir les clés sur la gauche, les valeurs sur la droite.
On va avoir "Time", la valeur associée.
La valeur associée à "Time", c'est "Time now",
l'heure qu'il est maintenant.
"Date", on va avoir "Date today" et une "Morph".
Si, par exemple, on s'intéresse à "Time", qu'on clique dessus,
aTime va s'ouvrir et on va pouvoir aller regarder le temps.
On peut mettre des méthodes directement ici, dans le Raw, dessous.
Si je fais "self hours" et que je le print, on voit qu'il est 14 h.
Si je fais "self browse" et que je fais Cmd+D pour Do it,
il va m'ouvrir un System Browser sur le package Kernel dans la classe Time
et je peux inspecter les méthodes qui le composent.
Donc, c'est intéressant. On peut aussi avoir...
Détails, ça nous donnera plus d'informations sur l'objet Time.
Et l'onglet Meta, aussi présent ici, est un onglet qui nous montre
la hiérarchie de classes de notre classe Time.
On aura Time avec les différentes méthodes taguées avec les protocoles.
Ici, on a des méthodes "converting", "accessing", "printing".
Vous pouvez les chercher ici, filtrer.
Et on peut aussi naviguer les super classes
jusqu'à Object et même ProtoObject.
C'est intéressant. Ça vous permet de naviguer dans la hiérarchie.
Une autre chose qu'on peut regarder, c'est si je clique sur la date,
on peut voir un onglet...
Toujours l'onglet Raw qui apparaîtra
avec la représentation brute de cet objet dans Pharo
et cet onglet personnalisé Calendar qui montre qu'on est le 10 mai.
Il nous présente cette vue Calendrier qui est implémentée dans la date.
Pareil, je peux me mettre ici, faire "browse", Cmd+D.
Ça va m'ouvrir une vue sur le package, encore une fois, Kernel avec la date.
C'est intéressant.
On va voir un objet plus compliqué qui est "HSVAColorSelectorMorph".
On va voir ce que c'est. Si je clique dessus, on va voir que...
Je vais agrandir ça.
L'objet est plus compliqué, car il est rempli de...
On ne sait pas trop à quoi ça correspond.
C'est là où ça sera intéressant
d'avoir des onglets qui sont cohérents et plus lisibles.
Car si je clique sur "Morph",
ça va me présenter à quoi cette "HSVAColorSelectorMorph" correspond.
Je peux le faire ici. Par exemple, "self openInWorld", Do it.
Notre Morph va s'ouvrir ici. On peut jouer avec.
On a une sélection de couleurs, une collection de transparences,
une sélection de la couleur, ici.
On peut aussi faire, par exemple : "self selectedColor".
Ça permettra de voir la couleur sélectionnée actuellement
avec sa valeur en rouge, vert, bleu et en transparence.
Ce qui est intéressant, c'est que...
Imaginons qu'on veuille rajouter cette couleur dans l'Inspecteur,
on peut faire Do it and go ou le raccourci Cmd+G.
Ça nous permettra de rajouter notre couleur à droite de notre Inspecteur.
On peut inspecter la couleur. On peut la visualiser ici, aussi.
C'est cette couleur qu'on a sélectionnée.
Je vais fermer. Je vais montrer autre chose d'intéressant.
Si je l'ouvre en double, par exemple, ici,
et que je ferme celle-là...
Je peux réduire ici. Voilà.
Je vais avoir deux fois un Inspecteur sur le même objet.
Celui-là est ouvert. Ce n'est pas grave.
Ce que je peux faire, c'est me placer sur l'onglet Submorphs,
ici, me placer sur l'onglet Morph,
et en déroulant cet arbre de composition qui, normalement, est représenté ici...
On peut le chercher dans HSVAMorph, puis SVMorph...
C'est un arbre assez compliqué dans l'implémentation brute.
Si je me place dans Morph, ici, je peux voir...
Si je clique sur an ImageMorph, cette vue, à droite, se mettra à jour.
Par exemple, aBracketMorph, ColorSelectorMorph...
On peut avoir toute l'architecture qui est retrouvable
directement dans l'Inspecteur, sur la droite.
Dans cette vidéo, on a présenté un objet un peu bizarre.
Vous n'utiliserez pas forcément ce dictionnaire,
car il contient une date, un temps et une Morph bizarre.
C'était plus pour présenter l'Inspecteur, les différentes fonctionnalités,
vous montrer que vous pouvez interagir depuis l'Inspecteur
pour ouvrir la Morph, montrer la couleur qu'on a pu sélectionner,
la rajouter dans l'Inspecteur et pouvoir naviguer, par exemple...
Ici encore, je peux naviguer la hiérarchie de classes, les méthodes.
Ce qui est intéressant, c'est que les objets créés par le système ou par vous,
vous pouvez leur rajouter des extensions,
des tabs dans l'Inspecteur, ici, qui seront plus intelligents.
Les tabs Submorphs et Morph sont très intéressants,
car ils permettent d'avoir sur une Morph, par exemple,
un retour direct soit de l'arbre de composition de notre Morph,
soit de la Morph en elle-même, sur le côté.