WEBVTT

00:00:07.670 --> 00:00:11.800 align:middle
Bonjour à tous. Bienvenue
dans la séquence 1 de cette

00:00:12.000 --> 00:00:15.800 align:middle
semaine 4, semaine dans
laquelle nous allons couvrir les

00:00:16.000 --> 00:00:20.660 align:middle
aspects d'héritage en
Pharo, le mécanisme de LookUp et

00:00:20.860 --> 00:00:21.780 align:middle
du développement Web.

00:00:22.670 --> 00:00:26.830 align:middle
Dans cette première
séquence, nous allons introduire les

00:00:27.030 --> 00:00:29.000 align:middle
notions d'héritage.

00:00:29.540 --> 00:00:32.700 align:middle
Vous verrez que ces
notions sont très proches de la

00:00:32.900 --> 00:00:36.810 align:middle
notion d'héritage dans d'autres
langages à classes, notamment Java.

00:00:37.190 --> 00:00:39.340 align:middle
Je vous conseille quand
même de regarder, même si vous

00:00:39.540 --> 00:00:41.100 align:middle
êtes familiarisés avec
ces notions, car nous allons

00:00:41.300 --> 00:00:46.250 align:middle
introduire du vocabulaire et
une représentation graphique

00:00:46.450 --> 00:00:49.170 align:middle
qu'on va réutiliser
ensuite dans tous les slides et

00:00:49.370 --> 00:00:50.790 align:middle
toutes les séquences qui vont suivre.

00:00:51.270 --> 00:00:53.300 align:middle
Alors dans cette séquence
nous allons couvrir, qu'est-ce

00:00:53.500 --> 00:00:55.610 align:middle
que l'héritage et comment l'utiliser.

00:00:56.310 --> 00:00:58.680 align:middle
Vous pouvez voir, sur la
droite, une représentation de 2

00:00:58.880 --> 00:01:02.900 align:middle
 classes: la classe
Rectangle, avec tout d'abord son nom,

00:01:03.930 --> 00:01:05.120 align:middle
ses variables
d'instance et ses méthodes.

00:01:07.830 --> 00:01:10.330 align:middle
En-dessous la même
chose, le nom de la classe

00:01:10.530 --> 00:01:13.710 align:middle
ColoredRectangle, ses
variables d'instance, ses méthodes.

00:01:16.840 --> 00:01:19.620 align:middle
La flèche verticale ici, on
voit que c'est un triangle

00:01:20.080 --> 00:01:24.480 align:middle
vide comme tête de flèche,
indique une relation d'héritage.

00:01:24.680 --> 00:01:28.890 align:middle
Donc la sous-classe
ColoredRectangle hérite de la classe Rectangle.

00:01:29.910 --> 00:01:33.230 align:middle
La classe ColoredRectangle,
les sous-classes en général

00:01:33.430 --> 00:01:37.390 align:middle
raffinent le comportement et
l'état de leurs super classes.

00:01:38.080 --> 00:01:40.650 align:middle
Une sous-classe, comme ici
ColoredRectangle, peut ajouter

00:01:40.950 --> 00:01:43.880 align:middle
de l'état et du
comportement à sa super classe.

00:01:45.190 --> 00:01:49.300 align:middle
Donc là, la classe
ColoredRectangle, elle ajoute de l'état

00:01:49.550 --> 00:01:52.590 align:middle
sous la forme de 2
variables d'instance, color

00:01:55.340 --> 00:01:57.380 align:middle
et borderedColor, et une
méthode, la méthode color.

00:01:58.180 --> 00:02:03.140 align:middle
Toutes les classes
héritent, à un moment ou à un autre

00:02:03.340 --> 00:02:04.230 align:middle
de la classe object.

00:02:04.610 --> 00:02:06.140 align:middle
En fait ce n'est
pas tout à fait exact.

00:02:06.530 --> 00:02:09.450 align:middle
Toutes les classes, on est sûr
qu'elles héritent de la classe ProtoObject.

00:02:10.340 --> 00:02:13.570 align:middle
Cependant la classe Proto
Object, c'est plus un détail

00:02:13.770 --> 00:02:16.510 align:middle
qui va servir dans des cas
extrêmement précis et donc

00:02:16.830 --> 00:02:19.500 align:middle
dans le reste de ce cours
nous dirons que toutes les

00:02:19.700 --> 00:02:21.310 align:middle
 classes héritent de
object, et ça nous suffira pour

00:02:21.510 --> 00:02:24.030 align:middle
comprendre l'ensemble
des mécanismes de Pharo.

00:02:24.230 --> 00:02:27.050 align:middle
La classe ProtoObject
étant laissée dans certains cas

00:02:27.250 --> 00:02:29.910 align:middle
vraiment très spécifiques.
Et il y a peu de chances que

00:02:30.110 --> 00:02:33.580 align:middle
vous en ayez besoin si vous êtes
seulement en train d'apprendre Pharo.

00:02:34.390 --> 00:02:37.540 align:middle
Alors l'héritage se
comporte de 2 façons différentes

00:02:37.740 --> 00:02:41.040 align:middle
suivant que c'est l'héritage de
l'état ou l'héritage du comportement.

00:02:41.950 --> 00:02:43.790 align:middle
L'héritage de l'état est statique.

00:02:44.030 --> 00:02:46.640 align:middle
Ça signifie qu'au moment où
on va créer la sous-classe,

00:02:47.800 --> 00:02:51.250 align:middle
dans la sous-classe on va
savoir exactement quelles sont

00:02:51.530 --> 00:02:53.720 align:middle
l'ensemble de ces
variables d'instances.

00:02:54.470 --> 00:02:56.620 align:middle
Par contre pour le
comportement, on va faire ça

00:02:56.820 --> 00:02:58.380 align:middle
dynamiquement, c'est-à-dire
que pendant l'exécution du

00:02:58.580 --> 00:03:00.940 align:middle
 programme on va regarder
quelles sont les méthodes

00:03:01.140 --> 00:03:02.710 align:middle
définies dans les
sous-classes et dans les super classes.

00:03:03.500 --> 00:03:06.630 align:middle
Donc au niveau des
variables d'instance, l'héritage des

00:03:06.830 --> 00:03:08.700 align:middle
variables d'instance se fait à
la création de la sous-classe.

00:03:09.320 --> 00:03:14.000 align:middle
Donc à la création de la
sous-classe, on va prendre les

00:03:14.530 --> 00:03:17.290 align:middle
variables d'instance
définies dans la sous-classe, donc

00:03:17.490 --> 00:03:22.300 align:middle
ici color et border
color, et on va faire l'

00:03:22.500 --> 00:03:26.390 align:middle
union avec toutes les
variables d'instance définies dans

00:03:26.590 --> 00:03:28.950 align:middle
la super classe, dans la
super classe de la super classe,

00:03:29.210 --> 00:03:31.180 align:middle
et caetera jusqu'à remonter à object.

00:03:34.170 --> 00:03:36.000 align:middle
Donc ici les variables
d'instance de ColoredRectangle

00:03:37.020 --> 00:03:40.250 align:middle
seront Width height
color et border color.

00:03:41.470 --> 00:03:43.540 align:middle
Pour le comportement le
mécanisme est complètement

00:03:43.740 --> 00:03:47.050 align:middle
différent, et plusieurs
des séquences qui vont suivre

00:03:48.020 --> 00:03:50.280 align:middle
vont présenter
exactement comment ça se passe.

00:03:51.000 --> 00:03:54.650 align:middle
Globalement, l'héritage de
comportement se fait à l'exécution.

00:03:55.470 --> 00:03:59.420 align:middle
C'est-à-dire que lorsqu'on
envoie un message à un objet,

00:04:00.240 --> 00:04:03.660 align:middle
la méthode correspondante va être
recherchée dans la hiérarchie de classes.

00:04:04.420 --> 00:04:08.770 align:middle
Donc là, si j'envoie un
message à ColoredRectangle, le

00:04:09.000 --> 00:04:12.890 align:middle
message Area par
exemple, on va le chercher

00:04:13.840 --> 00:04:16.650 align:middle
dans sa classe, on va
chercher la méthode correspondante

00:04:16.850 --> 00:04:18.320 align:middle
dans la classe de A color rectangle.

00:04:18.520 --> 00:04:23.270 align:middle
On ne trouve pas la
méthode Area donc on remonte

00:04:23.590 --> 00:04:26.650 align:middle
dans la super classe, on
cherche la méthode Area, on la

00:04:26.850 --> 00:04:29.080 align:middle
trouve, c'est celle-ci qui est
sélectionnée qui va être exécutée.

00:04:30.080 --> 00:04:30.940 align:middle
Alors pour résumer.

00:04:31.520 --> 00:04:35.630 align:middle
L'héritage, donc cette
notion de sous-classe et de super

00:04:35.830 --> 00:04:37.700 align:middle
 classe, permet à une
sous-classe de raffiner le

00:04:37.900 --> 00:04:41.250 align:middle
comportement de sa super
 classe et de l'étendre.

00:04:42.200 --> 00:04:45.800 align:middle
La sous-classe peut aussi
étendre, c'est-à-dire ajouter

00:04:46.060 --> 00:04:47.620 align:middle
de l'état à sa super classe.

00:04:48.510 --> 00:04:51.190 align:middle
Pharo a un modèle
d'héritage simple, donc une classe a

00:04:51.390 --> 00:04:52.640 align:middle
une et une seule super classe.

00:04:52.960 --> 00:04:55.110 align:middle
Il est possible de faire
une sorte d'héritage multiple

00:04:55.310 --> 00:04:58.050 align:middle
face à la notion de trait, mais
nous n'aborderons pas cette notion ici.

00:04:59.010 --> 00:05:01.830 align:middle
En haut de la hiérarchie
on trouve object et aussi la

00:05:02.030 --> 00:05:04.920 align:middle
 classe ProtoObject, mais on
ne rentrera pas dans ce détail.

00:05:05.890 --> 00:05:09.400 align:middle
L'héritage d'état est
statique, c'est-à-dire qu'il se

00:05:09.600 --> 00:05:13.080 align:middle
fait lorsque la sous-classe est
définie, tandis que l'héritage

00:05:13.280 --> 00:05:15.240 align:middle
de comportement est
dynamique, il se fait à l'exécution

00:05:15.440 --> 00:05:18.030 align:middle
du programme chaque fois qu'on
envoie un message à un objet.

