• Aucun résultat trouvé

Langage de programmation haut niveau

Un exemple: la methode Object Oriented Analysis and Design

3.1.3 Langage de programmation haut niveau

Il s'agit de de nir un langage a objets haut niveau pour permettre les preuves et le raf- nement. Les avantages sont evidemment l'executabilite des speci cations et leur semantique formelle. L'ecueil principal a eviter est la sur-speci cation. Les langages Ei el [Mey88], FOOPS [GM87b], POOL [Ame89] et le modele des classes formelles [ACR94] illustrent cette approche. Une autre voie est d'ajouter des possibilites de speci cation et de veri cation dans les langages de programmation a objets. Ceci permet une certi cation des composants logiciels. Par exemple, Fresco [Wil91] et SmallVDM [LH93], bases sur Smalltalk, ont des caracteristiques inspirees de VDM. Analyse et Conception à objets de programmation Spécifications Langages à objets formelles Formaliser Object-Z, Z++ PLUSS, OBJ3 HOOD/Z OOD/Object-Z OS/OP, GSBL Eiffel, POOL Fresco, SmallVDM

Figure 14 : Integration de concepts formels et a objets.

3.2 Panorama

Nous passons en revue quelques langages de speci cation ou de conception abstraite inte- grant des modeles formels a objets.

3.2.1 ObjectZ

Object-Z est une extension du langage de speci cation Z (voir section 2.2.5) aux concepts a objets [CLLF93, Duk90, DD90, Smi93, Cus91]. Il a ete developpe a l'universite de Queensland en Australie, sous l'impulsion notamment de Roger Duke et Gordon Rose. C'est a la fois le precurseur dans le domaine et le plus utilise actuellement.

Mo dele a objets

L'objectif initial du langage est de structurer les speci cations Z. Pour cela, un nouveau schema encapsule di erents schemas Z dans une classe. Un schema de classe permet de regrouper

un ensemble coherent de schemas d'etat ou d'operation dans une m^eme structure syntaxique. Les de nitions et declarations locales ont une syntaxe Z.

Nom de Classe [parametres generiques] liste de visibilite

superclasses

definitions de types definitions de constantes schema d0etat

schema d0etat initial

schema d0operations

invariant d0historique

Lorsque la liste de visibilite est omise, tous les attributs sont visibles. Dans l'exemple de la le d'attente, la classeHospitalQueueest partiellement de nie par:

HospitalQueue[T] :::declarations:::

avec les declarations suivantes2: jMAX ::= 20 patients : seq T #patientsMAX INIT patients =hi Join[T] (patients) patient? : T patient? =2patients #patients < MAX patients0= item _ hpatient?i LeaveN[T] (patients) patient! : T patients6=hi

patients =hpatient!i_ item

La constante MAX est propre a la classe. Le schema d'etat comprend une variable appelee attributs et son etat initial. Dans les schemas d'operations, l'inclusion de schemas () devient

2Le format L

implicite. Seuls les attributs modi es gurent, les autres ne changent pas. Lors de l'instanciation d'une classe generique (appelee application), Object-Z autorise le renommage des attributs ('/') et des parametres d'operations. Ainsi, une le d'attente d'un bureau de poste pourrait s'ecrire

PostOfficeQueue == HospitalQueue[People][patients=suppliers; patient?=supplier?;patient!=supplier!]

Les declarations heritees et les nouvelles declarations sont mixees, y compris l'invariant. Les con its de noms sont resolus par renommage global pour la classe ou local aux operations. La surcharge (redef) et la suppression (remove) sont acceptes.

Une instance de la classe est une a ectation de valeurs aux attributs, coherente avec la de nition de la classe. Une declaration de type c : Cde nit une reference a un objet de classe

C. Pour de nir deux objets distinctsc,d : Cen Object-Z, il faut ajouter une contrainte c6= d.

Les objets peuvent avoir des constituants d'objets. Les references immuables aux objets sont declarees par des constantes. Par exemple, nous de nissons l'h^opital par

Hospital :::declarations:::

qurgency;qnormal: HospitalQueue[People]

qurgency6= qnormal

INIT

qurgency:INIT ^qnormal:INIT

Admit= qb normal:Join

Urgency= qb urgency:Join

Cure= CureUrgencyb _CureNormal_CureNobody

CureUrgency (qurgency;qnormal)

p! : People

qurgency:IsEmptyreport! = false

qurgency:Leavepatient! = p!

CureNormal (qurgency;qnormal)

p! : People

qurgency:IsEmptyreport! = true

qnormal:IsEmptyreport! = false

qnormal:Leavepatient! = p!

CureNobody (qurgency;qnormal)

p! : People

qurgency:IsEmptyreport! = true

L'instanciation est propagee dans les objets complexes. Par exemple, un h^opital contient un nombre quelconque de les.

jqueues : IFHospitalQueue[People] INIT 8q : queuesqueue:INIT SelectNonFullQueue qnf? : HospitalQueue[People] qnf?2queues

qnf?:IsFullreport! = false

SelectNonEmptyQueue qne? : HospitalQueue[People] qne?2queues

qne?:IsEmptyreport! = false

SelectTwoQueues= SelectNonEmptyQueueb ^SelectNonFullQueueqne?6= qnf?

Admit= SelectQueueb q?:Join

Cure= SelectQueueb q?:Join

IsEmpty =b 8q : queuesq:IsEmptyreport! = true Caracteristiquespropres

Object-Z ajoute des operateurs de schema a Z: le choix indeterministe S[]T, la conjonction S  T (accessibilite des declarations) et l'operateur parallele S jjT, qui correspond en fait a

une sorte de serialisation car les parametres de m^eme nom sont uni es. Le polymorphisme d'un objet peut ^etre explicite par la notation#Class, qui indique que le type de l'objet considere

sera un descendant de Class.

Transfer = SelectTwoQueuesb (qne?:Leavejjqnf?:Join)

Une interpretation comportementale est possible au travers de traces, appelees invariant historique. Un historique est une sequence d'evenements que subit un objet. Ces evenements correspondent a des appels d'operations. L'invariant d'historique pourrait ^etre donne en termes de predicats Z, mais la logique temporelle est plus adaptee [DS92, SD92]. Les operateurs logiques sont: suivant( ) possible au rang suivant,possible(}) vrai dans le futur, toujours(ut)

vrai a tout moment. Par exemple, la classe des h^opitaux dont les les sont equitables est une sous-classe deHospitalQueue[T]telle que si la le d'attente de l'h^opital n'est pas vide alors

elle se reduira dans le futur: FairHospitalQueue[T] HospitalQueue[T]