L'envoi de message est note comme une application de fonction, dans lequelselecteurest le
nom de la methode. La selection est simple et l'objet receveur est identie par la variableSelf. <selecteur>(<receveur> <, argument>*)
Heritage
L'heritage est une relation entre classes qui exprime d'abord une similitude des instances. Notre approche se base sur la notion de crcition [Roy92]. A partir d'une etude concrete des dierents cas d'heritage nous avons synthetise notre propre notion de crcition : la
projection
structurelle
.Les proprietes informelles de l'heritage sont: (i) Toute sous-instance peut ^etre vue ou conver- tie implicitement en une super-instance. (ii) Une instance peut ^etre substituee par une sous- instance dans un envoi de message (
principe de substitution
). (iii) Toute methode de la super-classe est applicable a une sous-classe (denition 6.3.7). (iv) Une methode heritee peut ^etre redenie. La propriete la plus importante en pratique est s^urement l'heritage du compor- tement. Les trois premieres proprietes reposent sur la notion de crcition La derniere est liee a la notion de surcharge d'operateur. Une methode est en quelque sorte generique pour toutes les sous-classes de sa classe de denition. Une telle methode sera diteapplicable
.Les classes abstraites sont traitees a part, car elles n'ont pas d'instances. Toutefois la notion de crcition reste valable pour donner des criteres d'heritage.
6.2.2 Denition formelle des classes
Denition 6.2.1 (classe formelle)
Une classe formelle est un tripletC=<A; E; S>qui sont respectivement l'aspect, les extensions
et les super-classes directes.
La notion de super-classe est relative a l'heritage et sera etudiee dans la section 6.3.
Denition 6.2.2 (aspect)
Un aspect est compose d'une structure abstraite (un ensemble de selecteurs de champ) et d'une contrainte A= [fsel ;cont]
Une description abstraite d'un objet est un n-uplet de valeur : T 1
:::T
n resultant de l'action
des selecteurs de champ sur l'objet: (fsel 1(
o); :::; fsel n(
o)).
Denition 6.2.3 (selecteur de champ)
Un
selecteur de champ
est un observateur de la classe de prol:fsel i : C ?!T imuni d'une precondition:pr ec i: T 1 :::T n nT i ?!Bool ean. Les Ti sont appeles
types structurants
de la classe. Un selecteur de champ peut ^etre ca-racterise par une
valeur par defaut
. La precondition est denie sur les selecteurs de champ autres que celui qu'elle contr^ole. Toutefois pour simplier, elle sera noteepr eci(
u) ouuest une
description abstraite d'objet. Les preconditions sont supposees toutes non trivialement fausses. Notez que le selecteur de champ ressemble plus aux accesseurs denis dans les langages de programmation a objets qu'aux variables d'instance elles-m^eme. En ce sens la precondition est naturelle. Un selecteur de champ booleen sans precondition est appele
selecteur d'etat
. Il sert en general de precondition a d'autres selecteurs de champ.Denition 6.2.4 (contrainte)
Une contrainte est une condition cont:T 1
:::T n
La contrainte est un predicat qui doit ^etre valide pour tous les objets de la classe. Elle peut ^etre consideree comme une precondition et une postcondition a toute methode et en particulier a la methode de creation d'instance. Elle joue le r^ole d'un invariant de classe comme en Eiel. Une methode est un couple constitue d'un selecteur et d'un descriptif. Ce descriptif est un prol (type de la methode) et une liste d'axiomes algebriques. La fonction sel(m)donne le
selecteur de la methode m. Par abus de langage, le terme
methode
m designera souvent unemethode de selecteur m.
La denition de l'aspect entra^ne la denition d'un ensemble de methodes primitives:
le generateur newC
;; newC : cree une instance de la classe et l'initialise newC : Ti*
?! C
les selecteurs de champ fseli
;; fseli : recupere l'information correspondante
fseli : C
?! T i
la copie differentielle: copy
;; copy : copie un objet et modifie les valeurs associees aux champ copy : C Ti*
?! C
l'egalite semantique : equal? ;; equal? : teste l'egalite semantique de deux objets
equal? : C OBJECT ?! Boolean
la representation externe : describe ;; describe : representation externe d'un objet
describe : C ?! String
Figure 45 : Tableau des methodes primitives fonctionnelles
Les autres methodes, denies par l'utilisateur, sont des extensions. Avoir un generateur unique reduit l'eventail des possibilite de denition de methodes: une methode n'est denissable que par extension d'autres methodes ou operations de types predenis1. Une extension est une
operation dont toute application est reductible a l'application d'autres operations.
Denition 6.2.5 (extension)
Une operation e est une extension d'un ensemble F d'operations ssi e() == t ou t est un
terme construit surF.
Cette notion d'extension est essentiellement la m^eme que lesconvertibleop erationschez [GH78],
les dened op erators de [HH82] ou les operations secondaires de [LG90]. La denition d'une
extension doit ^etre prouvee coherente. Les techniques de reecriture sont interessantes dans ce contexte [JL86, Kap86]. Remarquons que les observateurs sont forcement des extensions cohe- rentes des selecteurs de champ.
Un dictionnaire de methodes est un ensemble de methodes qui possede la propriete:
car dinal(Sel(E)) =car dinal(E). L'ensemble des methodes denies dans une classe C est un
dictionnaire noteD ico(C).
Les methodes comme classees comme suit: methodes 8 > > > > > > > > > > < > > > > > > > > > > : primitives 8 > > > > > > < > > > > > > : observateur 8 < : selecteursdechamp egalite semantic (equal?) description externe (describe) constructeurs
generateur (new) copie d0objets (copy)
extensions ensemble ordonne Ext = (ei)1in
La relation constituee des liens entre une classe et ses classes structurantes est appelee la dep endancestructurelleet notee DPS. La relation d'utilisation USE, plus generale, lie une
classe avec toutes les classes qui apparaissent directement ou indirectement dans les prols de ses methodes.
6.2.3 Specication algebrique associee a une classe
A une classe formelle nous pouvons associer une presentation algebrique d'un type abstrait de donnees.
Denition6.2.6 (specicationalgebrique)
La specication algebrique associee a une classe formelle est composee : { des sortes utilises: ce sont les noms des classes utilisees,
{ d'une signature: elle est constituee du prol des methodes du dictionnaire,
{ d'axiomes: ce sont les axiomes des extensions et ceux des methodes primitives. Ces der- niers sont exprimes par les schemas suivants (avec preconditions explicites):
axiomes des selecteurs de champ: projections
r eq uir es:cont(X 1 ;:::;X n )^pr ec i (X 1 ;:::;X n ) fseli(new C(X1;:::;Xn))==Xi
axiome de la copie differentielle requires:cont(X 1 ;:::;X n )^pr ec i (X 1 ;:::;X n ) let (:ci^X 0 i =fseli(Sel f)) _ (ci^X 0 i =Xi) in copy (Sel f;c 1 ;X 1 ;:::;c n ;X n )==new C(X 0 1 ;:::;X 0 n ) axiomes de l'egalite
eq ual ?(Sel f;X)==eq ual bis?(X ;Sel f) let nupl etSel f = fsel
1
(Sel f);:::;fsel n
(Sel f) nupl etX fsel
1
(X);:::;fsel n
(X) in
eq ual bis?(Sel f;X)==((not(pr ec1(nupl etSel f)) ^ not(pr ec1(nupl etX))) _ (pr ec
1
(nupl etSel f) ^ pr ec 1
(nupl etX) ^ eq ual bis?(fsel 1 (Sel f);fsel 1 (X)))) ^ ... ^ ((not(pr ec n
(nupl etSel f)) ^ not(pr ec n
(nupl etX))) _
(pr ecn(nupl etSel f) ^ pr ecn(nupl etX) ^ eq ual bis?(fseln(Sel f);fseln(X)))) tel
axiome de la description
let nupl etSel f = fsel1(Sel f);:::;fseln(Sel f) in
requires:pr ec1(nupl etSel f) ^:::^ pr ecn(nupl etSel f)
descr ibe(Sel f)==concat("C";descr ibe(fsel1(Sel f));:::;descr ibe(fsel1(Sel f))) tel
La semantique des methodes primitives avec mots-cles peut ^etre completement denie en utilisant autant de declaration qu'il y a de combinaisons possibles. Pour simplier nous decri- vons un prol maximal uniquement. Pour des questions de typage, ces methodes notamment
equal? ne sont pas correctes. En selection simple, comparer des objets de type compatibles
mais dierents (instance d'un type et instance d'un sous-type) impose de passer par une fonc- tion intermediaireequalbis?. Pourequalbis?nous avons retenu le principe d'une egalite des
selecteurs de champ quand ils sont tous les deux denis (egalite forte). Pour describe nous
avons uniquement decrit le cas ou tous les selecteurs de champ sont denis. SoitT
C l'algebre des termes clos sur la signature de la specication associee a
C. La facon
standard de donner une semantique a une telle specication est d'en determiner l'algebre initiale. L'existence de cette algebre initiale est assuree par l'utilisation d'axiomes conditionnels positifs. L'algebre initiale peut se calculer en quotientant l'algebre des termes clos par la relation d'egalite associee aux axiomes de la specication. Les instances d'une classe sont semantiquement les valeurs de l'algebre initiale de la specication algebrique associee a la classe. Ainsi un terme clos de T
C, de sorte
C, est un representant particulier d'une instance de C. Une approche
de type classe de modeles est egalement possible [BB92], elle est necessaire pour donner une semantique aux classes abstraites. La deduction a partir des axiomes de la classe C est notee `
C.
6.2.4 Structure inductive des instances
Nous ne nous interessons qu'aux classes possedant des instances niment engendrees et qui sont non vides2. La valeur speciale
?denote l'indeni et ajoutee a tous les types comme en
semantique denotationelle [R.D91].
Denition6.2.7 (classehabitee)
Une classe est habitee ssi elle a au moins une instanceo 6= ?et telle que: soitusa description
abstraite
(1) ua une structure conforme a l'aspect de la classe.
(2) uverie la contrainte.
(3) sipr ec i(
u)est vrai alorsfsel i(
o)6=?.
Une induction peut ^etre facilement construite sur les termes quand il n'y a pas de pre- condition de champ. Il sut de considerer le graphe de dependance structurelle sans circuit. Notre approche etend la notion usuelle de classe et autorise plus de facilite: par exemple une specication hierarchique ou plate des listes est possible [AR94b].
Dans les denitions precedentes, la methode primitivenewCest consideree comme unique
generateur de la classe C mais il n'est pas standard a cause des mots-cles mais egalement des
preconditions et de la contrainte. Suivant les cas, il peut ^etre de base ou multiple (generateur de base et generateur recursif). Sa semantique exacte peut ^etre donnee par un ensemble de generateurs usuels.
Denition6.2.8 (vecteurcaracteristique)
Le vecteur caracteristique d'une description abstraiteu2 Q
1in T
i est un n-uplet de booleens
tel que pr ec i(
u) =v i
pour 1in. Princip e 6.2.9 (interpretationdenew)
L'interpretation algebrique de newest un ensemble de generateur g
v. A chaque vecteur carac-
teristique v correspond un generateur g v: pr ofil v ?! C de preconditioncont^pr ec v tel que pr ofil
v represente le sous-mot des types structurants qui a un type partout ou
v est vrai et pr ed
v est une conjonction des expressions ( v i ^ pr ec i) _(:v i ^ :pr ec i). 2