Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

FEN 2013-05-19KbP/seminar3: frameRules1 Frame rules Indramning - Omgivelser Frame rules specificerer, hvad der ikke ændres.

Lignende præsentationer


Præsentationer af emnet: "FEN 2013-05-19KbP/seminar3: frameRules1 Frame rules Indramning - Omgivelser Frame rules specificerer, hvad der ikke ændres."— Præsentationens transcript:

1 FEN 2013-05-19KbP/seminar3: frameRules1 Frame rules Indramning - Omgivelser Frame rules specificerer, hvad der ikke ændres

2 FEN 2013-05-19KbP/seminar3: frameRules2 Specifikationer - notation Summering: |[N: int ; b: array [0..N) of int ; s: int ; s : [N  0, s = (  i | 0  i < N : b[i])] ; ]| Omgivelser Ramme Precond. Postcond Implicit frame rules: Kun variable nævnt i rammen ændres af algoritmen

3 FEN 2013-05-19KbP/seminar3: frameRules3 Frame rules - Indramning Hidtil har vi specificeret kommandoer ved at specificere, hvad der ændres. Det har været underforstået, at det er det eneste, som ændres. En fuldstændig specifikation bør også fortælle, hvad der ikke ændres. Dette kaldes en frame rule.

4 FEN 2013-05-19KbP/seminar3: frameRules4 Queue Hvad med resten af køen? // Commands /*@ ensures size()==\old(size())+1; @ ensures get(size()-1)==o; @*/ public void put(Object o); /*@ requires size()>=1; @ ensures size()==\old(size())-1; @ ensures (\forall int i; 0<=i && i<=size()-2; @ \old(shallowCopy()).get(i+1) == get(i)); @*/ public void remove();

5 FEN 2013-05-19KbP/seminar3: frameRules5 Queue Her er en (delvis) frame rule med shallowCopy() // Commands /*@ ensures size()==\old(size())+1; @ ensures get(size()-1)==o; @ ensures (\forall int i; 0<=i && i<=size()-2; @ \old(shallowCopy()).get(i) == get(i)); @*/ public void put(Object o);

6 FEN 2013-05-19KbP/seminar3: frameRules6 shallowCopy() vs. deepCopy() Vores frame rule skal udtrykke, at –alle elementer i køen inden put(-) skal stå på samme plads efter, og –elementerne skal være uændrede Det sidste kan ikke gøres med shallowCopy() deepCopy() skal implementeres

7 FEN 2013-05-19KbP/seminar3: frameRules7 Queue2 – Immutable lister /*@ ensures size()==\old(size())+1; @ ensures items().item(size()-1)==o; @*/ public void put(Object o); Resten af køen skal være uændret??? Vi skal udtrykke, at sublisten fra 0 til \old(size())-1 skal være lig med listen fra 0 til size()-1

8 FEN 2013-05-19KbP/seminar3: frameRules8 ImmutableList /*@ requires l != null; @ ensures (l.isEmpty() != isEmpty()) ==> !(\result); @ ensures (!isEmpty()) ==> (\result == (l.head()==head() && @ l.tail().equals(tail()))); @*/ public /*@ pure @*/ boolean equals(ImmutableList l); /*@ requires 0<=from && from<=to && to<=size(); @ ensures (\result).isEmpty()==(to==from); @ ensures (from!=to) ==> ((\result).head()==item(from)); @ ensures (from!=to) ==> @ ((\result).tail().equals(sublist(from+1,to))); @*/ public /*@ pure @*/ ImmutableList sublist(int from, int to); equals() og sublist(-) må kunne bruges?

9 FEN 2013-05-19KbP/seminar3: frameRules9 Sublisten fra 0 til \old(size())-1 skal være lig med listen fra 0 til size()-1 /*@ ensures size()==\old(size())+1; @ ensures items().item(size()-1)==o; @ ensures items().sublist(0, \old(size())-1).equals(\old(items())); @*/ public void put(Object o);

10 FEN 2013-05-19KbP/seminar3: frameRules10 Men… public boolean equals(ImmutableList l) { boolean result; if (l.isEmpty()!=isEmpty()) { result = false; } else if (isEmpty()) { result = true; } else { result = l.head() == head && l.tail().equals(tail); } return result; } Checker kun på referencer!

11 FEN 2013-05-19KbP/seminar3: frameRules11 Kan det betale sig? Ifølge DbC: nogen gange: –Hvis klientprogrammører laver fejl, som tyder på en misforstået opfattelse af, hvad en operation gør, så kan eksplicitte frame rules være en hjælp. –Hav den konvention, at alle ændringer skal være eksplicit nævnt i postconditions. –Ved review og lignende: husk at checke mod (både implicitte og eksplicitte) frame rules.

12 FEN 2013-05-19KbP/seminar3: frameRules12 Øvelser… Frame rule for Queue.remove() Frame rules for Stack …men ikke i dag


Download ppt "FEN 2013-05-19KbP/seminar3: frameRules1 Frame rules Indramning - Omgivelser Frame rules specificerer, hvad der ikke ændres."

Lignende præsentationer


Annoncer fra Google