1
00:00:00,840 --> 00:00:04,000
Bonjour. Dans cette séquence nous
allons parler des méthodes de classe.

2
00:00:04,180 --> 00:00:08,430
Alors en Pharo nous avons
vu tout est un objet et qu'on

3
00:00:08,630 --> 00:00:09,920
pouvait envoyer des
messages et des objets.

4
00:00:11,180 --> 00:00:15,360
Donc si on prend ces 2
informations-là, les classes sont

5
00:00:15,560 --> 00:00:17,790
aussi des objets et on peut
envoyer les informations à

6
00:00:18,000 --> 00:00:19,880
des classes donc on peut
envoyer des messages à des classes.

7
00:00:21,630 --> 00:00:26,240
Alors 2 exemples: Time now, on
envoie le message now à l'objet

8
00:00:26,440 --> 00:00:29,650
Time qui est une classe, et ça
nous retourne l'heure actuelle.

9
00:00:31,240 --> 00:00:36,000
Donc j'envoie le message
now à l'objet Time qui est un

10
00:00:36,200 --> 00:00:39,700
nom de classe, qui est une
 classe, ça me renvoie l'heure actuelle.

11
00:00:40,510 --> 00:00:44,180
De la même façon, j'envoie
le message today à l'objet

12
00:00:44,380 --> 00:00:47,100
Date qui est une classe, et
ça me retourne la date du jour.

13
00:00:48,080 --> 00:00:51,310
Voici 3 autres exemples:
dans le premier, j'envoie le

14
00:00:51,510 --> 00:00:55,000
message workingDirectory à
la classe FileLocator, et ça

15
00:00:55,200 --> 00:00:58,000
me donne le chemin d'accès en cours.

16
00:00:58,280 --> 00:01:02,460
Donc le dossier dans
lequel l'exécution se passe.

17
00:01:03,810 --> 00:01:07,490
Dans le deuxième exemple,
j'envoie le message getPng à l'objet

18
00:01:07,690 --> 00:01:12,240
ZnEasy, avec en argument
une url, l'url d'un fichier

19
00:01:12,440 --> 00:01:16,960
png, et ça me retourne le fichier
png qui est précédemment téléchargé.

20
00:01:18,640 --> 00:01:20,880
Dans le troisième
exemple, j'envoie le message

21
00:01:21,080 --> 00:01:23,210
startDefaultOn à
ZnSserver, donc qui est une classe

22
00:01:23,410 --> 00:01:27,520
encore une fois,
avec un numéro de port

23
00:01:28,180 --> 00:01:30,310
et ceci démarre le serveur http.

24
00:01:31,570 --> 00:01:35,390
Donc dans les 3 cas, on a une classe,
on envoie un message à cette classe.

25
00:01:36,630 --> 00:01:40,230
Alors comment est-ce qu'on fait
pour implémenter une méthode de classe?

26
00:01:41,060 --> 00:01:45,770
On sélectionne la classe,
on appuie sur le bouton Class

27
00:01:46,000 --> 00:01:48,550
pour dire qu'on veut
implémenter une méthode du côté

28
00:01:48,750 --> 00:01:51,750
 classes et non pas du côté
instances, et on implémente

29
00:01:51,950 --> 00:01:53,840
une méthode comme
on ferait d'habitude.

30
00:01:54,830 --> 00:01:58,000
Donc là, la méthode today,
elle est implémentée du côté

31
00:01:58,200 --> 00:02:00,690
 classes, dans la classe Date.

32
00:02:03,520 --> 00:02:06,650
Alors voici sur ce
slide une erreur fréquente.

33
00:02:07,600 --> 00:02:11,730
Ici on souhaite
envoyer le message WithValue

34
00:02:13,540 --> 00:02:17,350
à la classe Counter,
retourne un nouveau Counter avec une

35
00:02:17,550 --> 00:02:18,500
valeur fournie en paramètre.

36
00:02:18,700 --> 00:02:23,320
Donc on voudrait
que counter with value

37
00:02:23,520 --> 00:02:26,770
10 retourne un nouveau Counter
qui commencerait à la valeur 10.

38
00:02:28,340 --> 00:02:31,750
Or, si j'évalue cette
expression j'obtiens la valeur

39
00:02:31,950 --> 00:02:34,380
counter et pas un nouveau Counter.

40
00:02:34,660 --> 00:02:38,120
En fait j'obtiens la classe et pas
une nouvelle instance de cette classe.

41
00:02:38,650 --> 00:02:40,130
Alors pourquoi cette erreur ?

42
00:02:40,330 --> 00:02:41,090
Donc quel est le problème ?

43
00:02:41,620 --> 00:02:46,280
Le problème vient que par défaut,
toutes les méthodes retournent self.

44
00:02:47,370 --> 00:02:50,140
Donc si je ne spécifie pas
la valeur à retourner, la

45
00:02:50,340 --> 00:02:53,560
méthode va retourner Self.
Donc le code ci-dessus est

46
00:02:53,760 --> 00:02:56,350
équivalent au code
ci-dessous et donc on retourne Self.

47
00:02:56,550 --> 00:02:59,300
Dans ce cas-là, Self
c'est la classe Counter.

48
00:03:00,760 --> 00:03:04,150
Donc la méthode retourne la
 classe elle-même et pas l'instance

49
00:03:04,350 --> 00:03:05,110
qui a été créée juste au-dessus.

50
00:03:05,310 --> 00:03:10,090
Donc pour corriger ce
problème, il suffit d'

51
00:03:10,290 --> 00:03:13,240
ajouter un chapeau
devant le self new.

52
00:03:14,280 --> 00:03:17,000
Alors en résumé, les
 classes sont des objets.

53
00:03:17,450 --> 00:03:19,810
On peut envoyer des messages
à n'importe quel objet donc

54
00:03:20,010 --> 00:03:21,240
on peut envoyer un
message à une classe.

55
00:03:21,770 --> 00:03:24,830
Pour implémenter les
méthodes correspondantes, il faut

56
00:03:25,030 --> 00:03:28,890
appuyer sur le bouton Class
après avoir sélectionné une classe.

57
00:03:30,000 --> 00:03:31,780
La plupart des méthodes de
 classes servent à créer de

58
00:03:32,000 --> 00:03:34,080
nouvelles instances de ces
 classes mais pas seulement, on

59
00:03:34,280 --> 00:03:37,010
peut imaginer d'autres
possibilités et vous verrez

60
00:03:37,210 --> 00:03:40,010
beaucoup d'autres utilisations de
la méthode de classes dans Pharo.

61
00:03:40,880 --> 00:03:44,420
Les méthodes de classe sont
telles qu'exactement comme

62
00:03:44,620 --> 00:03:45,650
les autres méthodes,
il n'y a pas de règles

63
00:03:45,850 --> 00:03:49,790
particulières, le LookUp
fonctionne exactement de la même façon.

64
00:03:50,490 --> 00:03:51,940
Et nous verrons ça
la semaine prochaine.

