|
Postscript, PDF | Didier Rémy | Polytechnique, INRIA |
Cours (super, self) | Exercises |
|
· | Les objets sont des enregistrements |
· | Les variables d'instance et les méthodes sont des champs. |
· | Les messages sont des étiquettes. |
· | L'envoi de message est une auto-application: extraction du message de l'objet et application à l'objet |
· | Les classes sont des enregistrements (prototypes) |
· | L'héritage est l'extension des enregistrements |
|
|
· | Les objets sont des enregistrements mais ne décrivant que leur état interne. |
· | Les variables d'instance sont des champs. |
· | Les méthodes sont des fonctions ordinaires. |
· | Les messages sont des fonctions surchargées. |
· | L'envoi d'un message est l'application d'une fonction surchargée à le (ou les) objet(s) destinataire(s). |
|
|
@
:
|
|
|
|
|
La résolution est dynamique |
|
@
.
|
p
.
(C'est un mécanisme entièrement différent du cast en Java qui ne change
jamais la représentation des objets.)
|
|
|
equal
pour tester l'égalité sur les points. On définit un
comportement par défaut pour les paires de points et un comportement spécial
pour les paires de points colorés.
|
|
|
|
· | définir les classes comme précédemment, mais sans les méthodes |
· | définir les méthodes immédiatement après les définitions de classes. |
|
|
· | Une condition de fermeture pour assurer que la résolution des messages est toujours possible de façon non-ambigü. |
· | Une condition de cohérence pour assurer que le typage statique est cohérent avec la résolution dynamique. |
|
|
|
|
int
<
float
. Le message plus
est définit par les deux méthodes:
|
int
× float
et float
× int
dont le seul
sous-type commun est int
× int
qui est donc
maximal, mais pour lequel il n'y a pas d'implémentation. plus
par une définition
pour un argument de type int
× "int".
|
|
· | Le recouvrement d'une méthode par une autre (spécialisation) qui est covariant. |
· | Le remplacement d'une méthode par une autre qui est contra-variant. |
|
|
num
est le type des nombres en précision
arbitraire, et supposons que int
< num
. int
× int
et int
× float
en relation de sous-typage, mais leur codomaine respectif,
"num" et float
ne sont pas en relation de sous-typage (à l'inverse
float
< num
).int
× int
mais de type statique int
× float
. On
s'attend statiquement à récupérer une valeur de type float
, mais on reçoit
dynamiquement une valeur de type num
.
|
p@point
n'est plus un simple cast (changement du
type statique, qui n'aurait pas d'effet sur le comportement dynamique).p
est un sous-type du type vers lequel il est coercé (ce qui implique que la
représentation de p
est compatible (a plus de champs, et les valeurs
des champs communs sont compatibles) avec la représentation du type vers
lequel il est coercé.
|
|
~
remy
/
nice
. Le compilateur s'appelle ~
remy
/
nice
/
bin
/
nicec
et
l'interprétre de byte code ~
remy
/
nice
/
bin
/
nicer
.
|
|
|
|
|
|
|
|
print
de la librairie
nice
.
lang
:
|
|
|
|
|
|
|
|
Nice
est-elle préférable à
celle en Java? en Ocaml?
En Java, il n'y a pas de solution bien typée: on est obligé de perdre de l'information et d'utiliser des coercions pour la récupérer. En Ocaml, la méthode \lst"equal" est bien typée, mais asymmétrique. On doit rendre montrer une partie de la représentation (comme en Nice). |
Nil
et Cons
, puis
certaines méthodes sur ces classes, puis définir la classe Append
,
puis une nouvelle méthode sur l'ensemble des trois classes.
|
|
|
This document was translated from LATEX by HEVEA and HACHA.