Specifik ciju valoda z
Download
1 / 23

Specifikāciju valoda Z - PowerPoint PPT Presentation


  • 133 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Specifikāciju valoda Z' - rance


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


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


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ā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) ) ]


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


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


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.