Tutoriel Programmation objet immersive en Pharo proposé par l'inria disponible à l'adresse https://mooc.pharo.org et sur la plateforme FUN-MOOC.
Présentation par Luc Fabresse, Professeur de l'institut Mines-Telecom de Doué.
Alors, dans cette séquence, on va voir le modèle-objet de Pharo. Donc, on va faire un survol de tout le modèle-objet pour essayer de vous en montrer l'élégance et la simplicité. Donc l'objectif, c'est vraiment de ne pas tout comprendre cette fois-ci, puisqu'on reviendra sur la plupart de ces notions dans les séquences qui vont suivre et les prochaines semaines.
En Pharo, il n'y a que des objets et des messages. Donc, il va y avoir beaucoup d'objets. Des objets pour représenter le curseur de la souris, les booléens, les tableaux, les nombres, les chaînes de caractères, les fenêtres, les scrollbars, ce que vous voulez, voire même le compilateur, les objets du système, que ce soit les sockets, les polices de caractères, les collections, etc.
Tout ça, ça sera des objets et ces objets-là, on va pouvoir leur envoyer des messages. On va leur envoyer différents types de messages. Il y en aura plein. Par exemple à une collection, je pourrai lui envoyer message le message size pour obtenir sa taille, le message +, le message ot:put, le message do etc.
On a donc des objets et des messages. Les messages dénotent l'intention du programmeur, quand j'envoie un message à un objet, je lui demande de réaliser un traitement. C'est vraiment une demande à l'objet qu'on fait.
Et l'objet va décider de la méthode à exécuter pour réaliser ces traitements. La méthode, c'est le comment. Comment réaliser l'intention du programmeur en décidant quelle méthode à exécuter.
Ensuite, on a un autre concept qui est le concept de closures, ce sont des fermetures lexicales, ce sont des blocks, des sortes de méthodes anonymes en Pharo. On appelle ça des blocks en Pharo, c'est un vocabulaire important. Les blocks sont délimités par des crochets [
]
.
4 timesRepeat: [ Transcript show: 'Hello World!' ]
Dans l'exemple ci-dessus: crochet ouvrant, crochet fermant. Donc tout ça, c'est un block, on le verra, il faut considérer ça comme une méthode anonyme.
En Pharo, on a un modèle qui est très simple et très uniforme. Tout est objet, tout est instance d'une classe.
Le modèle objet de Pharo est le suivant:
voici un exemple de code qui est le produit en croix de deux points:
(point1 x * point2 y) - (point1 y * point2 x)
donc on a un point 1 et un point 2, donc je vais multiplier le champ X du point 1 par le choix Y du point 2 et le soustraire à la multiplication du champ Y du point 1 et le champ X du point 2. Donc, c'est un exemple de calcul qu'on peut réaliser en Pharo.
Pour créer des objets en fait, on va avoir des messages particuliers.
10@20
Dans l'exemple ici, si j'envoie le message @ à l'entier 10 et que je passe en paramètre l'entier 20, ça va me créer un point, donc une instance de la classe Point. Donc ici, le nom du message, c'est bien @, le receveur du message, l'entier qui a reçu le message, c'est l'entier 10, c'était celui qui était avant le nom du message, et puis l'argument, c'était 20, celui qui était après le nom du message.
Un autre exemple:
'Pharo', 'is Cool'
Ici, je vais créer une chaîne de caractères, on voit le résultat ici c'est une chaîne de caractères. Et comment cette chaîne de caractères a été obtenue ? On a utilisé une première chaîne de caractères, ici,'Pharo'. On lui a envoyé le message, virgule. En paramètre de ce message, on avait la chaîne de caractères'is Cool'd'accord qui est ici. Et la sémantique du message virgule, c'est la concaténation de chaînes, donc les deux chaînes ont été collées pour en produire une seule concaténée.
On peut créer des objets en instanciant une classe directement grâce au message new par exemple. Si j'ai une classe Monster, j'envoie le message new, j'obtiens bien une instance de la classe monster donc un objet monstre.
Monster new
Je peux créer une instance de la classe tableau, Array, en spécifiant l'objet new et en passant un paramètre. Pour passer un paramètre, c'est deux points, et puis je passe l'entier 6 et j'obtiens bien un tableau de taille 6.
Array new:6
On peut avoir des types de message particulier pour créer des objets et je peux définir mes propres messages sur mes classes typiquement, je peux créer une classe Tamagotchi avec une méthode withHunger. Cette méthode-là, je vais lui passer l'entier 10, ça permet de créer une instance de la classe Tamagotchi en les passant un paramètres. C'est vraiment des messages pour spécialiser pour la création d'objets.
Ce qu'on a vu dans cette séquence, c'était un survol du modèle objet de Pharo. L'objectif, ce n'était pas de tout comprendre. On reviendra sur ces notions dans les prochaines séquences. Mais ce qu'il est important de retenir, c'est que: