Bonjour à tous. Bienvenue dans la séquence 1 de cette
semaine 4, semaine dans laquelle nous allons couvrir les
aspects d'héritage en Pharo, le mécanisme de loock-up et
du développement Web.
Dans cette première séquence, nous allons introduire les
notions d'héritage.
Vous verrez que ces notions sont très proches de la
notion d'héritage dans d'autres langages à classes, notamment Java.
Je vous conseille quand même de regarder, même si vous
êtes familiarisés avec ces notions, car nous allons
introduire du vocabulaire et une représentation graphique
qu'on va réutiliser ensuite dans tous les slides et
toutes les séquences qui vont suivre.
Alors dans cette séquence nous allons couvrir, qu'est-ce
que l'héritage et comment l'utiliser.
Vous pouvez voir, sur la droite, une représentation de 2
classes: la classe rectangle, avec tout d'abord son nom,
ses variables d'instance et ses méthodes.
En-dessous la même chose, le nom de la classe color
rectangle, ses variables d'instance, ses méthodes.
La flèche verticale ici, on voit que c'est un triangle
vide comme tête de flèche, indique une relation d'héritage.
Donc la sous-classe color rectangle hérite de la classe rectangle.
La classe color rectangle, les sous-classes en général
raffinent le comportement et l'état de leurs super classes.
Une sous-classe, comme ici color rectangle, peut ajouter
de l'état et du comportement à sa super classe.
Donc là, la classe color rectangle, elle ajoute de l'état
sous la forme de 2 variables d'instance, color
et bordered color, et une méthode, la méthode color.
Toutes les classes héritent, à un moment ou à un autre
de la classe object.
En fait ce n'est pas tout à fait exact.
Toutes les classes, on est sûr qu'elles héritent de la classe proto objet.
Cependant la classe proto objet, c'est plus un détail qui
va servir dans des cas extrêmement précis et donc dans le
reste de ce cours nous dirons que toutes les classes
héritent de object, et ça nous suffira pour comprendre l'ensemble
des mécanismes de Pharo.
La classe proto object étant laissée dans certains cas
vraiment très spécifiques. Et il y a peu de chances que
vous en ayez besoin si vous êtes seulement en train d'apprendre Pharo.
Alors l'héritage se comporte de 2 façons différentes
suivant que c'est l'héritage de l'état ou l'héritage du comportement.
L'héritage de l'état est statique.
Ça signifie qu'au moment où on va créer la sous-classe,
dans la sous-classe on va savoir exactement quelles sont
l'ensemble de ces variables d'instances.
Par contre pour le comportement, on va faire ça
dynamiquement, c'est-à-dire que pendant l'exécution du
programme on va regarder quelles sont les méthodes
définies dans les sous-classes et dans les super classes.
Donc au niveau des variables d'instance, l'héritage des
variables d'instance se fait à la création de la sous-classe.
Donc à la création de la sous-classe, on va prendre les
variables d'instance définies dans la sous-classe, donc
ici color et border color, et on va faire l'
union avec toutes les variables d'instance définies dans
la super classe, dans la super classe de la super classe,
etcetera jusqu'à remonter à object.
Donc ici les variables d'instance de color rectangle
seront With a color et border color.
Pour le comportement le mécanisme est complètement
différent, et plusieurs des séquences qui vont suivre
vont présenter exactement comment ça se passe.
Globalement, l'héritage de comportement se fait à l'exécution.
C'est-à-dire que lorsqu'on envoie un message à un objet,
la méthode correspondante va être recherchée dans la hiérarchie de classes.
Donc là, si j'envoie un message à colored rectangle, le
message Area par exemple, on va le chercher
dans sa classe, on va chercher la méthode correspondante
dans la classe de A color rectangle.
On ne trouve pas la méthode Area donc on remonte
dans la super classe, on cherche la méthode Area, on la
trouve, c'est celle-ci qui est sélectionnée qui va être exécutée.
Alors pour résumer.
L'héritage, donc cette notion de sous-classe et de super
classe, permet à une sous-classe de raffiner le
comportement de sa super classe et de l'étendre.
La sous-classe peut aussi étendre, c'est-à-dire ajouter
de l'état à sa super classe.
Pharo a un modèle d'héritage simple, donc une classe a
une et une seule super classe.
Il est possible de faire une sorte d'héritage multiple
face à la notion de trait, mais nous n'aborderons pas cette notion ici.
En haut de la hiérarchie on trouve object et aussi la
classe proto object, mais on ne rentrera pas dans ce détail.
L'héritage d'état est statique, c'est-à-dire qu'il se
fait lorsque la sous-classe est définie, tandis que l'héritage
de comportement est dynamique, il se fait à l'exécution
du programme chaque fois qu'on envoie un message à un objet.