Programmering med interfaces – en stak og en HP-regnemaskine push pop.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

07 – Kort om OO Introduktion.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Grundlæggende programmering Efterår 2001
09 – Arv og polymorfi i java
Hvordan man skriver koden.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Forelæsning 3.1 Collections Javas for-each løkke
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Items 4, 14, 24, 34, 44, 54 Orange gruppe Liv, Jonas, Thorkil, Søren S og Martin D.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
Eksempel på realisering af domænemodel
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
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,
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
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.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
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
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
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.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.1 OOP – Model før funktioner Funktionsorienteret versus objektorienteret systemudvikling.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.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,
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Indledende Programmering Uge 6 - Efterår 2006
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Objektorienteret analyse og design Ó Bennedsen 2001 Design - part Programmering og systemudvikling Lektion 7 Design - part 2.
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
Interfaces – hvorfor, hvad og hvordan?.  Michael E. Caspersen 2003IOOPInterfaces.2 Oversigt Interfaces, hvorfor –Separering af specifikation (interface)
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.1 OOP – Hvorfor nu det? Funktionsorienteret versus objektorienteret systemudvikling.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning.
Algoritmer og Datastrukturer 1
Præsentationens transcript:

Programmering med interfaces – en stak og en HP-regnemaskine push pop

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.2 Den onde class Bad { public static void main(String[] args) { int x = 0; Node h = null; Node p = null; read(x); while ( x!=0 ) { p = new Node(); p.v = x; p.next = h; h = p; read(x); } while ( h!=null ) { p = h; h = p.next; x = p.v; write(x); } } } Hvad gør dette program?

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.3 Den gode class Good { public static void main(String[] args) { int x = 0; Stack s = new LinkedStack(); read(x); while ( x!=0 ) { s.push(x); read(x); } while ( !s.isEmpty() ) { x = s.pop(); write(x); } Hvad gør dette program?

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.4 Hvorfor er den onde ond og den gode god? class Good { public static void main(String[] a) { int x = 0; Stack s = new LinkedStack(); read(x); while ( x!=0 ) { s.push(x); read(x); } while ( !s.isEmpty() ) { x = s.pop(); write(x); } Kommentarer? class Bad { public static void main(String[] a) { int x = 0; Node h = null; Node p = null; read(x); while ( x!=0 ) { p = new Node(); p.v = x; p.next = h; h = p; read(x); } while ( h!=null ) { p = h; h = p.next; x = p.v; write(x); } } }

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.5 Abstraktionsniveauer I de to programmer kan vi identificere (mindst) fire forskellige abstraktionsniveauer. I “den onde” er disse fire niveauer totalt sammenblandet. I “den gode” er disse niveauer klart separeret. Generelt skal vi stræbe efter at designe pro- grammer hvor abstraktionsniveauerne er klart separeret og dermed lette at identificere. Kun herved kan vi håbe på at kunne konstruere vedligeholdelsesvenlige, pålidelige og effektive programmer. application stack linked list “pointers”

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.6 Men hvad er en stak? class Good { public static void main (String[] args) { int x = 0; Stack s = new LinkedStack(); read(x); while ( x!=0 ) { s.push(x); read(x); } while ( !s.isEmpty() ) { x = s.pop(); write(x); } interface Stack { /** * post: isEmpty == 'the stack is empty‘ */ public boolean isEmpty(); /** * post: isFull == 'the stack is full‘ */ public boolean isFull(); /** * pre: not isFull * post: e is placed on top of the stack */ public void push(int e); /** * pre: not isEmpty * post: pop == 'the top element' * and the top element is * removed from the stack */ public int pop(); }

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.7 En HP-regnemaskine Indtastning Display 11  11 4   3 4  4 5  5 * * 161

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.8 Rullestakken inde bag scenen Indtastning Display 11  11 4   3 4  4 5  5 * * display

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.9 Regneudtryk Prefix-udtryk Infix-udtryk Postfix-udtryk Eks. 1 Eks. 2 +3*45 * *5 (3+4)*5 345*+ 34+5*

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.10 Evaluering af postfixudtryk Infix-udtryk Postfix-udtryk 3+4*5 345*+ Indtastning 3  3 4  4 5  5 *

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.11 Hvad sker der bag scenen? push 4push 5push 3pop b pop a push a*b pop b pop a push a+b

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.12 Algoritme for regnemaskine for alle tegn t i udtryk { hvis ( t er et tal ) push(t) ellers { int b = pop tal af stakken; int a = pop tal af stakken; vælg ( hvis t er ) { ‘+’: push a+b; ‘-’: push a-b; ‘*’: push a*b; ‘-’: push a/b; } pop b pop a push a+b * +

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.13 Regnemaskine i Java public int evaluate (String exp, Stack s) { // pre: exp er et lovligt postfixudtryk for (int i = 0; i<exp.length(); i++) { char ch = exp.charAt(i); if ( Character.isDigit(ch) ) s.push(Character.getNumericValue(ch)); else { int b = s.pop(); int a = s.pop(); switch ( ch ) { case '+': s.push(a+b); break; case '-': s.push(a-b); break; case '*': s.push(a*b); break; case '/': s.push(a/b); break; default: ; }//switch }//else } //for return s.pop(); }//evaluate

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.14 A stack implementation class LinkedStack implements Stack { protected Node sp; public LinkedStack() { sp = null; } public boolean isEmpty() { return sp==null; } public boolean isFull() { return false; } public void push(int e) { Node p = new Node(); p.v = e; p.next = sp; sp = p; } public int pop() { int res = sp.v; sp = sp.next; return res; }  sp Stack s = new LinkedStack() s.push(13); s.push(9); s.push(7); Repræsentationsinvariant:

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.15 Specifikationen er en kontrakt Kontraktperspektivet –to parter –gensidige fordele –gensidige forpligtigelser Skal opfylde start-betingelse Skal opfylde slut-betingelse Kan antage slut-betingelse Kan antage start-betingelse ForpligtigelserFordele Klient Udbyder Service

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.16 Specifikation som brandmur class Calculator { public eval(Stack s) {... b= s.pop(); a= s.pop(); s.push(a+b);... } class LinkedStack implements Stack { protected Node sp; public LinkedStack() { sp= null; } public boolean isEmpty() { return sp==null; } public boolean isFull() { return false; } public void push(int e) { Node p= new Node(); p.v= e; p.next= sp; sp= p; } public int pop() { int res= sp.v; sp= sp.next; return res; } interface Stack { /** * post: isEmpty == the stack is empty */ public boolean isEmpty(); /** * post: isFull == the stack is full */ public boolean isFull(); /** * pre: not isFull * post: e is placed on top of the stack */ public void push(int e); /** * pre: not isEmpty * post: pop == 'the top element' * and the top element is * removed from the stack */ public int pop(); } ApplikationSpecifikationImplementation

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.17 Alternativ implementation af stack class ArrayStack implements Stack { // Class constant final private static int MAX = 100; // Instance variables private int items []; private int sp; // Constructor public ArrayStack() { items = new int[MAX]; MISSING CODE } // Methods public boolean isEmpty() { MISSING CODE } public boolean isFull() { MISSING CODE } public void push(int e) { MISSING CODE } public int pop() { MISSING CODE } } sp 0 Max items Repræsentationsinvariant:

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.18 Alternativ 2 class CollectionStack implements Stack { // Instance variables private Collection items; // Constructor public CollectionStack() { MISSING CODE } // Methods public boolean isEmpty() { MISSING CODE } public boolean isFull() { MISSING CODE } public void push(int e) { MISSING CODE } public int pop() { MISSING CODE } } 0 items Repræsentationsinvariant: items.size()

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.19 Repræsentationsinvarianten konstruktør rep-inv true metode Bemærk: inde i en metode er repræsentationsinvarianten ikke nødvendigvis opfyldt, men før og efter hver metode gælder den.

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.20 Polymorfi En variabel er kvalificeret med en type, men variablen kan referere til et objekt af en anden type. Dog skal objektets reelle type være en subtype af den kvalificerende type. Der er to måder at lave subtyper på i Java –implementer et interface –udvid en klasse. Klasseudvidelser (subklasser) skal vi se på i kommende lektioner. class Calculator { public eval(Stack s) {... b = s.pop(); a = s.pop(); s.push(a+b);... } class Engineer { Calculator c = new Calculator(); public calculate() {... c.eval(new LinkedStack()); c.eval(new ArrayStack()); } Qualifier

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.21 Afkobling CalculatorStack ArrayStack CollectionStack LinkedStack 1

 Michael E. Caspersen, 2001Introducerende objektorienteret programmeringregnemaskine.22 Plug-and-play push pop ArrayStack Der kan monteres både en LinkedStack og en ArrayStack (og alle mulige andre slags stakke man måtte finde på fremover!), fordi regnemaskinen er programmeret i forhold til det generelle Stack-interface. push pop LinkedStack