1
00:00:07,670 --> 00:00:11,800
Bonjour à tous. Bienvenue
dans la séquence 1 de cette

2
00:00:12,000 --> 00:00:15,800
semaine 4, semaine dans
laquelle nous allons couvrir les

3
00:00:16,000 --> 00:00:20,660
aspects d'héritage en
Pharo, le mécanisme de LookUp et

4
00:00:20,860 --> 00:00:21,780
du développement Web.

5
00:00:22,670 --> 00:00:26,830
Dans cette première
séquence, nous allons introduire les

6
00:00:27,030 --> 00:00:29,000
notions d'héritage.

7
00:00:29,540 --> 00:00:32,700
Vous verrez que ces
notions sont très proches de la

8
00:00:32,900 --> 00:00:36,810
notion d'héritage dans d'autres
langages à classes, notamment Java.

9
00:00:37,190 --> 00:00:39,340
Je vous conseille quand
même de regarder, même si vous

10
00:00:39,540 --> 00:00:41,100
êtes familiarisés avec
ces notions, car nous allons

11
00:00:41,300 --> 00:00:46,250
introduire du vocabulaire et
une représentation graphique

12
00:00:46,450 --> 00:00:49,170
qu'on va réutiliser
ensuite dans tous les slides et

13
00:00:49,370 --> 00:00:50,790
toutes les séquences qui vont suivre.

14
00:00:51,270 --> 00:00:53,300
Alors dans cette séquence
nous allons couvrir, qu'est-ce

15
00:00:53,500 --> 00:00:55,610
que l'héritage et comment l'utiliser.

16
00:00:56,310 --> 00:00:58,680
Vous pouvez voir, sur la
droite, une représentation de 2

17
00:00:58,880 --> 00:01:02,900
 classes: la classe
Rectangle, avec tout d'abord son nom,

18
00:01:03,930 --> 00:01:05,120
ses variables
d'instance et ses méthodes.

19
00:01:07,830 --> 00:01:10,330
En-dessous la même
chose, le nom de la classe

20
00:01:10,530 --> 00:01:13,710
ColoredRectangle, ses
variables d'instance, ses méthodes.

21
00:01:16,840 --> 00:01:19,620
La flèche verticale ici, on
voit que c'est un triangle

22
00:01:20,080 --> 00:01:24,480
vide comme tête de flèche,
indique une relation d'héritage.

23
00:01:24,680 --> 00:01:28,890
Donc la sous-classe
ColoredRectangle hérite de la classe Rectangle.

24
00:01:29,910 --> 00:01:33,230
La classe ColoredRectangle,
les sous-classes en général

25
00:01:33,430 --> 00:01:37,390
raffinent le comportement et
l'état de leurs super classes.

26
00:01:38,080 --> 00:01:40,650
Une sous-classe, comme ici
ColoredRectangle, peut ajouter

27
00:01:40,950 --> 00:01:43,880
de l'état et du
comportement à sa super classe.

28
00:01:45,190 --> 00:01:49,300
Donc là, la classe
ColoredRectangle, elle ajoute de l'état

29
00:01:49,550 --> 00:01:52,590
sous la forme de 2
variables d'instance, color

30
00:01:55,340 --> 00:01:57,380
et borderedColor, et une
méthode, la méthode color.

31
00:01:58,180 --> 00:02:03,140
Toutes les classes
héritent, à un moment ou à un autre

32
00:02:03,340 --> 00:02:04,230
de la classe object.

33
00:02:04,610 --> 00:02:06,140
En fait ce n'est
pas tout à fait exact.

34
00:02:06,530 --> 00:02:09,450
Toutes les classes, on est sûr
qu'elles héritent de la classe ProtoObject.

35
00:02:10,340 --> 00:02:13,570
Cependant la classe Proto
Object, c'est plus un détail

36
00:02:13,770 --> 00:02:16,510
qui va servir dans des cas
extrêmement précis et donc

37
00:02:16,830 --> 00:02:19,500
dans le reste de ce cours
nous dirons que toutes les

38
00:02:19,700 --> 00:02:21,310
 classes héritent de
object, et ça nous suffira pour

39
00:02:21,510 --> 00:02:24,030
comprendre l'ensemble
des mécanismes de Pharo.

40
00:02:24,230 --> 00:02:27,050
La classe ProtoObject
étant laissée dans certains cas

41
00:02:27,250 --> 00:02:29,910
vraiment très spécifiques.
Et il y a peu de chances que

42
00:02:30,110 --> 00:02:33,580
vous en ayez besoin si vous êtes
seulement en train d'apprendre Pharo.

43
00:02:34,390 --> 00:02:37,540
Alors l'héritage se
comporte de 2 façons différentes

44
00:02:37,740 --> 00:02:41,040
suivant que c'est l'héritage de
l'état ou l'héritage du comportement.

45
00:02:41,950 --> 00:02:43,790
L'héritage de l'état est statique.

46
00:02:44,030 --> 00:02:46,640
Ça signifie qu'au moment où
on va créer la sous-classe,

47
00:02:47,800 --> 00:02:51,250
dans la sous-classe on va
savoir exactement quelles sont

48
00:02:51,530 --> 00:02:53,720
l'ensemble de ces
variables d'instances.

49
00:02:54,470 --> 00:02:56,620
Par contre pour le
comportement, on va faire ça

50
00:02:56,820 --> 00:02:58,380
dynamiquement, c'est-à-dire
que pendant l'exécution du

51
00:02:58,580 --> 00:03:00,940
 programme on va regarder
quelles sont les méthodes

52
00:03:01,140 --> 00:03:02,710
définies dans les
sous-classes et dans les super classes.

53
00:03:03,500 --> 00:03:06,630
Donc au niveau des
variables d'instance, l'héritage des

54
00:03:06,830 --> 00:03:08,700
variables d'instance se fait à
la création de la sous-classe.

55
00:03:09,320 --> 00:03:14,000
Donc à la création de la
sous-classe, on va prendre les

56
00:03:14,530 --> 00:03:17,290
variables d'instance
définies dans la sous-classe, donc

57
00:03:17,490 --> 00:03:22,300
ici color et border
color, et on va faire l'

58
00:03:22,500 --> 00:03:26,390
union avec toutes les
variables d'instance définies dans

59
00:03:26,590 --> 00:03:28,950
la super classe, dans la
super classe de la super classe,

60
00:03:29,210 --> 00:03:31,180
et caetera jusqu'à remonter à object.

61
00:03:34,170 --> 00:03:36,000
Donc ici les variables
d'instance de ColoredRectangle

62
00:03:37,020 --> 00:03:40,250
seront Width height
color et border color.

63
00:03:41,470 --> 00:03:43,540
Pour le comportement le
mécanisme est complètement

64
00:03:43,740 --> 00:03:47,050
différent, et plusieurs
des séquences qui vont suivre

65
00:03:48,020 --> 00:03:50,280
vont présenter
exactement comment ça se passe.

66
00:03:51,000 --> 00:03:54,650
Globalement, l'héritage de
comportement se fait à l'exécution.

67
00:03:55,470 --> 00:03:59,420
C'est-à-dire que lorsqu'on
envoie un message à un objet,

68
00:04:00,240 --> 00:04:03,660
la méthode correspondante va être
recherchée dans la hiérarchie de classes.

69
00:04:04,420 --> 00:04:08,770
Donc là, si j'envoie un
message à ColoredRectangle, le

70
00:04:09,000 --> 00:04:12,890
message Area par
exemple, on va le chercher

71
00:04:13,840 --> 00:04:16,650
dans sa classe, on va
chercher la méthode correspondante

72
00:04:16,850 --> 00:04:18,320
dans la classe de A color rectangle.

73
00:04:18,520 --> 00:04:23,270
On ne trouve pas la
méthode Area donc on remonte

74
00:04:23,590 --> 00:04:26,650
dans la super classe, on
cherche la méthode Area, on la

75
00:04:26,850 --> 00:04:29,080
trouve, c'est celle-ci qui est
sélectionnée qui va être exécutée.

76
00:04:30,080 --> 00:04:30,940
Alors pour résumer.

77
00:04:31,520 --> 00:04:35,630
L'héritage, donc cette
notion de sous-classe et de super

78
00:04:35,830 --> 00:04:37,700
 classe, permet à une
sous-classe de raffiner le

79
00:04:37,900 --> 00:04:41,250
comportement de sa super
 classe et de l'étendre.

80
00:04:42,200 --> 00:04:45,800
La sous-classe peut aussi
étendre, c'est-à-dire ajouter

81
00:04:46,060 --> 00:04:47,620
de l'état à sa super classe.

82
00:04:48,510 --> 00:04:51,190
Pharo a un modèle
d'héritage simple, donc une classe a

83
00:04:51,390 --> 00:04:52,640
une et une seule super classe.

84
00:04:52,960 --> 00:04:55,110
Il est possible de faire
une sorte d'héritage multiple

85
00:04:55,310 --> 00:04:58,050
face à la notion de trait, mais
nous n'aborderons pas cette notion ici.

86
00:04:59,010 --> 00:05:01,830
En haut de la hiérarchie
on trouve object et aussi la

87
00:05:02,030 --> 00:05:04,920
 classe ProtoObject, mais on
ne rentrera pas dans ce détail.

88
00:05:05,890 --> 00:05:09,400
L'héritage d'état est
statique, c'est-à-dire qu'il se

89
00:05:09,600 --> 00:05:13,080
fait lorsque la sous-classe est
définie, tandis que l'héritage

90
00:05:13,280 --> 00:05:15,240
de comportement est
dynamique, il se fait à l'exécution

91
00:05:15,440 --> 00:05:18,030
du programme chaque fois qu'on
envoie un message à un objet.

