1
00:00:00,690 --> 00:00:03,450
Bonjour à tous. Dans
cette séquence, nous allons

2
00:00:03,550 --> 00:00:06,820
présenter la définition de
 classe et méthode dans Pharo.

3
00:00:08,820 --> 00:00:12,130
Ce qui est vraiment
spécifique à Pharo, il n'y a pas de

4
00:00:12,230 --> 00:00:15,140
syntaxe particulière pour
définir les méthodes et les classes.

5
00:00:15,830 --> 00:00:17,870
Cela se fait au niveau des outils.

6
00:00:18,050 --> 00:00:19,910
Donc, c'est les outils qui
vont donner le contexte à la

7
00:00:20,010 --> 00:00:21,690
création d'une
 classe ou d'une méthode.

8
00:00:23,890 --> 00:00:28,850
Donc, voici le navigateur de
code principal dans Pharo, c'est

9
00:00:29,460 --> 00:00:33,790
Nautilus. On voit dans la
zone du bas, la définition de

10
00:00:33,890 --> 00:00:38,700
la classe Point. On
voit que la classe Point a

11
00:00:38,800 --> 00:00:43,490
pour superclasse la classe Object
et deux variables d'instances X et Y.

12
00:00:44,690 --> 00:00:49,340
La superclasse et les deux
variables d'instance X et Y.

13
00:00:51,380 --> 00:00:54,960
On voit aussi en bas le nom
du package dans lequel cette

14
00:00:55,060 --> 00:00:58,590
 classe va être ajoutée. Dans
les slides, on aura ce genre

15
00:00:58,690 --> 00:01:00,880
de codes pour créer
une nouvelle sous-classe.

16
00:01:02,780 --> 00:01:06,150
On voit que pour créer une
 classe en Pharo, on envoie un

17
00:01:06,250 --> 00:01:09,070
message particulier à la
superclasse avec le nom de la

18
00:01:09,170 --> 00:01:13,680
sous-classe en paramètres. Donc le

19
00:01:13,780 --> 00:01:15,550
message subclass
instanceVariableNames classVariableNames

20
00:01:15,650 --> 00:01:20,430
package est un message qui
est envoyé à la classe object,

21
00:01:20,690 --> 00:01:24,350
avec le nom de la
sous-classe en paramètres, la liste des

22
00:01:24,450 --> 00:01:27,120
noms des variables
d'instance en paramètres, ainsi que le

23
00:01:27,220 --> 00:01:31,300
nom du package en
paramètres. Concernant la définition de

24
00:01:31,400 --> 00:01:36,260
méthodes, on a dans la zone
du bas encore le nom de la

25
00:01:36,360 --> 00:01:41,190
méthode, un
commentaire et le code de la

26
00:01:41,290 --> 00:01:44,270
méthode. Et cette méthode,
elle appartient à une classe.

27
00:01:44,780 --> 00:01:46,600
Comme vous le voyez dans
la syntaxe pour définir la

28
00:01:46,700 --> 00:01:50,280
méthode, on n'a pas
l'l'information sur la classe à

29
00:01:50,380 --> 00:01:51,840
laquelle cette
méthode doit appartenir.

30
00:01:52,210 --> 00:01:55,380
En fait, c'est la
sélection de la classe dans le

31
00:01:55,480 --> 00:02:00,230
navigateur de codes qui va
nous indiquer la classe à

32
00:02:00,330 --> 00:02:01,160
laquelle appartient la méthode.

33
00:02:04,550 --> 00:02:07,710
Dans les slides, il nous
faut aussi cette information.

34
00:02:08,050 --> 00:02:10,580
Ce qui fait qu'on ne peut
pas recopier juste le contenu

35
00:02:10,900 --> 00:02:12,160
de la définition d'une méthode.

36
00:02:12,710 --> 00:02:15,770
Il nous faut ajouter un
préfixe au nom de la méthode pour

37
00:02:15,870 --> 00:02:19,090
indiquer à quelle classe
cette méthode appartient.

38
00:02:20,390 --> 00:02:24,530
Donc, on ajoute en tête

39
00:02:25,390 --> 00:02:27,400
du nom de la méthode, on
ajoute le nom de la classe à

40
00:02:27,500 --> 00:02:30,750
laquelle on va ajouter la
méthode qu'on est en train de définir.

41
00:02:31,600 --> 00:02:35,370
Donc, dans le navigateur de
code, cette classe n'apparaît

42
00:02:35,470 --> 00:02:38,030
qu'en tant que
sélection dans le navigateur.

43
00:02:40,110 --> 00:02:41,660
Donc là, on est bien en
train de définir la méthode

44
00:02:41,760 --> 00:02:43,090
factorielle de la classe Integer.

45
00:02:45,040 --> 00:02:47,460
Alors, petit rappel sur les messages.

46
00:02:48,010 --> 00:02:49,890
Ici, on est en train de
définir la méthode factorielle.

47
00:02:53,190 --> 00:02:56,600
On a tout un ensemble de
messages binaires, donc =, >,

48
00:02:57,260 --> 00:03:02,100
* et - qui

49
00:03:02,200 --> 00:03:03,450
sont des messages binaires.

50
00:03:04,320 --> 00:03:08,510
On a un appel récursif
à la méthode factorielle

51
00:03:09,130 --> 00:03:12,730
donc factorielle ici,
c'est un message unaire qui est

52
00:03:12,830 --> 00:03:14,110
envoyé à un objet de type nombre.

53
00:03:16,340 --> 00:03:20,430
Et on a deux
messages à mots clés: ifTrue

54
00:03:21,150 --> 00:03:22,540
deux fois et error.

55
00:03:24,800 --> 00:03:28,640
Et enfin, on a le chapeau
qui est utilisé pour retourner

56
00:03:28,740 --> 00:03:30,720
une valeur et quitter la méthode.

57
00:03:33,100 --> 00:03:37,010
Alors concernant le
retour, par défaut, en Pharo,

58
00:03:37,820 --> 00:03:41,170
toutes les méthodes
retournent self donc l'objet en cours.

59
00:03:42,190 --> 00:03:46,000
Donc, le code qui est
au-dessus est exactement similaire

60
00:03:46,100 --> 00:03:48,710
au code qui est en dessous.
Donc, la partie return self à

61
00:03:48,810 --> 00:03:50,340
la fin de la méthode est
complètement optionnelle.

62
00:03:50,440 --> 00:03:51,550
Et en général, on ne la mettra pas.

63
00:03:53,050 --> 00:03:56,660
Les méthodes de classes permettent
d'envoyer des messages à des classes.

64
00:03:56,760 --> 00:03:58,650
Les classes sont des
objets comme les autres.

65
00:03:58,820 --> 00:04:01,290
On peut envoyer des
messages à des classes.

66
00:04:01,510 --> 00:04:04,680
Et pour définir une méthode
de classe, on appuie sur le

67
00:04:04,780 --> 00:04:06,430
bouton "class" dans Nautilus et on

68
00:04:09,360 --> 00:04:11,620
définit la méthode de
 classe à ce moment-là.

69
00:04:12,180 --> 00:04:15,450
Dans les slides, on
ajoutera systématiquement le mot

70
00:04:15,550 --> 00:04:20,340
"class" pour distinguer
une méthode qui va être

71
00:04:20,440 --> 00:04:24,840
exécutée sur une classe plutôt que
sur une instance de cette classe.

72
00:04:25,950 --> 00:04:29,550
Donc là, la méthode X Y,
elle va être exécutée sur la

73
00:04:29,650 --> 00:04:32,530
 classe Point et non pas sur
une instance de la classe Point.

74
00:04:34,100 --> 00:04:38,910
Alors, ce que vous devez
retenir de cette séquence: une

75
00:04:39,010 --> 00:04:41,760
 classe est définie non pas
par la syntaxe particulière,

76
00:04:41,860 --> 00:04:44,430
mais par un message qu'on
va envoyer à sa superclasse.

77
00:04:47,090 --> 00:04:50,030
Les classes sont définies
au sein de paquets dont les

78
00:04:50,130 --> 00:04:53,280
noms sont passés en
paramètre du message.

79
00:04:54,950 --> 00:04:56,880
Toutes les méthodes sont
publiques, il n'y a pas de

80
00:04:57,000 --> 00:04:58,960
mot-clé particulier pour
indiquer qu'une méthode est

81
00:04:59,060 --> 00:05:01,360
publique parce que c'est le
cas de toutes les méthodes.

82
00:05:01,460 --> 00:05:03,850
Il n'y a pas de notion de
protégé, de private, etc.

83
00:05:07,370 --> 00:05:09,920
Par défaut, toutes les méthodes
retournent le receveur, c'est-à-dire

84
00:05:10,150 --> 00:05:13,820
self et on peut utiliser le chapeau
pour retourner autre chose que self.

85
00:05:17,400 --> 00:05:19,930
Et les méthodes de classe sont
des méthodes comme les autres.

86
00:05:20,030 --> 00:05:21,950
Et pour les ajouter, il
faut appuyer sur le bouton

87
00:05:22,050 --> 00:05:23,890
"class" avant de créer la méthode.

88
00:05:24,950 --> 00:05:27,390
Ceci conclut cette
première semaine de cours.

89
00:05:28,070 --> 00:05:30,870
La semaine suivante, nous
verrons plus en détails la

90
00:05:30,970 --> 00:05:35,270
syntaxe de Pharo, les
blocks et un outil qui est l'

91
00:05:35,370 --> 00:05:36,490
inspecteur d'objets.

