|
| Postscript, PDF | Didier Rémy | Polytechnique, INRIA |
|
|
||||
|
|
|

|
| · | Les variables d'instance, éventuellement mutables, forment l'état interne de l'objet; ce sont des valeurs qui ne sont accessibles que par les méthodes. |
| · | Les méthodes sont des fonctions qui ont accès en plus de leurs arguments aux variables d'instance et à l'objet lui-même. |
|
État interne
|
Méthodes
|
c:
|
|
| · | un ensemble de variables d'instances |
| · | un ensemble de méthodes. |
new classe
|
|
|
|
|
|
class [ virtual ] [ [ Type-var* ] ]
Nom [ Variable* ] = Classe fun Variable* -> Classeobject [ ( Variable [ : Type ]
) ] Corps endinherit Classe [ as Variable ]val [ mutable ] Variable = Expressionmethod [ virtual ] [ private ] Variable =
Expressioninitializer Expression<- Expression# Variablenew Classe
|
|
|
|
intérêts à
l'utilisateur, mais seulement de la rendre visible dans les sous-classes en
vue d'une utilisation ultérieure.
|
|
|
intérêts appellera la nouvelle définition de la méthode
dépôt.
|
|
dépôt
|
|
|
initializer pour rattraper le coup.
Paramétrisation a priori
|
Paramétrisation a posteriori
|
initializer sont exécutées immédiatement après la création
de l'objet, dans l'ordre de définition. Elles ont accès aux variables
d'instance et à self.
|
|
|
|
|
compte_bancaire est dit fermé (entièrement spécifié)
|
|
.. se comporte comme une variable de type anonyme.
|
as
|
|
self est toujours ouvert (partiellement
spécifié). Il est compatible avec l'ensemble des méthodes couramment
définies.
|
class [ virtual ] [ [ Type-var* ] ]
Nom [ Type* ] : T class type [ virtual ] [ [ Type-var* ] ] Nom [ Type* ] = T-> Tobject [ ( Type ) ] Type-du-corps end val [ mutable ] Variable : Typemethod [ virtual ] [ private ] Variable : Type< variable : Type [ ; variable
: Type ] * [ ; .. ] >( Type as Type-var )
|
|
|
|
compte_avec_relevé est une
instance du second.
|
|
compte_avec_relevé et compte sont
incompatibles.
|
fun x -> ( (x : compte_avec_relevé) : compte);; |
|
|
|
|
| · | chaque méthode de A est une méthode de B; |
| · | son type dans A est un sous-type de son type dans B (sous-typage en profondeur); |
| · | IA est sous-type de IB on peut agrandir l'Image |
| · | DB est sous-type de DA on peut rétrécir son Domaine |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Oo.copy |
: (< .. > as 'a) -> 'a |
|
ajoute doit retourner une nouvelle mappe, sans modifier
l'ancienne.
|
|
|
< > par (Oo.copy self). sauvegarde peuvent être ajoutées a posteriori à (presque) n'importe quelle autre classe, eg.:
|
|
fsauvegarde de la classe sauvegarde:
la méthode récupère retourne un objet qui est une copie de self dans
laquelle le champ original pointer vers la version originale.
Il faut continuer avec la copie pour pouvoir plus tard
récupérer la version originale.
On reprend la version qui conserve les sauvegardes intermédiaires.
Rafiner la version impérative de la sauvergarde en profondeur en ajoutant
une méthode balai qui conserve les sauvegardes
de façon logarithmique (ie. ne conserve que les versions
d'âge 20, 21, ... 2n).
|
|
|
eq est-elle binaire? |
|
|
string avec les fonctionnalités essentielles des
chaînes. concat aux chaînes de caractères.compte pour fournir des dépôts et des retraits en euros, les conversions
étant explicites. (Ici, on ne demande pas de cacher la représentation de
la monnaie par l'utilisation de type abstrait; on pourra donc utiliser des
float à la fois pour représenter les dollars et les francs. Voir l'exercice
sur les taux de changes.)euro_compte puis une ensuite classe compte_mixte par héritage
multiple. This document was translated from LATEX by HEVEA and HACHA.