1 00:00:00,670 --> 00:00:03,280 Dans cette séance, on va regarder un petit peu ce que c'est que Pharo. 2 00:00:03,780 --> 00:00:06,730 Pharo, c'est un langage-objet premièrement, pur, mais 3 00:00:06,930 --> 00:00:10,410 aussi, c'est un IDE, donc un environnement de développement intégré. 4 00:00:11,200 --> 00:00:13,130 Pharo est inspiré par Smalltalk, c'est son père 5 00:00:13,330 --> 00:00:15,860 spirituel, c'est un langage qui est très puissant et 6 00:00:16,060 --> 00:00:19,450 élégant et qui est fun à programmer et il y a aussi une 7 00:00:20,020 --> 00:00:23,010 grande communauté de gens qui font des tas de choses très variées. 8 00:00:23,620 --> 00:00:26,200 Et ce qu'on va essayer de vous faire comprendre pendant 9 00:00:26,400 --> 00:00:28,410 ce cours à l'aide de vidéos, c'est que Pharo, c'est un 10 00:00:28,610 --> 00:00:30,770 système vivant que vous allez pouvoir scripter au vol. 11 00:00:31,720 --> 00:00:34,270 Pharo est sous licence MIT, vous allez pouvoir partir 12 00:00:34,470 --> 00:00:35,790 avec et faire ce que vous voulez dans le futur. 13 00:00:37,000 --> 00:00:38,790 Donc, quand je dis que Pharo est élégant, en fait j'ai 14 00:00:39,000 --> 00:00:41,450 des arguments pour le dire. Je ne le dis pas juste en l'air 15 00:00:41,650 --> 00:00:44,550 : d'une part la syntaxe tient sur une carte postale et le 16 00:00:44,750 --> 00:00:47,270 modèle objet est très simple et uniforme, il tient en 17 00:00:47,470 --> 00:00:49,000 quatre lignes, donc on va regarder ça. 18 00:00:50,010 --> 00:00:52,420 Donc, sur ce transparent, vous avez toute la syntaxe Pharo. 19 00:00:53,060 --> 00:00:54,570 Et quand je dis toute, il n'y a rien d'autre. 20 00:00:54,770 --> 00:00:58,400 Maintenant, ça ne veut pas dire que vous allez pouvoir 21 00:00:58,600 --> 00:01:01,270 comprendre la syntaxe juste en lisant ce transparent, on 22 00:01:01,470 --> 00:01:04,270 va avoir plusieurs séances où on va décrypter et vous 23 00:01:04,470 --> 00:01:07,500 permettre de vraiment comprendre comment cette syntaxe est structurée. 24 00:01:07,900 --> 00:01:10,590 Mais par contre, ça vous donne l'idée de la somme de 25 00:01:10,790 --> 00:01:13,320 travail à faire, mais il n'y a rien d'autre que cette syntaxe. 26 00:01:14,170 --> 00:01:18,000 De la même manière, le modèle objet tient sur ce slide, 27 00:01:18,200 --> 00:01:20,530 ça veut dire que tout est dynamiquement typé dans Pharo, 28 00:01:20,890 --> 00:01:23,270 tous les objets sont instance de classe, toutes les 29 00:01:23,470 --> 00:01:26,140 méthodes sont publiques et virtuelles, tous les attributs 30 00:01:26,340 --> 00:01:28,370 sont protégés, et il n'y a que des héritages simples. 31 00:01:28,870 --> 00:01:31,640 Il n'y a pas de boxing, il n'y a pas de type primitif et 32 00:01:31,840 --> 00:01:35,490 de type pas primitif, il n'y a pas de type générique, etc. 33 00:01:36,330 --> 00:01:38,750 Vous avez tout, donc sur les deux transparents, là, vous 34 00:01:38,950 --> 00:01:40,150 avez vu la syntaxe et le modèle Pharo. 35 00:01:40,350 --> 00:01:42,400 Bien sûr on y reviendra encore une fois, mais c'est pour 36 00:01:42,600 --> 00:01:45,000 vous donner une idée de la complexité du système. 37 00:01:47,120 --> 00:01:48,620 Donc, maintenant, ce qu'il faut voir, c'est que Pharo est 38 00:01:48,820 --> 00:01:49,900 entièrement écrit dans lui-même. 39 00:01:50,460 --> 00:01:52,180 Donc, quand je dis Pharo, qu'est-ce que ça veut dire, ça 40 00:01:52,380 --> 00:01:55,960 veut dire les chaînes, les caractères, les booléens, l'IDE, 41 00:01:56,160 --> 00:01:57,620 le compilateur, les sockets. 42 00:01:58,360 --> 00:01:59,790 Tout est écrit dans Pharo lui-même. 43 00:02:00,000 --> 00:02:03,000 Et donc, ça veut dire que si vous contrôlez et que vous 44 00:02:03,200 --> 00:02:05,140 comprenez cette syntaxe qui tient sur une page de ce 45 00:02:05,340 --> 00:02:08,900 modèle, vous avez accès à l'entièreté de Pharo lui-même, 46 00:02:09,100 --> 00:02:11,540 donc, moi, je trouve que, intellectuellement, c'est 47 00:02:11,740 --> 00:02:14,830 excitant parce que vous avez une toute petite porte d'entrée 48 00:02:15,200 --> 00:02:16,660 pour un monde qui est gigantesque. 49 00:02:17,820 --> 00:02:21,190 Donc j'ai aussi, si vous regardez le titre de ce MOOC, il 50 00:02:21,390 --> 00:02:24,800 y a immersif dedans. Pourquoi on a mis immersif? 51 00:02:25,000 --> 00:02:27,390 On a mis immersif parce que Pharo, ce n'est pas une boîte noire en fait. 52 00:02:27,720 --> 00:02:30,630 L'entièreté du système est entièrement inspectable, ça 53 00:02:30,830 --> 00:02:32,720 veut dire que vous pouvez aller voir comment c'est 54 00:02:32,920 --> 00:02:36,000 implémenté et Pharo a des capacités réflexives, ça veut 55 00:02:36,200 --> 00:02:38,270 dire qu'il a une représentation de lui-même que vous 56 00:02:38,470 --> 00:02:40,070 allez pouvoir utiliser pour comprendre Pharo. 57 00:02:40,750 --> 00:02:43,170 Et en fait, de ce fait, vous allez être complètement 58 00:02:43,370 --> 00:02:45,840 immergé dans un monde d'objets et donc j'aime bien cette 59 00:02:46,040 --> 00:02:49,050 métaphore de l'aquarium, c'est de dire, en général un 60 00:02:49,250 --> 00:02:52,360 langage c'est une boîte noire, Pharo c'est plus qu'une 61 00:02:52,560 --> 00:02:55,160 boîte, ce n'est pas une boîte noire, c'est un aquarium 62 00:02:55,360 --> 00:02:57,780 dans lequel vous allez pouvoir voir les objets et les 63 00:02:58,000 --> 00:03:00,640 constituants du système lui-même, mais en plus, vous 64 00:03:00,840 --> 00:03:03,650 allez pouvoir plonger dans cet aquarium et interagir avec 65 00:03:03,850 --> 00:03:07,100 les objets, et donc c'est vraiment dans cette idée-là qu'on 66 00:03:07,300 --> 00:03:09,790 vous invite à jouer avec Pharo. 67 00:03:11,270 --> 00:03:14,030 Donc là, je vous montre un exemple d'un système immersif. 68 00:03:15,870 --> 00:03:19,610 Qu'est-ce qu'on appelle immersif ou interactif? 69 00:03:19,810 --> 00:03:23,690 À gauche, vous avez le code et à droite vous avez le rendu de ce code. 70 00:03:24,900 --> 00:03:26,740 Et ce que le programmeur est en train de faire, c'est qu'à 71 00:03:26,940 --> 00:03:31,100 chaque fois qu'il appuie sur la touche de compilation, l'écran 72 00:03:31,300 --> 00:03:34,150 devient bleu et vous avez le rendu qui s'affiche à droite. 73 00:03:34,350 --> 00:03:35,940 Ce que vous voyez, c'est qu'il est en permanence en train 74 00:03:36,140 --> 00:03:37,880 de modifier son code et de voir ce qu'il est en train de 75 00:03:38,080 --> 00:03:40,130 faire dans la fenêtre de droite. 76 00:03:40,630 --> 00:03:43,000 Mais ça, vous allez pouvoir le faire avec n'importe quel 77 00:03:43,200 --> 00:03:46,000 élément du système, que ça soit une socket, un fichier, 78 00:03:47,790 --> 00:03:50,360 de la 3D par exemple dans ce cas-là, mais un serveur Web 79 00:03:50,560 --> 00:03:52,480 ça sera exactement pareil, votre serveur Web va 80 00:03:52,680 --> 00:03:54,380 fonctionner et vous allez pouvoir le modifier au vol. 81 00:03:57,660 --> 00:03:59,110 Donc maintenant, ce que je voudrais vous montrer, c'est 82 00:03:59,310 --> 00:04:01,660 un petit peu quels sont les supports qu'on a, si vous 83 00:04:01,860 --> 00:04:03,300 voulez travailler Pharo en dehors du MOOC. 84 00:04:03,840 --> 00:04:06,070 Donc il y a plusieurs livres qui sont tous open source, 85 00:04:06,750 --> 00:04:08,190 donc vous avez "Pharo by Example" qui est pour les 86 00:04:08,390 --> 00:04:10,460 débutants qui a été traduit en plusieurs langages, qui 87 00:04:10,660 --> 00:04:13,160 est en train d'être mis à jour par rapport à Pharo 5 qui 88 00:04:13,360 --> 00:04:14,500 est la prochaine release de Pharo. 89 00:04:15,070 --> 00:04:17,300 Vous avez "Deep into Pharo" qui lui va un peu plus en 90 00:04:17,500 --> 00:04:19,260 profondeur sur des librairies, des bibliothèques du 91 00:04:19,460 --> 00:04:22,300 système, les aspects du langage qui sont un petit peu 92 00:04:22,500 --> 00:04:25,250 moins connus et de l'outillage. 93 00:04:25,530 --> 00:04:28,510 Vous avez aussi "Entreprise Pharo a Web Perspective" qui 94 00:04:28,710 --> 00:04:31,840 met l'emphase sur des bibliothèques Web comme les 95 00:04:32,040 --> 00:04:36,070 websocket, des http, les serveurs http-https et du templatage. 96 00:04:36,270 --> 00:04:39,150 Donc, tous ces livres sont open source, vous pouvez les lire. 97 00:04:39,350 --> 00:04:41,770 Ce qu'on va utiliser en particulier pendant ce cours, c'est 98 00:04:42,000 --> 00:04:43,310 un framework Web qui s'appelle Seaside, dans Seaside, 99 00:04:43,820 --> 00:04:46,440 vous avez 300 pages qui sont disponibles sur le Web à l'adresse 100 00:04:46,640 --> 00:04:49,440 indiquée, vous pouvez éventuellement lire le livre si ça 101 00:04:49,640 --> 00:04:52,050 vous intéresse pour en savoir plus, normalement, on vous 102 00:04:52,250 --> 00:04:54,510 donnera toutes les billes pour pouvoir faire le MOOC sans 103 00:04:54,710 --> 00:04:56,450 que vous ayez besoin de lire le livre en addition. 104 00:04:58,540 --> 00:05:00,650 Pour ceux qui sont aussi intéressés par d'autres aspects, 105 00:05:01,090 --> 00:05:05,000 vous avez aussi un livre qui fait 300 pages sur des 106 00:05:05,200 --> 00:05:07,470 méthodes numériques en Pharo avec des tas de choses qui 107 00:05:07,670 --> 00:05:12,550 vont des séries statistiques à des algorithmes itératifs et du clustering. 108 00:05:14,420 --> 00:05:16,350 Donc, maintenant, je vous ai dit que Pharo, c'était un 109 00:05:16,550 --> 00:05:19,890 système à partir duquel vous pouvez apprendre et en fait, 110 00:05:20,830 --> 00:05:24,730 je vais vous donner quelques illustrations, on les reverra lors de vidéos. 111 00:05:26,100 --> 00:05:27,950 Chaque élément graphique, par exemple, de Pharo sur 112 00:05:28,150 --> 00:05:31,310 lequel vous cliquez et que vous, avec la combinaison de 113 00:05:31,510 --> 00:05:33,390 touches "command-shift-option", vous allez pouvoir avoir 114 00:05:33,590 --> 00:05:35,800 ce qu'on appelle des halos, donc des petits menus qui se 115 00:05:36,000 --> 00:05:37,550 positionnent autour de l'élément graphique. 116 00:05:38,260 --> 00:05:41,860 Et en utilisant ces menus, vous allez pouvoir aller à l'intérieur 117 00:05:42,060 --> 00:05:45,200 directement et manipuler les éléments visuels que vous 118 00:05:45,400 --> 00:05:48,140 êtes en train de manipuler et donc on va vous montrer ce 119 00:05:48,340 --> 00:05:49,660 que c'est qu'un inspecteur, c'est un objet qui vous 120 00:05:49,860 --> 00:05:52,230 permet d'aller manipuler les propriétés d'autres objets 121 00:05:52,720 --> 00:05:54,880 et pour voir comment c'est implémenté. 122 00:05:55,810 --> 00:05:58,270 De la même manière, on a un objet qui s'appelle le 123 00:05:58,470 --> 00:06:00,540 Finder, donc là, le Finder, je lui ai demandé, je lui ai 124 00:06:00,740 --> 00:06:02,030 dit voilà, moi j'aimerais que tu me donnes toutes les 125 00:06:02,230 --> 00:06:04,910 méthodes du système qui contiennent le mot match et puis 126 00:06:05,110 --> 00:06:06,770 il me fait une liste, il ne montre que je peux accéder 127 00:06:07,000 --> 00:06:08,170 directement au code de ses méthodes. 128 00:06:09,120 --> 00:06:10,910 De la même manière, il y a un autre outil qui s'appelle 129 00:06:11,110 --> 00:06:13,480 Spotter quand vous faites "shift enter", Spotter arrive 130 00:06:14,230 --> 00:06:16,090 et vous allez dire à Spotter ce que vous voulez trouver 131 00:06:16,290 --> 00:06:18,400 donc Spotter va vous permettre de trouver les classes, 132 00:06:18,600 --> 00:06:20,400 des méthodes ou bien des ressources. 133 00:06:20,600 --> 00:06:22,300 Donc vous aurez une des vidéos qui vous explique ce genre 134 00:06:22,500 --> 00:06:25,040 de choses, mais encore une fois, Spotter est écrit dans Pharo lui-même. 135 00:06:26,890 --> 00:06:29,430 Maintenant, le Finder a une fonctionnalité qui est assez 136 00:06:29,630 --> 00:06:32,000 sympathique quand vous allez commencer à apprendre Pharo, 137 00:06:32,260 --> 00:06:35,000 il y aura une vidéo aussi juste sur cet aspect-là, c'est 138 00:06:35,200 --> 00:06:37,040 que vous allez pouvoir donner des exemples et demander au 139 00:06:37,240 --> 00:06:39,130 système, moi je veux faire ça, ça, c'est mes exemples et 140 00:06:39,330 --> 00:06:41,330 je sais ce que je veux faire, mais je ne sais pas comment l'écrire en Pharo. 141 00:06:42,350 --> 00:06:44,820 Et le finder va essayer de trouver les méthodes qui vous 142 00:06:45,020 --> 00:06:47,530 permettent de faire ça. Donc là, j'ai écrit un exemple, j'ai 143 00:06:47,730 --> 00:06:50,250 dit voilà, j'ai deux chaînes, AB et C, et j'aimerais 144 00:06:50,450 --> 00:06:52,260 concaténer ces chaînes et je sais que si j'ai deux 145 00:06:52,460 --> 00:06:55,650 chaînes AB et C, le résultat doit être la chaîne ABC, ça 146 00:06:55,850 --> 00:06:58,230 paraît simple, et donc je dis au système, voilà, moi, 147 00:06:58,490 --> 00:07:00,740 donne-moi le message, est-ce qu'il y a un message qui 148 00:07:00,940 --> 00:07:02,850 existe et donne-moi le message s'il existe qui me 149 00:07:03,050 --> 00:07:04,950 permette de faire cette concaténation de chaînes. 150 00:07:05,690 --> 00:07:07,190 Et c'est ce que vous voyez à l'écran, là il me dit, 151 00:07:07,390 --> 00:07:09,720 virgule, c'est une méthode qui est implémentée sur 152 00:07:09,920 --> 00:07:13,910 SequenceableCollection, qui quand elle va être envoyée à 153 00:07:14,110 --> 00:07:16,060 ma première chaîne avec comme argument, ma deuxième 154 00:07:16,260 --> 00:07:18,110 chaîne va me redonner ma troisième chaîne et donc vous 155 00:07:18,310 --> 00:07:21,600 allez pouvoir utiliser ce finder sur les exemples pour 156 00:07:21,800 --> 00:07:23,670 vous aider à être un petit peu plus rapides dans Pharo. 157 00:07:24,590 --> 00:07:26,860 Dans ce MOOC, on va parler de conception objet et ce qui 158 00:07:27,060 --> 00:07:30,070 est important de voir, c'est que ça fait partie de l'ADN de Pharo. 159 00:07:31,340 --> 00:07:33,790 Parce que les gens qui programmant en Pharo pensent objet 160 00:07:34,350 --> 00:07:36,460 et de manière élégante, et je vais vous montrer les 161 00:07:36,660 --> 00:07:39,480 exercices qu'on va vous présenter. La question souvent 162 00:07:39,680 --> 00:07:41,300 qu'on pose, c'est comment est-ce que "not" est 163 00:07:41,500 --> 00:07:43,760 implémenté, donc souvent, les gens se posent la question, 164 00:07:43,960 --> 00:07:45,890 mais est-ce que c'est intéressant de se poser ce genre de questions? 165 00:07:46,530 --> 00:07:48,720 Et on va vous montrer que c'est très intéressant parce qu'il 166 00:07:48,920 --> 00:07:51,900 y a des règles fondamentales qui en découlent et ça fera 167 00:07:52,100 --> 00:07:54,840 partie de l'exercice. Et ce que vous pouvez voir, c'est 168 00:07:55,040 --> 00:07:56,620 que dès que vous avez Pharo et que vous allez voir 169 00:07:56,820 --> 00:07:59,430 comment "not" est implémenté, vous devez commencer à 170 00:07:59,630 --> 00:08:02,420 penser d'une manière différente et c'est quelque chose 171 00:08:02,620 --> 00:08:04,280 qui fait vraiment partie de la culture des gens qui font 172 00:08:04,480 --> 00:08:07,710 du Pharo, c'est de penser une conception qui est vraiment élégante. 173 00:08:08,150 --> 00:08:12,690 Donc vous pouvez installer Pharo comme décrit sur le site 174 00:08:12,890 --> 00:08:17,620 de Pharo lui-même, bien sûr, lors du MOOC et sur le site 175 00:08:17,820 --> 00:08:22,140 de Fun, vous aurez des instructions pour installer 176 00:08:22,540 --> 00:08:24,210 Pharo sur tous les systèmes. 177 00:08:24,410 --> 00:08:25,790 Maintenant, je tiens à vous rassurer, Pharo s'installe 178 00:08:26,000 --> 00:08:29,090 très simplement, souvent comme un "drag and drop" sur 179 00:08:29,290 --> 00:08:30,610 chacun des OS disponibles.