Opsamling Loops Klassedesign Immutable Lister shallowCopy() Projekt 2 FEN 2013-05-181KbP/seminar3: Opsamling.

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.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Hvordan man skriver koden.
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.
1 Bevisteknikker. 2 Bevisteknikker (relevant både ved design og verifikation) Teorem: Der findes uendeligt mange primtal Bevis: Antag at der findes et.
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.
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.
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.
Forelæsning 3.1 Collections Javas for-each løkke
Items 4, 14, 24, 34, 44, 54 Orange gruppe Liv, Jonas, Thorkil, Søren S og Martin D.
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,
Objekter og klasser Rasmus D. Lehrmann DM
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.
FEN KbP/seminar2: design21 Kontraktbaseret programmering Seminar 2 Klassedesign: Immutable lister Queue Shallowcopy og alkvantoren.
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.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
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.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
 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,
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
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.
Forelæsning Uge 4 – Mandag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 3 – Mandag
Forelæsning Uge 3 – Mandag
Quiz – Uge 3 – mandag – første time
Forelæsning Uge 3 – Mandag
Parametrisering En kort introduktion.
Forelæsning Uge 4 – Torsdag
Quiz – Uge 3 – mandag – første time
Præsentationens transcript:

Opsamling Loops Klassedesign Immutable Lister shallowCopy() Projekt 2 FEN KbP/seminar3: Opsamling

FEN KbP/seminar3: Opsamling2 Vi står med Q og R, og skal skrive en løkke: Vi skal udvikle: invarianten P vagten B “programmerne” S 0 og S Beviset er vores guide: Checklisten giver os: Find P og B ud fra: P   B  R Find initiering, så P etableres ({Q} S 0 {P}) Find et termineringsudtryk og sætninger, så der tages skridt mod terminering. Hermed brydes invarianten måske, i så fald findes sætninger som genetablerer invarianten: {P  B} S {P} {Q} S 0 do {P} B  S od {R} Checklisten: 1. {Q} S 0 {P} (initiering) 2. {P  B} S {P}(bevarelse af invariant) 3. terminering af løkken (t: nedadtil begrænset - termineringsfunktion) 4. P   B  R(korrekthed) Heltalsdivision Øvelse 3 Loops:

De seks principper: 1.Adskil forespørgsler og kommandoer 2.Adskil basale forespørgsler fra afledte 3.Specificer postbetingelser for de afledte forespørgsler vha. de basale 4.Specificer kommandoers postbetingelser gennem deres effekt på de basale forespørgsler 5.Specificer prebetingelser på alle operationer 6.Specificer invariante egenskaber i en klasseinvariant Kun de basale forespørgsler er afhængige af datarepræsentationen Konstruktører skal etablere klasseinvarianten Implementerende klasser skal specificere en repræsentationsinvariant Programmér mod et interface FEN KbP/seminar3: Opsamling

Immutable lister 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); } Grundlæggende forespørgsler Opbygger listen ved at elementer ind foran den eksisterende (evt. tomme) liste FEN KbP/seminar3: Opsamling

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/seminar3: Opsamling

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); requires 0<=from && from<=to && ensures ensures (from!=to) ==> ensures (from!=to) ==> public ImmutableList sublist(int from, int to); A= () A.precededBy(a) = (a) A.precededBy(b) = (b, a) … Bemærk, rekursion FEN KbP/seminar3: Opsamling

FEN KbP/seminar3: Opsamling7 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/seminar3: Opsamling8 // Commands ensures ensures public void put(Object o); requires ensures ensures public void remove(); } Operationer på ImmutableList anvendes

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/seminar3: Opsamling

Deque public interface Deque { public void insertFirst(Object e); public void insertLast(Object e); public Object removeFirst(); public Object removeLast(); public boolean isEmpty(); } FEN KbP/seminar3: Opsamling

public interface Deque { // Basic queries int size(); Object get(int i); // Derived queries Deque shallowCopy(); Object first(); Object last(); boolean isEmpty(); // Commands void insertFirst(Object e); void removeFirst(); void insertLast(Object e); void removeLast(); } Princip 1 og 2: 1.Adskil forespørgsler og kommandoer 2.Adskil basale forespørgsler fra afledte removeFirst() og removeLast() returnerer ikke noget. Forespørgsler first() og last() er tilføjet. get(-) og shallowCopy() af hensyn til specifikation. FEN KbP/seminar3: Opsamling

public interface Deque { // Basic queries int size(); Object get(int i); // Derived queries //post uændret størrelse //post return skal være lig this Deque shallowCopy(); //post return skal være første element Object first(); //post return skal være sidste element Object last(); //post return skal være sand for size()==0 boolean isEmpty(); } Princip 3: Specificer postbetingelser for de afledte forespørgsler vha. de basale FEN KbP/seminar3: Opsamling

public interface Deque { // Basic queries int size(); Object get(int i); // Commands //post size() er blevet 1 større //post e er indsat først //post resten af køen er rykket 1 plads bagud void insertFirst(Object e); void removeFirst(); void insertLast(Object e); void removeLast(); } Princip 4: Specificer kommandoers postbetingelser gennem deres effekt på de basale forespørgsler FEN KbP/seminar3: Opsamling

Princip 5 og 6: Specificer prebetingelser på alle operationer Specificer invariante egenskaber i en klasseinvariant //invariant size()>=0 public interface Deque { //pre size større end 0 Object first(); //pre size større end 0 Object last(); // Commands //pre size større end 0 void removeFirst(); //pre size større end 0 void removeLast(); } I Java/JML FEN KbP/seminar3: Opsamling

Implementering public class LinkedDeque implements Deque { private DNode front, back; private int size; Repræsentationsinvariant er vigtig! Skal udtale sig om front, back og size I Java/JML FEN KbP/seminar3: Opsamling

Programmer mod et interface! public class ArrayDeque implements Deque{ private invariant repr!=null && size() == private ArrayList repr; ensures public ArrayDeque(){ repr= new ArrayList(); } // Basic queries public int size(){ return repr.size(); } public Object get(int i){ return repr.get(i); } //---- Ny datarepræsentation == Ny repræsentationsinvariant FEN KbP/seminar3: Opsamling

// Derived queries public Deque shallowCopy(){ ArrayDeque copy= new ArrayDeque(); for(int i= 0; i<repr.size();i++) copy.insertLast(repr.get(i)); return copy; } public Object first(){ return repr.get(0); } public Object last(){ return repr.get(size()-1); } public boolean isEmpty(){ return size()==0; } // Commands public void insertFirst(Object e){ repr.add(0, e); } public void removeFirst(){ repr.remove(0); } public void insertLast(Object e){ repr.add(e); } public void removeLast(){ repr.remove(size()-1); } } FEN KbP/seminar3: Opsamling