Tervminták megvalósítása B formális nyelven Papp Olga Vadász Péter Témavezető: Fóthi Ákos
Tartalom Tervminták B formális nyelv Példa tervminta megvalósítására (Singleton) Megvalósítási módszerek, hasonlóságok tervmintáknál A B nyelv előnyei tervminták implementálása esetén
Tervminták Objektumelvű tervezés Újrafelhasználható terv - általános, később alkalmazható terv - minimális újratervezés Bevált jó tervek, tervrészletek: tervminták Felépítés: - név - feladat - megoldás - következmények
Singleton és Memento tervminták Singleton static Singleon* uniqueInstance singletonData static Singleton* Instance() SingletonOperation() GetSingletonData() Originator state SetMemento(Memento m) CretaMemento() Memento state GetState() SetState() Caretaker
B formális nyelv (Jean-Raymond Abrial 1985) objektum alapú nyelv leírás absztrakt gépek segítségével alapgépek – probléma specifikációja finomító gépek – finomítás tetszőleges lépésben implementáció gépek – a program egy lehetséges megvalósítása (futtatható kód) elő- és utófeltételek definiálhatósága minden lépésben automatikus típusellenőrzés és helyességbizonyítás
A B nyelv szintaxisa MACHINE SINGLETON CONCRETE_VARIABLES exist, singletonData INVARIANT singletonData:NAT & exist:BOOL INITIALISATION singletonData::NAT || exist:=FALSE OPERATIONS singletonOp(adat)= PRE adat:NAT THEN SELECT exist=TRUE THEN singletonData:=adat WHEN exist=FALSE THEN exist:=TRUE || singletonData:=adat END END; data<--getSingletonDat = PRE exist=TRUE THEN data:=singletonData END; bbool<--isExist= bbool:=exist END
B-t támogató szoftverek jBTools - szövegszerkesztő, kibővítve egyszerű B típusellenőrzéssel, és fordítóval (Java, C#) - ingyenes, egyszerű, csökkentett utasításkészlet, kisebb hiányosságok B4Free - típusellenőrző és helyességbizonyító eszközrendszer - ingyenes, korlátozott helyességbizonyító eljárások, grafikus felülettel: Click’n’Prove
Singleton tervminta B-ben imports sees Singleton SingintfaceÍr KiírBT_IO Singleton static Singleon* uniqueInstance singletonData static Singleton* Instance() SingletonOperation() GetSingletonData()
Singleton megvalósítása B-ben MACHINE SINGLETON CONCRETE_VARIABLES exist, singletonData INVARIANT singletonData:NAT & exist:BOOL INITIALISATION singletonData::NAT || exist:=FALSE OPERATIONS singletonOp(adat)= PRE adat:NAT THEN SELECT exist=TRUE THEN singletonData:=adat WHEN exist=FALSE THEN exist:=TRUE || singletonData:=adat END END; data<--getSingletonDat = PRE exist=TRUE THEN data:=singletonData END; bbool<--isExist= bbool:=exist END IMPLEMENTATION SINGLETON_imp REFINES SINGLETON INITIALISATION exist:=FALSE; singletonData::NAT OPERATIONS singletonOp(adat)= BEGIN IF exist=TRUE THEN singletonData:=adat ELSE BEGIN exist:=TRUE; singletonData:=adat END END; data<--getSingletonDat = BEGIN data:=singletonData END; bbool<--isExist = BEGIN bbool:=exist END END MACHINE SINGINTFACE SEES SINGLETON OPERATIONS singletonOperation(adat)= PRE adat:NAT THEN skip END; data<--getSingletonData = data:=0 END IMPLEMENTATION SINGINTFACE_imp REFINES SINGINTFACE IMPORTS SINGLETON OPERATIONS singletonOperation(adat)= BEGIN singletonOp(adat) END; data<--getSingletonData = BEGIN data<--getSingletonDat END MACHINE IR SEES SINGINTFACE OPERATIONS beir = skip END IMPLEMENTATION IR_imp REFINES IR SEES SINGINTFACE OPERATIONS beir= BEGIN singletonOperation(1234) END MACHINE KIIR INCLUDES IR OPERATIONS main = skip END IMPLEMENTATION KIIR_imp REFINES KIIR IMPORTS BT_IO, IR, SINGINTFACE OPERATIONS main = VAR bb, ii IN beir; bb<--isExist; IF bb=TRUE THEN BEGIN writeString("RENDBEN"); ii<--getSingletonData; writeInteger(ii) END ELSE writeString ("HIBA") END END
Singleton és Memento B-ben imports sees Singleton SingintfaceÍr KiírBT_IO includes/ imports State Memento Originator Usememento BT_IO
MACHINE SINGINTFACE SEES SINGLETON OPERATIONS singletonOperation(adat)= PRE adat:NAT THEN skip END; data<--getSingletonData = data:=0 END IMPLEMENTATION SINGINTFACE_imp REFINES SINGINTFACE IMPORTS SINGLETON OPERATIONS singletonOperation(adat)= BEGIN singletonOp(adat) END; data<--getSingletonData = BEGIN data<--getSingletonDat END MACHINE ORIGINATOR INCLUDES os.STATE(NAT), mm.MEMENTO OPERATIONS create_memento = skip; set_memento = PRE mm.exist = TRUE THEN skip END; set_azon(az) = PRE az : NAT THEN skip END; set_adat(ad) = PRE ad : NAT THEN skip END; az<--get_azon = az<--os.get_azon; ad<--get_adat = ad:=1 END IMPLEMENTATION ORIGINATOR_imp REFINES ORIGINATOR IMPORTS os.STATE(NAT), mm.MEMENTO OPERATIONS … END
MACHINE STATE(AVAILABLE_STATE, zero) CONSTRAINTS card(AVAILABLE_STATE) > 0 & zero: AVAILABLE_STATE CONCRETE_VARIABLES azon, adat INVARIANT azon : NAT & adat : AVAILABLE_STATE INITIALISATION azon :=0 || adat :: AVAILABLE_STATE OPERATIONS az<--get_azon = az := azon; set_azon(az) = PRE az : NAT THEN azon := az END; ad<--get_adat = ad := adat; set_adat(ad) = PRE ad : AVAILABLE_STATE THEN adat := ad END Típusellenőrzés és helyességbizonyítás MACHINE STATE(AVAILABLE_STATE) CONSTRAINTS card(AVAILABLE_STATE): NAT1 CONCRETE_VARIABLES azon, adat INVARIANT azon : NAT & adat : AVAILABLE_STATE INITIALISATION azon :=0 || adat :: AVAILABLE_STATE OPERATIONS az<--get_azon = az := azon; set_azon(az) = PRE az : NAT THEN azon := az END; ad<--get_adat = ad := adat; set_adat(ad) = PRE ad : AVAILABLE_STATE THEN adat := ad END IMPLEMENTATION STATE_imp(AVAILABLE_STATE) REFINES STATE INITIALISATION azon :=0 ; adat ::AVAILABLE_STATE OPERATIONS az<--get_azon = BEGIN az := azon END; set_azon(az) = BEGIN azon := az END; ad<--get_adat = BEGIN ad := adat END; set_adat(ad) = BEGIN adat := ad END IMPLEMENTATION STATE_imp(AVAILABLE_STATE, zero) REFINES STATE INITIALISATION azon :=0 ; adat := zero OPERATIONS az<--get_azon = BEGIN az := azon END; set_azon(az) = BEGIN azon := az END; ad<--get_adat = BEGIN ad := adat END; set_adat(ad) = BEGIN adat := ad END
Tervminták megvalósítása B-ben specifikáció implementációk felírása futtatható (Java) kód generálása a tervmintát felhasználó programok specifikációja és implementációja tesztelhetőség ellenőrzések és helyességbizonyítás hasonló struktúrájú felírás
A B nyelv előnyei tervmintáknál specifikáció és lépésenkénti finomítás lépésenként típusellenőrzés és helyességbizonyítás adott problémára való alkalmazás esetén a tervminta implementációjának helyességbizonyítása a tervmintát felhasználó program és a tervminta kapcsolatának ellenőrzése minden absztrakciós szinten elő- és utófeltételek (alkalmazhatósági feltételek) ellenőrzése