FEN 2013-05-01KbP/seminar2: design21 Kontraktbaseret programmering Seminar 2 Klassedesign: Immutable lister Queue Shallowcopy og alkvantoren.

Slides:



Advertisements
Lignende præsentationer
Hvordan programmerer man?? STREAM - en model. Programmører arbejder ofte i teams Hver programmør arbejder på sin del af en større helhed.
Advertisements

Velkommen til Softwarekonstruktion
FEN KbP/seminar3: subcontracts1 Kontraktbaseret programmering Seminar 3 Kontrakter og arv Underleverandørsyn Substitutionsprincippet Guarded.
07 – Kort om OO Introduktion.
1 Rekursion og algoritmedesign. 2 Rekursion Rekursiv definition af X: X defineres i termer af sig selv. Rekursion er nyttig, når en generel version af.
Datastrukturer og Collections Oversigt og forskel imellem Jave og.net Collections library Collection interfaces ArrayList IList interface Hashtable Hashtable.
Datastrukturer Simple-type structs
Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays.
Objektorienteret programmering
FEN Diskret matematik/Seminar 3 - proofs 1 Beviser Et bevis er en argumentation, som overbeviser om, at en påstand er sand, påstanden kaldes.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
FEN KbP/seminar3: frameRules1 Frame rules Indramning - Omgivelser Frame rules specificerer, hvad der ikke ændres.
Induktion og rekursion
Objektorienteret programmering
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Begreber og Redskaber 9. Plan for idag I dag: Datastrukturer Tabeller Lister, mængder, maps, grafer Hægtede lister.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
Datastrukturer og Collections Rasmus D. Lehrmann DM
FEN KbP/seminar2: LoopsReview1 Kontraktbaseret programmering Seminar 2 Udvikling af løkker: Checklisten for løkker “Hånd-i-hånd” udvikling.
FEN Prædikater/Seminar 11 Prædikatslogik eller Kvantificerede udtryk Prædikater udvider propositionslogikken på to måder: –Vi tillader variable.
Begreber og Redskaber 5. Collections i Java 1.2 Framework: samling af datastrukturer og algoritmer som generelt værktøj. En ramme til at arbejde med søgning.
FEN NOEA/IT Programmeringsteknologi 1 Arv og polymorfi Substitutionsprincippet Abstrakte klasser Design Patterns (Composite)
Forelæsning 3.1 Collections Javas for-each løkke
Opsamling Loops Klassedesign Immutable Lister shallowCopy() Projekt 2 FEN KbP/seminar3: Opsamling.
Eksamen 20 minutters mundtlig prøve, inklusiv ca. 5 minutter til votering. Prøven bedømmes efter 7-trinsskalaenskalaen. Der ikke forberedelsestid. I kan.
1 Implementering af fundamentale datastrukturer. 2 Plan Stakke og køer Array-repræsentation Liste-repræsentation Hægtede lister Træer Terminologi Traversering.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
Forelæsning 5.1 Brug af klassen Collections og interfacet Comparable samt parametriserede typer Projektuge: Ants and Spiders / Lommeregner dIntProg,
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper: arrays, stakke, køer,
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
FEN KbP/seminar1: ProgUdsagn1 Kontraktbaseret programmering Seminar 1 Programudsagn og programbeviser.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
1 Implementering af fundamentale datastrukturer. 2 Stakke og køer Array-repræsentation Liste-repræsentation Hægtede lister Træer Terminologi Traversering.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Blå gruppe: Søren, Alexander, Torben, Lasse. De 4 vigtige items: - Singelton - Override clone judiciously - Use interfaces only to define type - Prefer.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
 Jens Bennedsen 2002Objektorienteret systemudvikling Design klasse model ”Klassemodellen på vej til kode”
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
 Jens Bennedsen 2002Objektorienteret systemudvikling Design -> kode Mapning af et klassediagram til kode.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
DAIMIIntroducerende Objektorienteret Programmering1 Collections og opremsning Nye typer collections, objektorienteret sweep.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Objektorienteret analyse og design Ó Bennedsen 2001 Design - part Programmering og systemudvikling Lektion 7 Design - part 2.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Parametrisering En kort introduktion.
Præsentationens transcript:

FEN KbP/seminar2: design21 Kontraktbaseret programmering Seminar 2 Klassedesign: Immutable lister Queue Shallowcopy og alkvantoren

FEN KbP/seminar2: design22 Immutable (uforanderlige) lister Hvis man ikke har kvantorer, så kan immutable lister anvendes i specifikationer, som skal udtale sige om egenskaber ved mange elementer Immutable lister ligner lister i LISP (og andre funktionssprog som fx F#) Er specielt designet til at anvendes i udtryk (en specifikation er et logisk udtryk) Er rekursive i natur, specifikation og implementation Vi kan udtale os om mængder af elementer ved rekursive listeudtryk Immutable datastrukturer anvendes intensivt i funktionelle sprog (fx F#) og parallelle systemer

FEN KbP/seminar2: design23 List-interfacet (Bemærk: ingen kommandoer) public interface ImmutableList { // Basic queries public boolean isEmpty(); public Object head(); public ImmutableList tail(); // Derived queries public int size(); public ImmutableList precededBy(Object o); public boolean equals(ImmutableList l); public Object item(int i); public ImmutableList sublist(int from, int to); } Opbygger listen ved at sætte elementer ind foran den eksisterende (evt. tomme) liste og returnere en ny liste med o indsat forrest.

FEN KbP/seminar2: design24 Specifikationen public interface ImmutableList { // Basic queries public boolean isEmpty(); requires public Object head(); requires public ImmutableList tail(); // Derived queries ensures isEmpty() ==> ensures (!isEmpty()) ==> (\result == public int size(); A= (a, b, c, d) A.head() = a A.tail() = (b, c, d) Bemærk, rekursion

FEN KbP/seminar2: design25 ensures ensures (\result).tail() == ensures (\result).head() == public ImmutableList precededBy(Object o); requires l != ensures (l.isEmpty() != isEmpty()) ==> ensures (!isEmpty()) ==> (\result == (l.head()==head() public boolean equals(ImmutableList l); requires 0<=i && ensures (i==0) ==> ensures (i>0) ==> public Object item(int i); A= () A.precededBy(a) = (a) A.precededBy(b) = (b, a) … Bemærk, rekursion

FEN KbP/seminar2: design26 requires 0<=from && from<=to && ensures ensures (from!=to) ==> ensures (from!=to) ==> public ImmutableList sublist(int from, int to); Bemærk, rekursion implementation demo

FEN KbP/seminar2: design27 Brug af immutable lister i specifikation: Queue public interface Queue2 { invariant // Basic queries public ImmutableList items(); // Derived queries ensures \result == public int size(); ensures public boolean isEmpty(); requires ensures public Object head(); Returnerer en liste med køens elementer items() anvendes ved specifikation af de øvrige operationer Burde være ”pure”, men det acceptere JML ikke umiddelbart

FEN KbP/seminar2: design28 // Commands ensures ensures public void put(Object o); requires ensures ensures public void remove(); } Operationer på ImmutableList anvendes

FEN KbP/seminar2: design29 Diskussion Omkostninger: –Alle disse ekstra lister, som traverseres - og det endda rekursivt - må give et enormt overhead i tids- og pladsforbrug! –Ja, men: Check af postbetingelser afslører fejl i klassens implementation og er vigtig ved udvikling og debuging. Check af prebetingelser afslører fejl hos klienten og er vigtig, når klassen anvendes. Sørg for at prebetingelser kan checkes effektivt! (Fx en count-attribut). Indkapsling: –Bryder items() ikke med indkapsling af køen? –Nej, jf. diskussionen i forbindelse med Stack Det ville være noget andet, hvis vi kunne fjerne eller indsætte midt i køen

FEN KbP/seminar2: design210 Et design med kvantorer Hvis kvantorer understøttes, så kan immutable lister undværes. Vi har stadig behov for at kunne udtale os om mange elementer både før og efter udførelsen af en operation Dette kan gøres ved at tage en shallow copy af strukturen inden operationen udføres En shallow copy er en kopi af strukturen, men med de samme elementer:

FEN KbP/seminar2: design211 Specifikation af shallowCopy() ensures ensures (\forall int i; 0<=i && public Queue shallowCopy(); Bemærk, ’==’ Dvs. samme objektreference skal returneres af kopien som af originalen

FEN KbP/seminar2: design212 Specifikation af Queue vha. kvantorer og shallowCopy() public interface Queue { invariant // Basic queries public int size(); requires 0<=i && public Object get(int i); // Derived queries requires ensures \result == public Object head(); ensures \result == public boolean isEmpty(); ensures ensures (\forall int i; 0<=i && i<=size()-1; public Queue shallowCopy(); Burde være ”pure”, men det acceptere JML ikke umiddelbart

FEN KbP/seminar2: design213 // Commands ensures ensures public void put(Object o); requires ensures ensures (\forall int i; 0<=i && \old(shallowCopy()).get(i+1) == public void remove(); Her benyttes en kopi taget inden remove() udføres. Specifikationen udtrykker, at alle elementer er rykket en plads længere frem i køen Behøver vi shallowCopy(), eller kunne vi bare skrive \old(get(i+1)) == get(i) ? (Afhænger af impl. af \old(-))