1 / 18

Specifikāciju valoda VDM

Specifikāciju valoda VDM. Specifikāciju valodu pamati. VDM: ievada piezīmes. VDM: modeļbāzēta sistēmu specifikācijas valoda (analoģiski kā B un Z), sistēma tiek aprakstīta kā abstrakta mašīna ;

cain-wilson
Télécharger la présentation

Specifikāciju valoda VDM

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Specifikāciju valoda VDM Specifikāciju valodu pamati

  2. VDM: ievada piezīmes • VDM: modeļbāzēta sistēmu specifikācijas valoda (analoģiski kā B un Z), sistēma tiek aprakstīta kā abstrakta mašīna; • VDM - plašāks līdzekļu kopums, VDM-SL: specifikāciju valoda, agrāk pazīstama kā META-IV; šeit VDM un VDM-SL - sinonīmi; • VDM 2 pamata virzieni: programmēšanas valodu semantika, vispārēja specifikāciju valoda (šeit - otrais virziens) • Sistēmas stāvoklis VDM: kopu teorijas terminos – t.s. datu reprezentācijas abstrakcija VDM; • Pamata datu strukturizācijas līdzekļi: • kompozītie objekti (ierakstu analogi), kopas, attēlojumi, virknes • Operācijas VDM: uzdotas ar sākuma un beigu nosacījumiem (netiek fiksētas algoritmiskās realizācijas detaļas) – t.s. operāciju abstrakcija VDM; • Algoritmiskā un datu refinement (reification) – detalizācijas aspekti; • Spriedumu veikšana: LPF - Logic of Partial Functions, loģika ar vairāk, nekā 2 vērtībām: (true, false, undefined); • VDM-SL: pastāv ISO standarts • Literatūra: sk. Specification of Software Systems (Alagar, Periyasamy), pieejama bibliotēkā. Pieejama arī cita literatūra (sk. kursa mājas lapa, resursi tīmeklī).

  3. VDM: specifikācijas struktūra Specifikācijas struktūra: bloki, nav jābūt uzdotiem noteiktā kārtībā: types< tipu definīcijas > Valodā ir iebūvēti tipi, un arī iespēja lietotājam definēt tipus values< vērtību definīcijas > Iespējams definēt konstantes state < stāvokļa vārds > of Stāvoklis definē globālo mainīgo telpu, < stāvokļa definīcija > globālie mainīgie izmantoti operācijās end functions< funkciju definīcijas > operations Operācijas ir līdzīgas funkcijām, bet papildus < operāciju definīcijas > var lasīt un izmainīt stāvokļu komponentes (globālos mainīgos). Tālāk var runāt arī par specifikāciju strukturizāciju moduļos, apskatot moduļu interfeisus, u.c. – sk. Cliff Jones, Systematic Software Development Using VDM,mazliet moduļa elementus redzēsim piemērā.

  4. VDM: tipu sistēma Tipi valodā VDM: 1) Vienkāršie tipi: a) Primitīvie tipi: Z, N, N1, R, Q, B, char, tokentoken – sanumurējams dažādu vērtību kopums, iekšējā reprezentācija netiek fiksēta (tā var tikt izvēlēta vēlāk implementācijas laikā).b) Konstanšu tipi (Quote types):SARKANS – izteiksme, kas apzīmē gan tipa nosaukumu, gan arī vienīgo vērtību šajā tipā (rakstam izteiksmes ar visiem lielajiem burtiem). 2) Saliktie tipi:a) Tipu apvienojums: T = T1 | T2 | … | Tnb) Kopas tipi. Kopu uzdošana: - ar uzskaitījumu: {1,2,3,4,5,6,7,8,9}, - ar predikātu { n  N | n mod 2 = 0 }, - P-set – kopa, kas sastāv no visām galīgajām P tipa objektu kopām.c) Virknes: T*, T+ - visas un netukšās virknes ar elementiem no tipa T[‘a’, ‘e’, ‘i’, ‘o’, ‘u’], [ n  3 | n  {3,2,1} ]  [1, 8, 27]d) Dekarta reizinājumiT1  T2 …  Tn elementi – korteži: mk-(x,y) …

  5. VDM: tipu sistēma (turpināts) Tipi valodā VDM: 1) Vienkāršie tipi: … 2) Saliktie tipi:… e) Attēlojumu (galīgo funkciju) tipi: D m R, D – definīcijas tips, R – vērtību tipsX = {1,2,3}, Y = {1,8,27}M1 = { 1  1, 2  8, 3  27}M2 = { n  m | n X  m Y  m = n3 }Operācijas: dom, rng, M-1, , † (pārdefinēšana),  (kompozīcija), () - aplikācija, <| - def. apg. sašaurināšana, <-| - izslēgšana no def. apg., |>, |-> f) Ierakstu (kompozītie tipi), sk. nākamo slaidu g) Funkciju tipi: F: N  N , tad ( n:N  n * 2)  F. Funkcijas: - nevar būt kā parametri / vērtības operācijām (bet var būt funkcijām), - nevar būt kā elementi kopās un attēlojumos, - tās nevar būt kā stāvokļu komponentes vai lokālie mainīgie, - tām nav definēta vienādība.

  6. Ierakstu tips valodā VDM Ierakstu (kompozīto objektu) tips: T :: v1 : T1 v2 : T2 … vn : Tn Piemērs: Datec :: year: N day: {1,…,31} Pilnais pieraksts: Datec = compose Datec of year: N day: {1,…,366}end Konkrētu Datectipa objektu iegūst ar mk-Datec(x,y), x, y var būt konstantes, mainīgie, izteiksmes. Šādi veidotam objektam var lietot selektorus:mk-Datec(x,y).year = x, mk-Datec(x,y).day = y Kompozīta objekta komponentes modificēšana: Ja dt = mk-Datec(2014,14), tad  (dt, day 317) = mk-Datec(2014,317), (dt, year 2004) = mk-Datec(2004,14) Uzmanību: simbolamvalodās VDM un Z ir atšķirīga, pilnīgi cita nozīme!!!

  7. Ierakstu tipi: invarianti Ierakstu (kompozīto objektu) tips: T :: v1 : T1 v2 : T2 … vn : Tn Piemērs: Datec :: year: {1900,…,2099} day: {1,…,31} Funkcija: garaisgads {1900,…,2099}  B garaisgads(x)  if (x mod 4) = 0 and not (x = 1900) then false else true Invariants:inv-Datec(mk-Datec(x,y))  garaisgads(x)  y  365 Raksta saīsināti: Datec :: year: {1900,…,2099} day: {1,…,31} inv(mk-Datec(x,y))  garaisgads(x)  y  365

  8. Funkciju un operāciju definīcijas Funkcijas un operācijas tiek izmantotas, lai no ieejas datu vērtībām iegūtu izejas datu vērtības. Papildus tam operācijas var lasīt un modificēt globālos mainīgos (stāvokļu komponentes). Divu veidu definīcijas funkcijām un operācijām: 1. Tiešas definīcijas: f: t1 t2 …  tn t - funkcijas tips f(p1, p2, …, pn)  E - izteiksme pre B - izpildāmības (sākuma) nosacījums (neobligāts)Operācijām:op: t1 t2 …  tno t - operācijas tips f(p1, p2, …, pn)  St - operators (sk. vēlāk) pre B - izpildāmības (sākuma) nosacījums (neobligāts) 2. Netiešas (implicītas) definīcijas: Funkcijām: fun (p1: t1, p2: t2, …, pn: tn)  p: tpre B - sākuma nosacījumspost B’ - beigu nosacījums find (S: X+, x:X) result : Npre card elems S = len Spost (i{1, …, len(S)}  S(i) = x)  result = i  ( i{1, …, len(S)}  S(i) = x)  result = 0

  9. Implicīto operāciju notācija LOAD (i: N) SHOW() r: N DIVIDE(d: N) r: Nextwr reg: N ext rd reg: N ext wr reg: Npost reg = i post r = reg pre d  0post d*r+reg=reg  reg<d LOAD – ielādē ieejas parametra i vērtību stāvokļa komponentē reg SHOW – izvada stāvokļa komponenti reg izejas mainīgajā r DIVIDE – dala stāvokļa komponenti reg ar ieejas mainīgo d, dalījums ievietots izejas mainīgajā r, atlikums – stāvokļa komponentes reg jaunā vērtība. Vispārējais operāciju formāts (bez kļūdu apstrādes): OP(p: Tp) r: Trext rd u: Tu,wr v: Tvpre .. p .. u .. v .. post .. p .. u .. v .. r .. v .. ext – ārējo mainīgo kopa, kas pieejami šai programmai ext rd – mainīgie, kuru vērtības programma var lasīt ext wr – mainīgie, kuru vērtības programma var lasīt un modificēt pre – operācijas sākuma nosacījums post – operācijas beigu nosacījums, saista sākuma un beigu vērtības (sākuma vērtības apzīmētas ar dekorāciju , beigu vērtībām nav dekorācijas). Ievērojam, ka funkcijām nebija vajadzīga sākuma vērtības apzīmējošā dekorācija.

  10. Vienkāršs piemērs typesPerson = token state Registrs ofemployed: Person -setunemployed: Person -setinv mk-Registrs(e, u)  e  u = {}init mk-Registrs(e, u)  e = {}  u = {} end operations register (p: Person)ext wr unemployed: Person -set rd employed: Person -setpre p unemployed  p employed post unemployed = unemployed  {p} change-status (p: Person)ext wr unemployed: Person -set wr employed: Person -setpre p  unemployed post unemployed = unemployed \ {p}  employed = employed  {p}

  11. VDM: daļēji definēto funkciju loģika (LPF) Vai apgalvojums "(5/0 = 17)  (5/0 = 17)" ir patiess? Loģikā LPF - 3 patiesuma vērtības: true, false,  (nedefinēts) Nav spēkā arī t.s. "dedukcijas teorēma": no E1 E2 neseko  E1  E2. Ja E1 E2 , tad seko, ka (E1) E1  E2. (E1) – izteiksme E1 ir definēta. Klasiskās loģikas tautoloģijas ir spēkā, ja zināms, ka izteiksmes ir definētas.

  12. Piemērs: relāciju datu bāze module NDB -- Sk. Understanding differences between VDM and Z parameters types Value, EsetNm, RNm: Triv exports operations ADDES, ADDENT, ADDREL, ADDTUP, DELES, DELENT, DELREL, DELTUP definitions defined types Eid = token MapTp = {OneOne, OneMany, ManyOne, ManyMany} Tuple :: fv : Eid tv : Eid Relation = Tuple -set Rinf :: tp : MapTp r : Relation inv (mk-Rinf(tp,r)))  arity-match(tp,r) Rkey :: nm : RNm fs : EsetNm ts : EsetNm

  13. Relāciju datu bāze: stāvoklis Tuple :: fv : Eid Relation = Tuple -set tv : Eid Rinf :: tp : MapTp r : Relation inv (mk-Rinf(tp,r)))  arity-match(tp,r) Rkey :: nm : RNm fs : EsetNm ts : EsetNm state Ndb :: esm : EsetNm -m-> Eid-set em : Eid -m-> Value rm : Rkey -m-> Rinf inv (mk-Ndb(esm, em, rm)) dom em = rng esm rk dom rm  {rk.fs, rk.ts} dom esm  mk-Tuple(fv,tv)  rm(rk).r  fv  esm(fs)  tv  esm(ts) init (ndb)  ndb = mk-Ndb({},{},{}) initvarēja pierakstīt arī kāinit (mk-Ndb(esm, em, rm))  esm={}  em={}  rm={}

  14. Relāciju datu bāze: funkcijas Tuple :: fv : Eid Relation = Tuple -set tv : Eid Rinf :: tp : MapTp r : Relation inv (mk-Rinf(tp,r)))  arity-match(tp,r) Rkey :: nm : RNm fs : EsetNm ts : EsetNm defined functions arity­match(tp, r)  (tp = OneMany t1, t2 r  t1.tv = t2.tv  t1.fv = t2.fv)  (tp = OneMany t1, t2 r  t1.fv = t2.fv  t1.tv = t2.tv)  (tp = OneMany t1, t2 r  t1.tv = t2.tv  t1.fv = t2.fv)

  15. Relāciju datu bāze: operācijas defined operations ADDES (es : EsetNm) ext wr esm : EsetNm -m-> Eid-set pre es dom esm post esm = esm  {es  {}} DELES (es : EsetNm) ext wr esm : EsetNm -m-> Eid-set rd rm : Rkey -m-> Rinf pre es dom esm  esm(es) = {} rk dom rm • es rk.fs  es  rk.ts post esm = { es } <-| esm ADDENT (memb: EsetNm-set, val:Value) eid: Eid ext wr esm : EsetNm -m-> Eid-set wr em : Eid -m-> Value pre memb dom esm post eid dom em  em = em  {eid  val }  esm = esm † { es  esm(es)  {eid} | es  memb }

  16. Relāciju datu bāze: operācijas - turpināts DELENT (eid : Eid) ext wr esm : EsetNm -m-> Eid-set wr em : Eid -m-> Value rd rm : Rkey -m-> Rinf pre eid dom em  t  {ri.r | ri  rng rm } • t.fv eid  t.tv  eid post esm = { es  esm(es) – {eid} | es  dom esm }  em = {eid } <-| em ADDREL (rk: Rkey, tp: Maptp) ext rd esm : EsetNm -m-> Eid-set wr rm : Rkey -m-> Rinf pre {rk.fs, rk.ts } dom esm  rk dom rm post rm = rm  {rk mk-Rinf(tp,{})} DELREL (rk: Rkey) extwr rm : Rkey -m-> Rinf pre rk dom rm  r(rm(rk)) = {} post rm = {rk} <-| rm

  17. Relāciju datu bāze: operācijas – turpināts (2) ADDTUP (fval, tval: Eid, rk: Rkey) extrd esm : EsetNm -m-> Eid-set wr rm : Rkey -m-> Rinf pre rk dom rm  let mk-Rkey(nm,fs,ts) = r in let mk-Rinf(tp,r) = rm(rk) in fval  esm(fs)  tval  esm(ts)  arity-match(tp, r mk-Tuple(fval,tval)) post rm = rm † { rk (rm(rk), r r (rm(rk)) - { mk-Tuple(fval,tval)}) DELTUP (fval, tval: Eid, rk: Rkey) ext wr rm : Rkey -m-> Rinf pre rk dom rm post let ri = (rm(rk), r r (rm(rk)) - { mk-Tuple(fval,tval)}) in rm = rm † { rk  ri } endmodule NDB

  18. VDM: algoritmiskā detalizācija Aprakstam specifikāciju un implementāciju kā VDM operācijas (tipiski – specifikāciju kā netiešu operāciju, implementāciju – kodētu atklātā veidā). Detalizācijas (refinement) attiecība starp VDM operācijām: op1  op2 nozīmē, ka op2 ir “vairāk detalizēta” (tuvāka implementācijai). Daži likumi attiecībā uz , ko var izmantot, transformējot specifikācijas par programmām ( apzīmēts kā 0): 1. Ja P[w0/w]  w=E [w0/w]  Q, tad Piešķiršanas operatora likums ext wr w rd r pre P post Q  w:=E 2. ext wr w rd r pre P post Q Zarošanās operatora likums if c thenextwr w rd r pre Pc post Q elseext wr w rd r pre Pc post Q 3. ext wr w rd r pre P post inv b  ext wr w rd r pre P post inv ; while b do Cikla operatora likums ext wr w rd r pre b  inv post inv  (0  V < V [w0/w] ) end 4. ja P  P' un P[w0/w]  Q'  Q, tad Nosacījuma pavājināšanas likums ext wr w rd r pre P post Q ext wr w rd r pre P' post Q' 5. ext wr w rd r pre P post Q ext wr w, xrd r pre P post Q  x0 = x

More Related