1 / 23

Kontraktbaseret programmering: Seminar 1

Kontraktbaseret programmering: Seminar 1. Om specifikationer Algoritmenotationen Q. Specifikationer. Følgende er et eksempel på en specifikation, der udtrykker, at s skal være summen af tallene i tabellen b [0.. N ): s : [ N  0 , s = (+ i | 0  i < N : b [ i ])]

Télécharger la présentation

Kontraktbaseret programmering: Seminar 1

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. Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q KbP/seminar 1: Specifikationer/Notationen Q

  2. Specifikationer • Følgende er et eksempel på en specifikation, der udtrykker, at s skal være summen af tallene i tabellen b[0..N): s : [N 0 , s = (+ i | 0 i < N : b[i])] Husk: ”(+i…” er det samme som (i | 0 iN : b[i]) • En specifikation består af fire komponenter: • Omgivelsen er tabellen b[0..N) og variablen s • Rammen er s (de/den variable, som specifikationen drejer sig om) • pre-betingelsen er N 0 • post-betingelsen er s = (i | 1 iN : b[i]) Array-segment: 0 incl., N excl. KbP/seminar 1: Specifikationer/Notationen Q

  3. Flere eksempler • x : [true , x = y2]Sæt x til kvadratet på y. • y : [x 0 , y2 = x]Sæt y til en kvadratrod af x under forudsætningen, at x ikke er negativ. • e : [S {} , eS]Sæt e til en værdi fra mængden S under forudsætningen, at S ikke er tom. • x : [b24ac , ax2+bx+c = 0]Sæt x til en rod for andengradspolynomiet under forudsætningen, at diskriminanten ikke er negativ. KbP/seminar 1: Specifikationer/Notationen Q

  4. Generelt Generelt har en specifikation formen w : [pre , post] hvor w er rammen, pre er startbetingelsen og post er slutbetingelsen. I rammen må kun refereres variabler, der er beskrevet i omgivelserne. Betydningen af en sådan specifikation er: Hvis starttilstanden tilfredsstiller pre, ændres kun variabler i rammen w, så sluttilstanden tilfredsstiller post. KbP/seminar 1: Specifikationer/Notationen Q

  5. Endnu flere eksempler... • ”Find en heltalsapproksimation til kvadratroden af heltallet n.” • Resultatet skal gemmes i en variabel; vi vælger r • Vi har hermed omgivelsen |[ n, r: int; ]| • n ikke må være negativ. Startbetingelsen er derfor n 0. • Til sidst skal vi have præciseret, hvad vi mener med “en heltalsapproksimation til kvadratroden af n”. • Hermed mener vi det største heltal, der højst er n, det vil sige det største heltal r, så r2n. • En mulig specifikation er således r : [n 0 , r  0  r2n < (r+1)2] KbP/seminar 1: Specifikationer/Notationen Q

  6. Søgning • En uformel specifikation kunne være “find x i b[0..N)”. • En mere præcis specifikation må fastlægge forudsætninger om N og b: • Kan tabellen være tom? • Findes x? • Hvis ikke, hvordan skal vi så beskrive, at x ikke findes? • Her er fire mulige specifikationer, som på hver sin måde besvarer disse spørgsmål. I de tre første tilfælde er omgivelsen|[ N: int ; b: array [0..N) ofint ; x: int ; p: int ; ]|i det sidste tilfælde er omgivelsen udvidet med variablen found: bool. KbP/seminar 1: Specifikationer/Notationen Q

  7. p : [xb[0..N) , 0 p < Nx = b[p]] Denne specifikation forudsætter, at x findes i b og dikterer, at et indeks for en forekomst af x gemmes i p. p : [N 0 , 0 p < Nx = b[p] p = Nxb[0..N)] Her forudsættes ikke, at x findes, men det dikteres, at p sættes til N, hvis x ikke forekommer. p : [N 0 , 0 p < Nxb[0..p) x = b[p] p = Nxb[0..N)] Denne er næsten magen til den forrige, men som noget ekstra dikterer den, at p skal være indeks for første forekomst af x i b (hvis x er der). p, found : [N 0 , (foundxb[0..N))  (found 0 p < Nx = b[p])] Her benyttes en ekstra variabel found til at indikere, om x forekommer i b, og dikterer kun en slutværdi for p, hvis x forekommer. Hvad hvis x ikke er der? KbP/seminar 1: Specifikationer/Notationen Q

  8. Lidt (mere) notation • I specifikationer har man behov for at relatere start- og slutværdier af variabler. • Skal vi for eksempel lave en specifikation for en algoritme, der skal tælle en variabel x én op, kunne vi forsøge os med x : [true , x = x +1] . • Men denne specifikation er umulig at tilfredsstille: der findes ingen sluttilstand, hvori x = x +1. • Vi ønsker at udtrykke, at slutværdien af x skal være én større end startværdien. • Vi har derfor behov for at kunne skelne mellem start- og slutværdien af en variabel. KbP/seminar 1: Specifikationer/Notationen Q

  9. x0 er startværdien af x • x : [true , x = x0 + 1] • x : [true , x´ = x + 1] • x : [x = X , x = X + 1] . x’ er slutværdien af x X er startværdien af x KbP/seminar 1: Specifikationer/Notationen Q

  10. Øvelser Formulér følgende specifikationer med dine egne ord: • x : [true , x = x´] • r : [N 0 , r (i | 0 i < N : b[i]  0)] • r : [N 0 , r (i | 0 < i < N : b[i 1] b[i])] • p : [(i | 0 i < N : b[i] > 0) , p = (i | 0 i < Nb[i] > 0 : i)] Formalisér følgende uformelle specifikationer: • Alle værdier i b har fået skiftet fortegn. • Beregn summen af elementerne i b[j..k). • Find den største værdi i b[j..k). • Find indeks for en største værdi i b[j..k). Minimum KbP/seminar 1: Specifikationer/Notationen Q

  11. Q, en algoritmenotation • Kommandoer: • skip • fail • parallel tildeling • kontrolstrukturer: • sekvensiering, selektion og iteration • procedure- og funktionsbegreb KbP/seminar 1: Specifikationer/Notationen Q

  12. skip og fail Skip • Udførelse af skip-kommandoen skip gør ingenting (og - må man formode - gør det hurtigt)! Fail • Udførelse af fail-kommandoen er uforudsigelig, (vi anvender den ikke, men den kan bruges til at beskrive fejlbehæftet kode). KbP/seminar 1: Specifikationer/Notationen Q

  13. Parallel tildeling Kommandoen til parallel tildeling har formen x1, x2, ..., xn:= e1, e2, ..., en hvor xi er variabler, og ei er udtryk, 1 in. • Typen af xi og ei skal parvis være ens. • Kommandoen kan kun udføres i en tilstand, hvor alle ei er veldefinerede, og i dette tilfælde består udførelsen i først at evaluere ei-erne (i vilkårlig rækkefølge) og dernæst tildele resultaterne til de tilsvarende xi (igen i vilkårlig rækkefølge). Sideeffekt-fri Nondeterminisme KbP/seminar 1: Specifikationer/Notationen Q

  14. Sekvens Sekventiel sammensætning er én måde at konstruere større algoritmer ud fra mindre. Lad S1 og S2 være to kommandoer. Da er S1 ; S2en kommando, og betydningen af den er, at først udføres S1 og derefter S2. KbP/seminar 1: Specifikationer/Notationen Q

  15. Selektion (Dijkstra’s Guarded Command) ifx 0 z:= x x 0 z:= x fi eller ifx 0 z:= xx 0 z:= xfi Hvad hvis x = 0? Nondeterminisme KbP/seminar 1: Specifikationer/Notationen Q

  16. Den generelle form af if-kommandoen er ifB0S0 B1S1 ... Bn 1Sn 1 fi • Hver BiSi, 0 i < n, er en bevogtet kommando. Si kan være vilkårlige kommandoer • alle vagter være veldefinerede i den aktuelle tilstand. • mindst én vagt skal være sand • hvis mere end én vagt er sand, vælges tilfældigt en bevogtet kommando med sand vagt, og den tilhørende kommando udføres Nondeterminisme KbP/seminar 1: Specifikationer/Notationen Q

  17. Om guarded command • et vilkårligt antal alternativer: • både if og switch/case • nondeterminisme. • Hvis mere end én vagt er sand, er der frit slag for en implementation til at vælge en vilkårlig af disse, men kun én. • Det kan være et fuldstændig tilfældigt valg, det kan altid være den første eller implementationen kan forsøge at vælge den med den korteste udførelsestid. Pointen er, at eftersom ethvert af disse valg giver et korrekt resultat, så behøver programmøren ikke bekymre sig om, hvilket der skal udføres. • Af hensyn til effektiviteten kan nogle vagter strammes, så nondeterminismen elimineres. KbP/seminar 1: Specifikationer/Notationen Q

  18. doB0S0 B1S1 ... Bn 1Sn 1 od Semantikken af do-kommandoen er som følger: Gentag følgende sålænge det er muligt: Vælg en bevogtet kommando med sand vagt og udfør den tilhørende kommando. Løkken standser når (hvis) alle vagter er falske. Bemærk, at nondeterminisme er tilladt. Den simple: do BS od svarer til while-sætningen i fx Java: while(B) { S; } Iteration Nondeterminisme KbP/seminar 1: Specifikationer/Notationen Q

  19. Procedurer og funktioner procidentifier (parameter specifications) body hvor identifier er navnet på proceduren, parameter specifications er en beskrivelse af slags, navn og type af procedurens parametre og body er procedurens handlingsdel. funcidentifier (parameter specifications) r: resulttype body parameteroverførselsmekanismer • in, inout, out samt ref KbP/seminar 1: Specifikationer/Notationen Q

  20. Eksempler Navngivning Omgivelser max: |[ m, n, r: int ; r : [true, r = mn] ; if mnr:= m mnr:= n fi ]| Specifikation Algoritme KbP/seminar 1: Specifikationer/Notationen Q

  21. Summering af array Hvad hvis b er tomt? sum:|[ b: array [0..N) ofint ; s: int ; s : [true, s = (+ i | 0 i < N : b[i])] ; |[ n: int ; n, s:= 0, 0 ; donNn, s:= n + 1, s + b[n] od ]| ]| Bemærk: n er ikke en del af omgivelserne, men en del af løsningen. n er erklæret i en lokal blok |[...]|, der afgrænser variablens virkefelt. KbP/seminar 1: Specifikationer/Notationen Q

  22. Fibonacci-tal fibonacci: |[ n, r: int ; r : [n 0, r = ‘det n’te Fibonacci-tal’] ; r:= fib(n) wherefibis funcfib (n: int) r: int ifn = 0 r:= 0 n = 1 r:= 1 n > 1 r:= fib(n 1) + fib(n 2) fi ]| Rekursion KbP/seminar 1: Specifikationer/Notationen Q

  23. Øvelser Skriv algoritmer i Q, som tilfredsstiller specifikationerne: • r : [N 0 , r (i | 0 i < N : b[i]  0)] • p : [(i | 0 i < N : b[i] > 0) , p = (i | 0 i < Nb[i] > 0 : i)] • Brug din specifikation af: Find den største værdi i b[j..k). KbP/seminar 1: Specifikationer/Notationen Q

More Related