afrunding/lidt af hvert

Click here to load reader

Post on 21-Jan-2016

56 views

Category:

Documents

0 download

Embed Size (px)

DESCRIPTION

Afrunding/lidt af hvert. Generelt om kontrakter Kontrakter på modelnivaeu Kontrakter uden JML Kontrakter og test. Design by Contract. Separation of Concerns: Ansvarsfordeling via præcise kontrakter, dvs. formelle specifikationer Forudsætning for (delvis) automatisk verifikation - PowerPoint PPT Presentation

TRANSCRIPT

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Afrunding/lidt af hvertGenerelt om kontrakterKontrakter p modelnivaeuKontrakter uden JMLKontrakter og test

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Design by ContractSeparation of Concerns:Ansvarsfordeling via prcise kontrakter, dvs. formelle specifikationerForudstning for (delvis) automatisk verifikationFortrk Delegation frem for arv (ls kobling). Hvis arv bruges, s substitutionsprincippet.find what varies and encapsulate it

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Kontrakter p mange niveauerModelniveau (UML-niveau)relationer med begrnsningerInterfaceniveaufunktionelle specifikationer (pre og post) og klasseinvariant (typeinvariant)KlasseniveaureprsentationsinvariantSubklasseniveauextends, implements, substitutionsprincippet (guarded post conditions)Metodeniveauprogramudsagn (specielt lkkeinvarianter)

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Kontrakter p modelniveauEn klassemodel tjener (mindst) to formlBegrebsmodel: kontrakt mellem kunde og leverandrSpecifikationsmodel: kontrakt mellem udviklere

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Specifikationsmodel: Talkmore A/SAbonnementTransaktion MMS SMS Indbetaling MMO **BilledeVideoLyd Opkald Modtager 1Ejer1*Hvad er der af kontrakter her?

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Specifikation af interfacesSpecifikationen er kontrakten:

    Den skal beskrive HVAD enhver implementation kan g ud fra og skal opfyldeDen skal vre prcis og utvetydig men med en masse betydning

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*A side:Programmr altid mod interfacesArrayList l = new ArrayList();List l = new ArrayList();List l = ListFactory.createList();

    class ListFactory{//FactoryMethodpublic static List createList(){ return new ArrayList(); }}

    Altid???

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Factory

    class ListFactory{//FactoryMethodpublic static List createList(){ return new ArrayList(); }}

    Create-metoder kan specificeres i et interface (skal etablere klasse (type) -invarianten).Det kan constructors ikke.Men statiske metoder kan ikke vre i interfacet?

    KbP/seminar3: miscAboutContracts

  • http://stackoverflow.com/questions/6129026/effective-java-by-joshua-bloch-item1-static-factory-method FEN 2013-05-22KbP/seminar3: miscAboutContracts*IFTest

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Niveauer af formalisme for interface-specifikationSignaturNavn, returtype og parameterliste for hver metode (sprogunderstttet) gt en spec.UformelBeskrivelse i naturligt sprog. Pre-Post i naturligt sprogPre-condition: hvad implementationen kan antage om tilstand og parametrePost-condition: hvad klienten kan antage om ny tilstand, parametre og returvrdiFormelPre-Post udtrykkes i en formel (matematisk) notationVrktjsunderstttelse:I sproget (Eiffel, Spec#)Preprocessor (JML, iContract, jContract mfl.)Bibliotek: CodeContractshttp://docs.oracle.com/javase/6/docs/api/String - substring

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Eksempel: BagA container (of numbers) A number may occur more than once

    Methods Add a number Remove one occurrence of a number Remove all occurrences of a number Count how many times a number occurs Size

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Signatur-specifikationinterface Bag{ void add(int x); void removeOne(int x); void removeAll(int x); int noOf(int x); int size();}Kun syntakskontrolGt en post-betingelse?

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Uformel specifikationinterface Bag// contains numbers{ // invariant: size()>=0 void add(int x); // add x void removeOne(int x); // remove one occurrence of x void removeAll(int x); // remove all occurrences of x int noOf(int x); // return number of occurrences of x int size(); // return total number of numbers}Hvad ved vi ikke her?Gt en pre-betingelse?

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*PRE- & POST-specifikationinterface Bag // s: a container of numbers{ // invariant: size()>=0 void add(int x); // pre: none // post: s contains one more x than before void removeOne(int x); // pre: none // post: if x occurred in s before, s contains one x // less than before; else, s remained unchanged void removeAll(int x); // pre: none // post: s does not contain any xs int noOf(int x); // pre: none // post: return number of occurrences of xs in s int size(); // pre: none // post: return total number of numbers in s}

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Bag formel spec. -1interface Bag // s: a multiset of numbers// s = initiallly{ void add(int x); // pre: none // post: s = sold [x] void removeOne(int x); // pre: none // post: s = sold [x] void removeAll(int x); // pre: none // post: #x(s)=0 and for yx, #y(s) = #y(sold)Frame rule

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Bag formel spec. -2// s: a multiset of numbers// s = initiallly

    int noOf(int x); // pre: none // post: s = sold and noOf = #x(s) int size(); // pre: none // post: s = sold and size = |s|}Frame rules

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*VrktjsunderstttetBag i henhold til DbCBag i JML eller i CodeContracts eller i Eiffel eller i Overlades til en (ekstra) velse

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*velseLottotalsGeneratorSpecificer en lottotalsgenerator, som kan generere tilfldige tal i et interval.Det samme tal m ikke komme to gange.

    Vlg selv niveauet af formalisme i specifikationenLottotal.ppt

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Kontrakter uden vrktjExceptions til check for preconditionsLav en Assertion-klasse (til brug ved debugning): public class Assertion { public static boolean NDEBUG = true; private static void printStack(String why) { Throwable t = new Throwable(why); t.printStackTrace(); System.exit(1); } public static void assert(boolean expression, String why) { if (NDEBUG && !expression) printStack(why); } }

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Java (1.4 og hjere): assertPreconditions: public int pop() { // precondition: assert !isEmpty() : "Stack is empty"; return stack[--num];} Tilsvarendemekanisme i C#

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Postconditions:public void push(int element) { // precondition:assert num
  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Invariant:Lav en metode p alle klasser: private boolean inv() { return (num >= 0 && num < capacity); }

    Alle public metoder og constructorshar dette check umiddelbart fr return:

    assert inv();

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Kontrakter og testKontrakter specificerer modulerKontrakter er dokumentation ogs af testKontrakter er en del af koden! Og vedligeholdes sammen med koden!Kontrakter specificerer testsVed brug af vrktjer som JML er testdriverne en del af koden

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*XP o. lign.Skriv testen fr koden:Krver dyb forstelse af problemetKrver velgennemtnkte interfacesTestdriveren bliver en specifikation!S hvorfor ikke skrive specifikationen frst?

    KbP/seminar3: miscAboutContracts

  • FEN 2013-05-22KbP/seminar3: miscAboutContracts*Diskussion:Kan det svare sig?Fordele:Mere systematisk designKlarere designSimplere designBedre problemforstelseBedre dokumentationBedre testetSimplere debugningUlemper (er der nogen?):Tager tidEr svrt? (i hvert fald for i dags gennemsnitsprogrammrer)Falsk tryghed?Manglende sprogunderstttelseFejl i kontrakten?Bedst til sekventielle programmer

    KbP/seminar3: miscAboutContracts

    *Java Substring*