WEBVTT

00:00:00.840 --> 00:00:04.000 align:middle
Bonjour. Dans cette séquence nous
allons parler des méthodes de classe.

00:00:04.180 --> 00:00:08.430 align:middle
Alors en Pharo nous avons
vu tout est un objet et qu'on

00:00:08.630 --> 00:00:09.920 align:middle
pouvait envoyer des
messages et des objets.

00:00:11.180 --> 00:00:15.360 align:middle
Donc si on prend ces 2
informations-là, les classes sont

00:00:15.560 --> 00:00:17.790 align:middle
aussi des objets et on peut
envoyer les informations à

00:00:18.000 --> 00:00:19.880 align:middle
des classes donc on peut
envoyer des messages à des classes.

00:00:21.630 --> 00:00:26.240 align:middle
Alors 2 exemples: Time now, on
envoie le message now à l'objet

00:00:26.440 --> 00:00:29.650 align:middle
Time qui est une classe, et ça
nous retourne l'heure actuelle.

00:00:31.240 --> 00:00:36.000 align:middle
Donc j'envoie le message
now à l'objet Time qui est un

00:00:36.200 --> 00:00:39.700 align:middle
nom de classe, qui est une
 classe, ça me renvoie l'heure actuelle.

00:00:40.510 --> 00:00:44.180 align:middle
De la même façon, j'envoie
le message today à l'objet

00:00:44.380 --> 00:00:47.100 align:middle
Date qui est une classe, et
ça me retourne la date du jour.

00:00:48.080 --> 00:00:51.310 align:middle
Voici 3 autres exemples:
dans le premier, j'envoie le

00:00:51.510 --> 00:00:55.000 align:middle
message workingDirectory à
la classe FileLocator, et ça

00:00:55.200 --> 00:00:58.000 align:middle
me donne le chemin d'accès en cours.

00:00:58.280 --> 00:01:02.460 align:middle
Donc le dossier dans
lequel l'exécution se passe.

00:01:03.810 --> 00:01:07.490 align:middle
Dans le deuxième exemple,
j'envoie le message getPng à l'objet

00:01:07.690 --> 00:01:12.240 align:middle
ZnEasy, avec en argument
une url, l'url d'un fichier

00:01:12.440 --> 00:01:16.960 align:middle
png, et ça me retourne le fichier
png qui est précédemment téléchargé.

00:01:18.640 --> 00:01:20.880 align:middle
Dans le troisième
exemple, j'envoie le message

00:01:21.080 --> 00:01:23.210 align:middle
startDefaultOn à
ZnSserver, donc qui est une classe

00:01:23.410 --> 00:01:27.520 align:middle
encore une fois,
avec un numéro de port

00:01:28.180 --> 00:01:30.310 align:middle
et ceci démarre le serveur http.

00:01:31.570 --> 00:01:35.390 align:middle
Donc dans les 3 cas, on a une classe,
on envoie un message à cette classe.

00:01:36.630 --> 00:01:40.230 align:middle
Alors comment est-ce qu'on fait
pour implémenter une méthode de classe?

00:01:41.060 --> 00:01:45.770 align:middle
On sélectionne la classe,
on appuie sur le bouton Class

00:01:46.000 --> 00:01:48.550 align:middle
pour dire qu'on veut
implémenter une méthode du côté

00:01:48.750 --> 00:01:51.750 align:middle
 classes et non pas du côté
instances, et on implémente

00:01:51.950 --> 00:01:53.840 align:middle
une méthode comme
on ferait d'habitude.

00:01:54.830 --> 00:01:58.000 align:middle
Donc là, la méthode today,
elle est implémentée du côté

00:01:58.200 --> 00:02:00.690 align:middle
 classes, dans la classe Date.

00:02:03.520 --> 00:02:06.650 align:middle
Alors voici sur ce
slide une erreur fréquente.

00:02:07.600 --> 00:02:11.730 align:middle
Ici on souhaite
envoyer le message WithValue

00:02:13.540 --> 00:02:17.350 align:middle
à la classe Counter,
retourne un nouveau Counter avec une

00:02:17.550 --> 00:02:18.500 align:middle
valeur fournie en paramètre.

00:02:18.700 --> 00:02:23.320 align:middle
Donc on voudrait
que counter with value

00:02:23.520 --> 00:02:26.770 align:middle
10 retourne un nouveau Counter
qui commencerait à la valeur 10.

00:02:28.340 --> 00:02:31.750 align:middle
Or, si j'évalue cette
expression j'obtiens la valeur

00:02:31.950 --> 00:02:34.380 align:middle
counter et pas un nouveau Counter.

00:02:34.660 --> 00:02:38.120 align:middle
En fait j'obtiens la classe et pas
une nouvelle instance de cette classe.

00:02:38.650 --> 00:02:40.130 align:middle
Alors pourquoi cette erreur ?

00:02:40.330 --> 00:02:41.090 align:middle
Donc quel est le problème ?

00:02:41.620 --> 00:02:46.280 align:middle
Le problème vient que par défaut,
toutes les méthodes retournent self.

00:02:47.370 --> 00:02:50.140 align:middle
Donc si je ne spécifie pas
la valeur à retourner, la

00:02:50.340 --> 00:02:53.560 align:middle
méthode va retourner Self.
Donc le code ci-dessus est

00:02:53.760 --> 00:02:56.350 align:middle
équivalent au code
ci-dessous et donc on retourne Self.

00:02:56.550 --> 00:02:59.300 align:middle
Dans ce cas-là, Self
c'est la classe Counter.

00:03:00.760 --> 00:03:04.150 align:middle
Donc la méthode retourne la
 classe elle-même et pas l'instance

00:03:04.350 --> 00:03:05.110 align:middle
qui a été créée juste au-dessus.

00:03:05.310 --> 00:03:10.090 align:middle
Donc pour corriger ce
problème, il suffit d'

00:03:10.290 --> 00:03:13.240 align:middle
ajouter un chapeau
devant le self new.

00:03:14.280 --> 00:03:17.000 align:middle
Alors en résumé, les
 classes sont des objets.

00:03:17.450 --> 00:03:19.810 align:middle
On peut envoyer des messages
à n'importe quel objet donc

00:03:20.010 --> 00:03:21.240 align:middle
on peut envoyer un
message à une classe.

00:03:21.770 --> 00:03:24.830 align:middle
Pour implémenter les
méthodes correspondantes, il faut

00:03:25.030 --> 00:03:28.890 align:middle
appuyer sur le bouton Class
après avoir sélectionné une classe.

00:03:30.000 --> 00:03:31.780 align:middle
La plupart des méthodes de
 classes servent à créer de

00:03:32.000 --> 00:03:34.080 align:middle
nouvelles instances de ces
 classes mais pas seulement, on

00:03:34.280 --> 00:03:37.010 align:middle
peut imaginer d'autres
possibilités et vous verrez

00:03:37.210 --> 00:03:40.010 align:middle
beaucoup d'autres utilisations de
la méthode de classes dans Pharo.

00:03:40.880 --> 00:03:44.420 align:middle
Les méthodes de classe sont
telles qu'exactement comme

00:03:44.620 --> 00:03:45.650 align:middle
les autres méthodes,
il n'y a pas de règles

00:03:45.850 --> 00:03:49.790 align:middle
particulières, le LookUp
fonctionne exactement de la même façon.

00:03:50.490 --> 00:03:51.940 align:middle
Et nous verrons ça
la semaine prochaine.

