• Aucun résultat trouvé

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 identi e 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 di erents 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 (de nition 6.3.7). (iv) Une methode heritee peut ^etre rede nie. 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 de nition. Une telle methode sera dite

applicable

.

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 De nition formelle des classes

De nition 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.

De nition 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)).

De nition 6.2.3 (selecteur de champ)

Un

selecteur de champ

est un observateur de la classe de pro l:fsel i : C ?!T imuni d'une precondition:pr ec i: T 1 :::T n nT i ?!Bool ean. Les T

i sont appeles

types structurants

de la classe. Un selecteur de champ peut ^etre ca-

racterise par une

valeur par defaut

. La precondition est de nie sur les selecteurs de champ autres que celui qu'elle contr^ole. Toutefois pour simpli er, elle sera noteepr ec

i(

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 de nis 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.

De nition 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 Ei el. Une methode est un couple constitue d'un selecteur et d'un descriptif. Ce descriptif est un pro l (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 une

methode de selecteur m.

La de nition de l'aspect entra^ne la de nition 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, de nies par l'utilisateur, sont des extensions. Avoir un generateur unique reduit l'eventail des possibilite de de nition de methodes: une methode n'est de nissable que par extension d'autres methodes ou operations de types prede nis1. Une extension est une

operation dont toute application est reductible a l'application d'autres operations.

De nition 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 de ned op erators de [HH82] ou les operations secondaires de [LG90]. La de nition 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 de nies 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 pro ls de ses methodes.

6.2.3 Speci cation algebrique associee a une classe

A une classe formelle nous pouvons associer une presentation algebrique d'un type abstrait de donnees.

De nition6.2.6 (speci cationalgebrique)

La speci cation 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 pro l 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 de nie en utilisant autant de declaration qu'il y a de combinaisons possibles. Pour simpli er nous decri- vons un pro l 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 di erents (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 de nis (egalite forte). Pour describe nous

avons uniquement decrit le cas ou tous les selecteurs de champ sont de nis. SoitT

C l'algebre des termes clos sur la signature de la speci cation associee a

C. La facon

standard de donner une semantique a une telle speci cation 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 speci cation. Les instances d'une classe sont semantiquement les valeurs de l'algebre initiale de la speci cation 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'inde ni et ajoutee a tous les types comme en

semantique denotationelle [R.D91].

De nition6.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) uveri e 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 speci cation hierarchique ou plate des listes est possible [AR94b].

Dans les de nitions 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.

De nition6.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