Specifik ciju valoda z
This presentation is the property of its rightful owner.
Sponsored Links
1 / 23

Specifikāciju valoda Z PowerPoint PPT Presentation


  • 64 Views
  • Uploaded on
  • Presentation posted in: General

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);

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Specifik ciju valoda z

Specifikāciju valoda Z

Specifikāciju valodu pamati


Z ievada piez mes

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


Z specifik cijas strukt ra paragr fi

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 …


S kuma piem rs dzim anas dienu re istrs

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


Dzim anas dienu re istrs 2

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:


Oper ciju priek nosac jumi

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 bezdekorā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.


Dzim anas dienu re istrs specifik cijas papildin jums

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


Dzim anas dienu re specifik cijas papildin jums 2

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


Dzim anas dienu re istrs implement cija

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.


Ieskats teorij datu tipi

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


Teta not cija x konvencija

 (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


Studiju re istratora pal gs

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ēmass?  enrolled  #enrolled < sizeenrolled’ = enrolled  {s?}  tested’ = tested  r! = success ]

Testok  [ Class, s?: Student, r!: Response |s?  enrolled  s?  tested enrolled’ = enrolled  tested’ = tested  {s?}  r! = success ]


Studiju re istratora pal gs 2

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ācijass?  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) ) ]


Studiju re istratora pal gs turpin ts

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


Studiju re istratora pal gs divas klases

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


Studiju re istratora pal gs kla u sist ma

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šanacname? : 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 ]


Studiju re istratora pal gs kla u sist ma 2

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.


Sh mu novad ana schema piping

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 printerspn!  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.


Sh mas kompoz cija p rsauk ana

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 ]


T l ks piem rs rel ciju datu b ze ent tes to kopas

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' ]


Rel ciju datu b ze ent tes to kopas 2

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.


Valodas z konstrukcijas p rskats

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


Valoda z no specifik cij m uz implement cij m

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.


  • Login