Modularitet och tillstånd. Stora system kräver en uppdelning. En lösning: modularitet. Basera programmets struktur på den fysiska systemets struktur:

Relevanta dokument
Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b)

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.

Signalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv.

TDDC74 Programmering: Abstraktion och modellering Datortenta

Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på

Lösningsförslag. TDDC74 Programmering: Abstraktion och modellering. Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum:

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

TDDC74 Programmering: Abstraktion och modellering. Provkod TEN1, Tid: kl 14-18, , Kåra

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK

Ändringsbar (mutable compound) data. TDDC74 Programmering: abstraktion och modellering. Sätta - samman listor kopiering. Hitta sista cons-cellen

Tentamen i. TDDA 69 Data och programstrukturer

Våra enkla funktioner eller procedurer

FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDDC74 Programmering, abstraktion och modellering. Tentamen

Chapter 4: Writing Classes/ Att skriva egna klasser.

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

TDDC74 Programmering, abstraktion och modellering DUGGA 3

TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Datum:

FÖRELÄSNING 1 PERSONAL TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 SYFTE EXAMINATION ORGANISATION

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

Föreläsning 9 Exempel

TDDC74 Programmering, abstraktion och modellering. Tentamen

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

TDDC74 Lab 02 Listor, sammansatta strukturer

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

TDDC74 Programmering, abstraktion och modellering. Tentamen

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

TDDC74 - Lektionsmaterial C

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Datalogi, grundkurs 1 Övningsuppgifter i Scheme. Serafim Dahl, Carina Edlund, m.fl.

Förra gången: Primitiva data

DD1361 Programmeringsparadigm. Carina Edlund

Programmering II (ID1019) :00-12:00

Design av en klass BankAccount som representerar ett bankkonto

Pascal... Pascal. Pascal... Pascal...

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Objekt och klasser - Introduktion

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Dagens föreläsning Programmering i Lisp Fö 5

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015

Idag: Dataabstraktion

I dag: Blockstruktur, omgivningar, problemlösning

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Statistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Datorarkitekturer med operativsystem

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

TDDC74 Programmering, abstraktion och modellering DUGGA 1

TDDC74 Programmering, abstraktion och modellering. Tentamen

Uppgift 6A - Frekvenstabell

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

PROGRAMMERING I MATEMATIK. Ämnets dag 2017 Göteborgs universitet, Matematiska Vetenskaper Åse Fahlander och Laura Fainsilber

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Procedurer och villkor

Deklarativ programmering

OOP Objekt-orienterad programmering

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

Objekt och klasser - Introduktion. Objekt. Spar_Konto 2. Spar_Konto 1. Konton. Ett objekt har: Ett bankkonto. public void uttag(double belopp)

Rekursiva algoritmer sortering sökning mönstermatchning

1 Funktioner och procedurell abstraktion

Program & programmering

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 8 10, 7 april 2016

Abstraktion. procedurabstraktion. DA2001 (Föreläsning 26) Datalogi 1 Hösten / 27

Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

Föreläsning 5 5DV086 - Programspråk

Deklarationer/definitioner/specifikationer

Börja med att kopiera källkoden till din scheme-katalog (som du skapade i Laboration 1).

C++ Slumptalsfunktioner + switch-satsen

Deklarativ programmering

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

CS - Computer science. Datateknik Informationsbehandling Datalogi Datavetenskap (ÅA 2008)

Mer om klasser och objekt

LUNDS UNIVERSITET 1(6) STATISTISKA INSTITUTIONEN Per-Erik Isberg

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Att öva på och förstå ett program med flera samverkande klasser.

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Genetisk programmering i Othello

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Transkript:

Modularitet och tillstånd Stora system kräver en uppdelning. En lösning: modularitet Basera programmets struktur på den fysiska systemets struktur: En fysisk objekt en beräkningsobjekt Ett agerande en symbolisk operation På detta sätt, om vi utvidgar systemet så (förhoppningsvis) behöver vi bara addera nya objekt och operationer, utan att påverka den existerande lösning. Två strategier: Tillstånd Många objekt kan karakteriseras mha tillstånd ett bankkonto en bil en dator DrSchemes interpretator... koncentrera på objekt koncentrera på strömmar (informationsflöde) Jacek Malec, Dept. of Computer Science, Lund University 3 Jacek Malec, Dept. of Computer Science, Lund University 4 Lokalt tillstånd Ett exempel: ett bakkonto, med 1000:- SEK (dra-ut 250) 750 (dra-ut 250) 500 (dra-ut 600) "För lite på kontot" (dra-ut 150) 350 Implementation (define balance 100) (define (withdraw amount) "För lite på kontot")) Något nytt: set! en speciell form Något till: begin också en speciell form

Att skapa liknande objekt (define new-withdraw (let ((balance 100)) "För lite på kontot")))) Nu är balance osynlig, förutom för new-withdraw! balance är enkapslad (encapsulated) i proceduren new-withdraw. (define (make-withdraw "För lite på kontot"))) Hur det fungerar? (define W1 (make-withdraw 100)) (define W2 (make-withdraw 100)) (W1 50) (W2 70) (W2 40) (W1 40) Jacek Malec, Dept. of Computer Science, Lund University 7 Jacek Malec, Dept. of Computer Science, Lund University 8 Exempel, forts. (define (make-account (define (withdraw amount) "För lite på kontot")) (define (deposit amount) (set! balance (+ balance amount)) (define (dispatch m) (cond ((eq? m withdraw) withdraw) ((eq? m deposit) deposit) (else (error "Unknown request -- MAKE-ACCOUNT" m)))) dispatch) Exempel, forts. (define acc (make-account 100)) ((acc withdraw) 50) ((acc withdraw) 60) ((acc deposit) 40) ((acc withdraw) 60) (define acc2 (make-account 100)) Message passing!

Syntaktisk socker ((acc deposit) 40) (define (deposit accout amount) ((account deposit) amount)) (define (withdraw accout amount) ((account withdraw) amount)) (deposit acc 40) (withdraw acc 50) (define (transact account op-type amount) ((account op-type) amount)) (transact acc deposit 40) (transact acc withdraw 40) En nyttig abstraktionsbarriär! Nytta av tilldelning Ett exempel: slumptalsgenerator Vad är slumptal? (rand-update)= x (rand-update)= y (rand-update)= z x, y, z,... har de nödvändiga statistiska egenskaper Ett förslag: (define random-init 7) (define rand (let ((x random-init)) (lambda () (set! x (rand-update x)) x))) Jacek Malec, Dept. of Computer Science, Lund University 11 Jacek Malec, Dept. of Computer Science, Lund University 12 Exempel: Monte Carlo 6/π 2 är sannolikheten att två slumpmässiga heltal har inga gemensamma delare. Låt oss experimentera för att hitta π: (define (estimate-pi trials) (sqrt (/ 6 (monte-carlo trials cesaro-test)))) (define (cesaro-test) (= (gcd (rand) (rand)) 1)) (define (monte-carlo trials experiment) (define (iter trials-remaining trials-passed) (cond ((= trials-remaining 0) (/ trials-passed trials)) ((experiment) (+ trials-passed 1))) (else trials-passed)))) (iter trials 0))

Utan tilldelning: (define (estimate-pi trials) (sqrt (/ 6 (random-gcd-test trials random-init)))) (define (random-gcd-test trials initial-x) (define (iter trials-remaining trials-passed x) (let ((x1 (rand-update x))) (let ((x2 (rand-update x1))) (cond ((= trials-remaining 0) (/ trials-passed trials)) ((= (gcd x1 x2) 1) (+ trials-passed 1) x2)) (else trials-passed x2)))))) (iter trials 0 initial-x)) Tilldelningen kostar! (define (make-simplified-withdraw (set! balance ) (define W (make-simplified-withdraw 25)) (W 20) (W 10) Jamför det med: (define (make-decrementer ) (define D (make-decrementer 25)) (D 20) (D 10) Inget tillstånd hos D! Jacek Malec, Dept. of Computer Science, Lund University 15 Jacek Malec, Dept. of Computer Science, Lund University 16 Substitutionsmodellen ((make-decrementer 25) 20) Substitutionsmodellen: symboler är namn på värde! ( (- 25 amount)) 20) (- 25 20) Låt oss prova på make-simplified-withdraw: ((make-simplified-withdraw 25) 20) ( (set! balance (- 25 amount)) 25) 20) (set! balance (- 25 20)) 25 Fel! Det finns två balance: innan set! och efter set! Tilldelning: en variabel är inte längre ett namn,utanenbehållare, en plats för ett värde Konsekvens: två saker som ser lika ut behöver inte vara (exakt) lika. Vad betyder en och samma sak? (define D1 (make-decrementer 25)) (define D2 (make-decrementer 25)) (define W1 (make-simplified-withdraw 25)) (define W2 (make-simplified-withdraw 25)) Är D1 och D2 en och samma sak? Är W1 och W2 en och samma sak?

Ett exempel till: (define peter-acc (make-account 100)) (define paul-acc (make-account 100)) (define peter-acc (make-account 100)) (define paul-acc peter-acc) Är peter-acc och paul-acc en och samma sak? Ja i det andra fallet. Men hur vet vi det? Endast genom att analysera programkoden! Om imperativ programmering (define (factorial n) (define (iter product counter) (if (> counter n) product (iter (* counter product) (+ counter 1)))) (iter 1 1)) Jacek Malec, Dept. of Computer Science, Lund University 19 Även klarare: (define (factorial n) (let ((product 1) (counter 1)) (define (iter) (if (> counter n) product (begin (set! product (* counter product)) (set! counter (+ counter 1)) (iter)))) (iter))) Hur vet vi att ordningen på (set! product (* counter product)) (set! counter (+ counter 1)) är rätt? Jobbigt att analysera. I funktionell programmering problemet finns ej!