1 / 23

Specifikāciju valoda Z

Specifikāciju valoda Z. Specifikāciju valodu pamati. Z: ievada piezīmes. Z - sistēma strukturētu matemātisku teoriju veidošanai, izmantojama programmatūras specifikācijā; Programmatūras specifikācija: abstrakto mašīnu modelis (stāvoklis, operācijas, ieejas un izejas parametri, invariants);

rance
Download Presentation

Specifikāciju valoda Z

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 Z Specifikāciju valodu pamati

  2. Z: ievada piezīmes • Z - sistēma strukturētu matemātisku teoriju veidošanai, izmantojama programmatūras specifikācijā; • Programmatūras specifikācija: abstrakto mašīnu modelis (stāvoklis, operācijas, ieejas un izejas parametri, invariants); • Z specifikācijas pamata struktūras bloks - shēma: • satur deklarācijas daļu kopā ar predikātu daļu; • izmantota gan programmas stāvokļa, gan arī stāvokļu maiņas aprakstam; • valoda Z piedāvā līdzekļus shēmu kombinācijai • Z notācija: attīstījusies ilgākā laika posmā, pirmās publikācijas ap 1980.gadu, ISO standarts 2002.gadā (dažādā literatūrā var būt pieejamas dažādas Z "variācijas") • Z: pieejams plašs resursu klāsts tīmeklī (t.sk. reference manual, arī mācību grāmatas).

  3. Z specifikācijas struktūra: paragrāfi Z - sistēma strukturētu matemātisku teoriju veidošanai, izmantojama programmatūras specifikācijā. Specifikācija sastāv no paragrāfiem. Paragrāfi: • Pamata tipu deklarācijas: [ NAME, DATE ] . Tipus var tālāk lietot specifikācijā. • Aksiomātiskās definīcijas:| x NAME square: N  N n  N  square(n) = n * n • Ierobežojumi: n < 13 • Shēmu definīcijas (sk. tālāk) • Saīsinājumu definīcijas:DATABASE  ADDR  PAGE Iespējamas arī “brīvo” tipu definīcijas: TREE ::= tip | fork N  TREE  TREE Definīcija ekvivalenta ar [TREE], kam seko: tip : TREEfork: N  TREE  TREE >--> TREE W: P TREE  {tip}  fork (| N  W  W |)  W  TREE  W disjoint  {tip}, ran fork …

  4. AddBirthday AddBirthday BirthdayBook, BirthdayBook'- shēmas dekorācija, beigu stāvoklisname? : Name; date? : Date  BirthdayBook - sākuma un beigu stāvokļi deklarēti šeitname? : Name; date? : Date name?  known  birthday'= birthday  {name? date?} name?  known  birthday'= birthday  {name? date?} Sākuma piemērs: Dzimšanas dienureģistrs BirthdayBook known: P Name - kopas apakškopu kopabirthday: Name -+-> Date - daļēji definēta funkcija [Name, Date] - dotās kopas, vienmēr arī Z - dotā kopa known = dom birthday  BirthdayBook  BirthdayBook  BirthdayBook' -  notācija

  5. FindBirthday  BirthdayBookname? : Name; date! : Date name?  known  date ! = birthday(name?) known' = known  birthday' =birthday FindBirthday Remind  BirthdayBookname? : Name; date! : Date  BirthdayBooktoday? : Date; cards ! : P Name name?  known  date ! = birthday(name?) cards ! = {n: known | birthday(n) = today?} InitBirthdayBook BirthdayBook' known' =  Dzimšanas dienureģistrs (2)  BirthdayBook [BirthdayBook |known'=known; birthday' = birthday] Inicializācija:

  6. AddBirthday BirthdayBook, BirthdayBook'name? : Name; date? : Date name?  known  birthday'= birthday  {name? date?} Operāciju priekšnosacījumi pre S - nosacījums uz operāciju raksturojošas shēmas sākuma stāvokli (mainīgo bez dekorācijām vērtībām) un ieejas datiem (mainīgo ar dekorāciju ? vērtībām),kas spēkā tad un tikai tad, ja eksistē beigu stāvokļa mainīgo un izejas datu vērtības, ar kurām kopā dotās sākuma vērtības un ieejas dati apmierina shēmas predikātu. pre AddBirthday = [BirthdayBook ; name? : Name; date? : Date |name?  known] pre FindBirthday = [BirthdayBook ; name? : Name; date? : Date |name?  known] Sākuma nosacījums netiek izdalīts atsevišķi no kopējā operāciju raksturojošā predikāta. Sekas: iespējams pievienot izteiksmi, kas tieši attiecas tikai uz beigu mainīgajiem,bet kura būtiski maina priekšnosacījumu.

  7. Success result! : Report result! = ok AlreadyKnown  BirthdayBookname? : Name; result ! : Report name?  known  result ! = already_known Dzimšanas dienu reģistrs: specifikācijas papildinājums Report ::= ok| already_known | not_known - brīvā (induktīvā) tipa definējums RAddBirthday  (AddBirthday  Success)  AlreadyKnown Valodā Z iespējamas loģiskās operācijas ar shēmām: konjunkcija, disjunkcija, negācija. Lai konjunkcija vai disjunkcija būtu definēta, nepieciešams, lai shēmudeklarācijas daļas būtu saskaņotas. Izpildot loģiskās operācijas, nepieciešams ņemt vērā, ka daļa no predikāta var būt implicīti ietverta jau deklarācijas daļā (sk. vēlākus piemērus).

  8. NotKnown  BirthdayBookname? : Name; result ! : Report name?  known  result ! = not_known Dzimšanas dienu reģ.: specifikācijas papildinājums (2) RFindBirthday (FindBirthday  Success)  NotKnown RRemind  Remind  Success

  9. BirthdayBook1 names : N1 Namedates : N1 Date ; hwm : N i,j : 1 .. hwm i  j  names(i)  names(j) AbsBB BirthdayBookBirthdayBook1 known = {i : 1 .. hwm  names(i) } {names(i)|i1..hwm}i : 1 .. hwm birthday (names(i)) = dates(i) AddBirthday1  BirthdayBook1name? : Name; date? : Date i : 1 .. hwm  name? names(i)  hwm' = hwm + 1 names' = names  {hwm'  name?}dates' = dates  {hwm'  date?} Dzimšanas dienu reģistrs: "implementācija" Z: specifikācijas notācija, nevis specifikācijas metode (kā B). Z ļauj pierakstīt strukturētā veidā dažādus apgalvojumus, bet veids, kā šie apgalvojumi saistās kopā vienotā programmatūras izstrādes procesā, netiek a priori fiksēts.

  10. Ieskats teorijā: Datu tipi • Dotās kopas (t.sk. veselo skaitļu kopa Z, kā arī kopas, kuru vārdi atklāti specificēti); [Names, Dates] • Kopas tipi: katrs viena tipa t objektu kopums ir objekts ar tipu P t ; {1,4,9,16,25} {p: Z | p < 100} • Korteži un Dekarta reizinājumi: ja x un y ir objekti ar tipiem attiecīgi t un u, tad pāris (x,y) ir objekts ar tipu t  u; ir arī tipi t  u  v, utt. • Brīvie (konstruktīvie) tipi - Tree :== aa | ff N  Tree  Tree  • Saistījumi (bindings) un shēmas tipi:Ja p un q ir dažādi identifikatori un x un y ir objekti ar tipiem attiecīgi u un v, tad p=>x, q=>y ir saistījums, kuram ir shēmas tips |p:u; q:v|Saistījumi definēti arī patvaļīgam dažādu selektoru skaitam n.Saistījums ar atbilstošajiem šķirkļiem atbilst shēmas instancei, ļauj to uzlūkot kā matemātisku objektu.Deklarācija x : BirthdayBook , x ir mainīgais ar shēmas BirthdayBook tipu, var rakstīt x.known, x.birthday(Kas notiek ar shēmas predikāta daļu šādās deklarācijās? x.known = dom x.birthday- Tā arī tiek ņemta vērā. Literatūrā var būt dažādi varianti).

  11.  (teta-) notācija, X konvencija  BirthdayBook [ BirthdayBook |known'=known; birthday' = birthday]  BirthdayBook [ BirthdayBook |  BirthdayBook' =  BirthdayBook]  BirthdayBook = < known => BirthdayBook.known;birthday => BirthdayBook.birthday >  BirthdayBook– objekts (saistījums) x ar šķirkļiem known, birthday, kam spēkāx.known = BirthdayBook.knownun x.birthday = BirthdayBook.birthday  BirthdayBook' = < known => BirthdayBook'.known;birthday => BirthdayBook'.birthday >  BirthdayBook - shēmas BirthdayBook raksturīgais saistījums (binding)  konvencija – jaunā definīcija atbilst iepriekšējam priekšstatam.  konvencija - valodā iebūvēta, var tikt pārdefinēta, ja vajadzīgs. Deklarācija x:S, x - saistījums, objekts ar shēmas S tipu Labāk rakstīt ekvivalento x : {S •  S},atklāti pasaka nepieciešamību ņemt vērā shēmas īpašību. x:BirthdayBook gadījumā tā ir īpašībaknown = dom birthday

  12. Studiju reģistratora palīgs [Student] - dota kopa size : N- deklarējam konstanti Response ::= success | notenrolled | nocert | cert | alreadyenrolled | alreadytested | noroom - uzskaitījuma veida datu tips Class  [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ] - shēma, raksturo sistēmas stāvokli ClassInit  [ Class’ | enrolled’ =  ] - cita shēma, raksturo sākuma stāvokli Enrolok  [ Class, s?: Student, r!: Response | - operāciju shēmas s?  enrolled  #enrolled < size enrolled’ = enrolled  {s?}  tested’ = tested  r! = success ] Testok  [ Class, s?: Student, r!: Response | s?  enrolled  s?  tested enrolled’ = enrolled  tested’ = tested  {s?}  r! = success ]

  13. Studiju reģistratora palīgs (2) [Student] size : N Response ::= success | notenrolled | nocert | cert | alreadyenrolled | alreadytested | noroom Class  [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ] - shēma, raksturo sistēmas stāvokli ClassInit  [ Class’ | enrolled’ =  ] - cita shēma, raksturo sākuma stāvokli … Leaveok  [ Class, s?: Student, r!: Response | - tālākas operācijas s?  enrolled  enrolled’ = enrolled \ {s?} ((s?  tested  tested’ = tested \ {s?}  r! = cert )  (s?  tested  tested’ = tested  r! = nocert )) ] Enquire  [ Class, s?: Student, r!: Response | ((s?  enrolled  r! = notenrolled)  (s?  (enrolled \ tested)  r! = alreadyenrolled)  (s?  tested  r! = alreadytested) ) ]

  14. Studiju reģistratora palīgs – turpināts Class  [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ] Kļūdu apstrāde – atsevišķas shēmas: AlreadyEnrolled  [ Class, s?: Student, r!: Response | s?  enrolled  r! = alreadyenrolled ] NoRoom  [ Class, r!: Response | #enrolled = size  r! = noroom ] AlreadyTested  [ Class, s?: Student, r!: Response | s?  tested  r! = alreadytested ] NotEnrolled  [ Class, s?: Student, r!: Response | s?  enrolled  r! = notenrolled ] Robustas operācijas (ietver kļūdu apstrādi): Enrol  Enrolok  NoRoom  AlreadyEnrolled Test  Testok  NotEnrolled  AlreadyTested Leave  Leaveok  NotEnrolled Shēmu operācijas izmantotas specifikācijas strukturizācijai (vispirms bija iespējams specificēt normālo gadījumu, pēc tam kļūdu situācijas tika aprakstītas atsevišķi).

  15. Studiju reģistratora palīgs : divas klases Class  [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ] TwoClasses  [ z_beginners : Class, z_advanced : Class ] ZbOperation  [ TwoClasses, Class | z_advanced’ = z_advanced  z_beginners = Class  z_beginners’ = Class’ ] z_beginners = Class saīsina z_beginners.enrolled = enrolled z_beginners.tested = tested ZbOperation – līdzeklis elementāri definētas operācijas pielietošanai strukturētas sistēmas komponentei (elementāro operāciju “paaugstināšana”): ZbEnrolok  ZbOperation  Enrolok ZbAlreadyEnrolled  ZbOperation  AlreadyEnrolled ZbNoRoom  ZbOperation  NoRoom ZbEnrolBuilt  ZbEnrolok  ZbAlreadyEnrolled  ZbNoRoom Komponenšu paslēpšana: eksistenciālā kvantifikācija ZbEnrol  ZbEnrolBuilt \ (enrolled, enrolled’, tested, tested’) - paslēptās komponentes kļūst neredzamas Ekvivalenti: ZbEnrol   Class  ZbEnrolBuilt

  16. Studiju reģistratora palīgs: klašu sistēma Class  [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ] [ClassName] CSResponse ::= … … … | maxclasses : N ClassSystem  [ classmap: ClassName -+-> Class | #classmap  maxclasses] InitClassSystem  [ ClassSystem’ | classmap’ =  ] MakeClassok  [ClassSystem, ClassInit, -- tukšas klases pievienošana cname? : ClassName, csr! : CSResponse | cname dom classmap classmap’ = classmap  {cname?  Class’} csr! = classadded ] DropClassok  [ClassSystem, cname? : ClassName, csr! : CSResponse | cname?  dom classmap (classmap cname?).enrolled =  classmap’ = {cname?} <-| classmap csr! = classdeleted ]

  17. Studiju reģistratora palīgs: klašu sistēma (2) Class  [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ] [ClassName] CSResponse ::= … … … maxclasses : N ClassSystem  [ classmap: ClassName -+-> Class | #classmap  maxclasses] InitClassSystem  [ ClassSystem’ | classmap’ =  ] ClassToSystem  [ClassSystem, Class, cname? : ClassName, csr! : CSResponse | cname?  dom classmap classmap cname? = Class classmap’ = classmap  {cname?  Class’} csr! = classfound ] UClass  [ClassSystem, cname? : ClassName, csr! : CSResponse | cname dom classmap  csr! = unknownclass ] -- UnknownClass CSEnrol  ((Enrol  ClassToSystem) \ (enrolled, enrolled’, tested, tested’))  UClass CSTest  ((Test  ClassToSystem) \ (enrolled, enrolled’, tested, tested’))  UClass CSLeave  ((Leave  ClassToSystem) \ (enrolled, enrolled’, tested, tested’))  UClass CSEnquire  ((EnquireClassToSystem)\(enrolled, enrolled’, tested, tested’))  UClass Operāciju “paaugstināšanas” (promotion) tehnika.

  18. Shēmu “novadīšana” (schema piping) [PrinterName, GroupName, File] Printer == seq File Printers  [ printers: GroupName -+-> P PrinterName, queue: PrinterName -+-> Printer | printers partitionsdom queue gn: dom printers  printers gn   ] SelectPrinter [ Printers, gn?: GroupName, pn!: PrinterName | gn?  dom printers pn!  printers gn? printers’ = printers ] QueueFile  [ Printers, file? : File, pn? : PrinterName | pn  dom queue  queue’ = queue  {pn?  (queue pn?)^<file> } ] QueueByGroup  SelectPrinter >> QueueFile Ideja: Abas shēmas “izpilda” vienlaicīgi; SelectPrinter izejas mainīgais pn! tiek savietots ar QueueFile ieejas mainīgo pn?, abi mainīgie pēc tam tiek no kopējās shēmas paslēpti.

  19. Shēmas: kompozīcija, pārsaukšana [PrinterName, GroupName, File] Printer == seq File Printers  [printers: GroupName -+-> P PrinterName, queue: PrinterName -+-> Printer | printers partitions dom queue  gn: dom printers  printers gn   ] PrintersExt  [ Printers, selected: PrinterName | selected  dom queue  queue   ] SelectPrinterExt  [ PrintersExt, Printers, gn?: GroupName | gn?  dom printers  selected’  printers gn? ] QueueFileExt  [ PrintersExt, file? : File | printers’ = printers  queue’ = queue  {selected  (queue selected)^<file> } ] QueueByGroupExt  SelectPrinterExt ; QueueFileExt Ja X un Y ir shēmas ar kopēju stāvokli S, tad X ; Y definē kā S0  X [ _0 / _’ ]  Y [ _0 / _ ] -- lietojam sistemātisko pārsaukšanu Shēmu pārsaukšana: NewNamesClass  Class [ members/enrolled, passed/tested] ekvivalents ar NewNamesClass  [ members, passed : P Student | passed  members  #members  size ]

  20. Entities esm: ESetNm -++-> (F Eid)-- funkcija ar galīgu grafikuem: Eid -++-> Value dom em =  (ran esm) ADDES0  Entitieses? : ESetNm es?  dom esm  esm'= esm  {es? {}}  em=em' DELES0  Entitieses? : ESetNm es?  dom esm  esm(es?) = {} esm'= {es?} <-| esm  em=em' Tālāks piemērs: Relāciju datu bāze. Entītes, to kopas [Eid, ESetNm,Value]  Entities =^= Entities  Entities'  Entities =^= [ Entities |  Entities =  Entities' ]

  21. ADDENT0 DELENT0  Entities ; memb? : F ESetNmval?: Value; eid! : Eid  Entities eid? : Eid memb?  dom esm  eid !  dom em  em'= em  {eid ! val}  esm'=esm  {es: memb? • es  esm(es)  {eid !}} eid?  dom em  em'= {eid?} <-| em esm'= {es: dom esm • es  esm(es) \ {eid?}} Relāciju datu bāze - entītes, to kopas (2) Tālāka attīstība: Understanding Differences between VDM and Z, piemērs raksta beigās.

  22. Valodas Z konstrukcijas (pārskats) • Relāciju un funkciju notācija • Globālā mainīgo telpa, shēmai - redzamība no deklarācijas uz priekšu, specifikācija sastāvoša no paragrāfiem • Shēmu operācijas: • dekorācijas • loģiskās kombinācijas, projekcijas, kvantori D | P • S, D | P • S, projekcija - tipiski eksistenciāla kvantifikācija • Ģeneriskās konstrukcijas (shēmas, konstantes) • Izteiksmes: • (…), {…} - kortežs, kopa • P,  - apakškopu kopa, Dekarta reizinājums • { | • } - kopas formācija •  - funkcijas notācija •  - definitīvā izteiksme (  Class | enrolled =  - terms ar tipu Class ) • aplikācija • _._ - selektors •  - saistījuma (binding) formēšana • atsauce uz shēmu (shēmas vārds + dekorācija).

  23. Valoda Z: no specifikācijām uz implementācijām “Implementācijas” jēdziena vienkārša ilustrācija: jau BirthdayBook piemērā. Gan abstraktā, gan konkrētā mašīnas: aprakstītas, izmantojot shēmas. Konkrētās un abstraktās mašīnas atbilstība: abstrakcijas funkcija: arī aprakstāma, izmantojot shēmas;vispārīgāks gadījums: simulācijas attiecība abstrakcijas funkcijas vietā. Class  [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ] DClass  [ sarray: (1 .. size)  Student , ectr: 0 .. size, tctr : 0 .. size | tctr  ectr   i, j : 1 .. ectr | i  j  sarray i  sarray j ] DSim  [ Class, DClass | enrolled = { i: 1 .. ectr  sarray(i) }  tested = { i: 1 .. tctr  sarray(i) } ] -- “simulācijas” atbilstība Šajā gadījumā DSim ir funkcija (konkrētais stāvoklis viennozīmīgi nosaka abstrakto stāvoli), bet teorētiski var būt iespējamas situācijas, ka abstrakto un konkrēto stāvokļus saistošā attiecība nav funkcionāla. Operāciju korektības nosacījumi (piemērs): (pre Enrol)  DSim |-- (pre DEnrol) (pre Enrol)  DSim  DEnrol |--  Class’  (Enrol  DSim’) Iespējams formulēt arī algoritmu dizaina nosacījumus. Z: valoda, kurā iespējams pierakstīt specifikāciju, implementāciju, atbilstības faktu.

More Related