Abstrakta datatyper. Dagens föreläsning. Abstract data types (ADT)

Storlek: px
Starta visningen från sidan:

Download "Abstrakta datatyper. Dagens föreläsning. Abstract data types (ADT)"

Transkript

1 1 2 Dagens föreläsning TDDC67 Funktionell programmering och Lisp Fö 8 och 9 Dataabstraktion - Abstrakta datatyper - datatypbeskrivning - datatyplikhet - sammansättningar av datatyper med sekvens, tupel, ändlig avbildning, mängd - val av primitiver beroende på sammansättning - ansvar för primitiver Komplexitet / abstraktion - abstraktionsbariärer (abstraction barriers) - gömma information (information hiding) Exempel: Deriveringsexempelet (kap 9) Genomgång av almanackan (kap 10) - datatyper - representation Orientering om objektorientering Datadriven programmering Abstrakta datatyper Abstract data types (ADT) Denotes a class of objects whose behavior is defined by a set of values and a set of operations, including constructors, selectors and iterators. (Grady Booch, Software Components with ADA) Mål: - höja abstraktionen - programmeringsnivån - förstå struktur och operationer på dataobjekt - gömma representationen (information hiding) - kunna byta representationen Abstrakta datatyper är basen för objektorientering - klassbegreppet. 3 4 Datatyper Datatyper på olika nivåer: Hårdvaran ger oss vissa datatyper: bitar, heltal, flyttal, tecken Programmeringsspråket ger oss högre datatyper: Lisp ger heltal (godtycklig precision), bråk, flyttal, symbol, lista, tecken, sträng, post, arraystruktur etc etc Abstrakta datatyper beskriver nya datatyper, som ej direkt finns i programspråket: - allmänna datatyper, tex stack, kö, tabell, graf - tillämpningsnära datatyper, t ex formeluttryck, personer, bilar, LiTH'are, scheman, klockslag En datatyp har en mängd med objekt. Vi kan tänka oss ändliga mängder (t ex sanningsvärdena) eller oändliga mängder som datatyper (t ex heltalen) Vi hanterar nu i kursen datatyper fritt, dvs vi kan bilda de datatyper (dvs mängder av dataobjekt) som är lämpliga för tillämpningen. Programspråk har vanligen restriktioner på hur datatyper kan skapas och sammansättas. Observera följande fall: - sammannlagda datatyper talen är unionen av heltalen, bråken och flyttalen - rekursiva datatyper binära träd är ett löv eller en sammansättning av två binära träd

2 5 6 Primitiva operationer på datatyper Dessa funktioner brukar kallas för datatypens gränsyta (interface) konstruktorer constructors - för att skapa objekt selektorer selectors - för att komma åt delarna igenkännare recognizers - för att känna igen objekt av viss datatyp iteratorer iterators - för att gå igenom alla elementen i ett objekt (ofta i form av en högre ordningens funktion) jämförare - när är objekt lika, delstrukturer modifikatorer modifiers - för att ändra i ett objekt andra operationer som det är vanligt att kunna utföra för en viss datatyp ex. aritmetiska operationer på tal Arbetsmetodiken 1. Bestäm datatyper Studera tillämpningen. Identifiera datatyper. Karakterisera den mängd som beskriver dataobjekten. För sammansatta datatyper bestäm hur den ingående delarna är relaterade till varandra. 2. Bestäm primitiver constructor - skapa ett objekt recognizer - känna igen ett objekt selector - ta ut delarna i ett objekt iterator - gå igenom alla delarna i ett objekt andra primitiver 3. Bestäm representationen För varje datatyp bestäm hur de enskilda objekten skall representeras 4. Definiera primitiverna Definiera varje primitiv i den givna representationen Första exemplet: Representationsberoende -> -> Representationsoberoende version Symbolisk derivering derivatan av x 2 med avseende på x är 2x Deriveringsregler: du dx = 1 om u = x du dx = 0 om u ej är en funktion i x du ( + v) du dv = dx dx dx du v ) = v du u dv dx dx dx d ( x+ 4) = 1 dx d ( 3x + 4) ( 2x + 1) = ( 2x + 1) 3+ ( 3x+ 4) 2 dx 7 Representationsberoende (oabstrakt) version Valet av representation är inbyggt i själva algoritmen. Jämför hur ni löste logikvärdesuppgiften. Ett aritmetisk uttryck representeras och hanteras som en lista (uttryck operator uttryck) (deriv 'x 'x) => 1 (deriv '(x + 10) 'x) => (1 + 0) = 1 (defun deriv (expr x) (cond ((eq expr x) 1) ((symbolp expr) 0) ((eq (second expr) '+) (list (deriv (first expr) x) '+ (deriv (third expr) x))) ((eq (cadr expr) '*) (list (list (first expr) '* (deriv (third expr) x)) '+ (list (deriv (first expr) x) '* (second expr))) (t (error "Felaktigt uttryck: ~a" expr)))) 8

3 9 10 Vilka dataobjekt består ett aritmetiskt utryck utav? Vi kan identifiera operatorer uttryck konstanter variabler sammansatt uttryck Ett sammansatt uttryck bildas av en operator och två uttryck uttryck konstant variabel x y z 2-(3+x) x+y sammansatta-uttryck ((x+2)+1)+0 För varje datatyp inför vi primitiva funktioner: Konstruktorer En eller flera operationer för att skapa objekt av datatypen. Funktionen cons är en konstruktor för listan eller punkterade paret. Selektorer Operationer för att ur sammansatta datatyper kunna ta ut delarna. Funktionerna first/car och rest/cdr är selektorer för listan och det punkterade paret. Igenkännare Recognizers. Operationer för att känna igen objekt av den givna datatypen. Funktionen listp är en recognizer för listan. Beskrivning av en funktions datatyp (signatur). Datatypen på de formella parametrarna och datatypen på värdet. Vi följer följande konvention: Vi inför de abstrakta datatyperna: funktion: datatyp par1 x datatyp par2 x... -> datatyp värde operator, konstant, variabel, sammansatt-uttryck och uttryck Konstruktorer skapa-summa: uttryck x uttryck -> sammansatt-uttryck skapar ett summa-uttryck från två uttryck skapa-produkt: uttryck x uttryck -> sammansatt-uttryck skapar ett produkt-uttryck från två uttryck skapa-konstant: lisp-tal -> konstant Selektorer argument-1: sammansatt-uttryck -> uttryck tar fram första argumentet ur ett sammansatt uttryck argument-2: sammansatt-uttryck -> uttryck tar fram andra argumentet ur ett sammansatt uttryck operator: sammansatt-uttryck -> operator tar fram operatorn ur ett sammansatt uttryck skapa-variabel: lisp-symbol -> variabel skapa-operator: lisp-symbol -> operator (operator uttrycket ) => operatorn + (argument-2 uttrycket ) => uttrycket 3 (skapa-konstant 3) => konstanten 3 (skapa-operator +) => operatorn + (skapa-summa uttrycket 4 uttrycket 5 * x ) => uttrycket * x )

4 13 14 Igenkännare Recognizers konstant?: uttryck -> sanningsvärde testar om ett godtyckligt uttryck är en konstant variabel?: uttryck -> sanningsvärde testar om ett godtyckligt uttryck är en variabel summa?: sammansatt-uttryck -> sanningsvärde testar om ett sammansatt uttryck är ett summa-uttryck produkt?: sammansatt-uttryck -> sanningsvärde testar om uttrycket är ett produkt-uttryck Jämförare Här kan man diskutera olika möjligheter. Skall uttrycken vara exakt lika strukturellt eller räcker det med att uttrycket står för samma värde. Det kanske skall finnas två olika jämförare. samma-uttryck?: uttryck x uttryck -> sanningsvärde Representationsobereonde (abstrakt) version En ny version där representationen av uttryck ej syns. datatypsignatur (defun derivera (uttr var) ; uttryck x variabel -> uttryck (cond ((konstant? uttr) (skapa-konstant 0)) ((variabel? uttr) (if (samma-variabel? uttr var) (skapa-konstant 1) (skapa-konstant 0))) ((summa? uttr) (skapa-summa (derivera (argument-1 uttr) var) (derivera (argument-2 uttr) var))) ((produkt? uttr) (skapa-summa (skapa-produkt (argument-1 uttr) (derivera (argument-2 uttr) var)) (skapa-produkt (argument-2 uttr) (derivera (argument-1 uttr) var)))) (t (error "Felaktigt uttryck: ~a" uttr))))) samma-värde?: uttryck x uttryck -> sanningsvärde Val av representation Vi väljer följande representation: Objekten av datatypen konstant representeras som tal i Lisp. För att, av ett Lisp-tal, skapa ett objekt av den abstrakta datatypen konstant används funktionen skapa-konstant. Objekten av datatypen variabel representeras som symboler. Objekten av datatypen operator representeras enligt följande: operatorn + representeras som symbolen + Objekten av datatypen sammansatt-uttryck representeras som en lista på formen (uttryck operator uttryck) Definition av primitiva funktioner: Konstruktorer (defun skapa-produkt (op1 op2) ; uttryck x uttryck -> (list op1 '* op2)) ; sammansatt-uttryck (defun skapa-summa (op1 op2)... ) (defun skapa-konstant (tal) ; lisp-tal -> konstant tal) (defun skapa-variabel (var) ; lisp-symbol -> variabel var) Selektorer (defun argument-1 (uttr) ; sammansatt-uttryck -> (first uttr)) ; uttryck (defun argument-2 (uttr)... ) (defun operator (uttr) ; sammansatt-uttryck -> (second uttr)) ; operator Igenkännare Recognizers (defun konstant? (uttr) (numberp uttr)) Jämförare ; uttryck -> sanningsvärde (defun samma-variabel? (var1 var2); variabel x variabel -> (eq var1 var2)) ; sanningsvärde

5 17 18 Ändring av representationen Vi behöver endast definiera om prinitiverna för en abstrakt datatyp. Tillämpningsprogrammen (t ex derivera-funktionen) skall ej behöva ändras. Vi kan till exempel ha en sk typad representation. Alla objekten representeras som en lista där första elementet anger objektets typ och andra elementet är själva värdet. Objekt av typen konstant representeras som (konstant Lisp-tal) Objekt av typen variabel representeras som (variabel Lisp-symbol) Objekt av typen operator representeras som (operator Lisp-symbol) Objekt av typen sammansatt-uttryck representeras som (uttryck (operator uttryck uttryck)) Primitiverna för varje abstrakt datatyp definieras om: (defun konstant? (uttr) ; uttryck -> lisp-sanningsvärde (eq (first uttr) 'konstant)) (defun operator (uttr) ; sammansatt-uttryck -> operator (second (second op)) ) (defun skapa-variabel (var) ; lisp-symbol -> variabel (list 'variabel var)) Man kan ha generella funktioner som lägger till resp tar bort typ-taggen (jfr almanackslabben) (typa-värde konstant 10) = konstanten 10 = (konstant 10) (värdet konstanten 10 ) = 10 (defun typa-värde (datatyp värde) (list datatyp värde)) (defun värdet (objekt) (second objekt)) (defun typen (objekt) (first objekt)) Vi kan ställa krav på våra primitiva funktioner. De skall kontrollera att argumenten är korrekta. En konstruktorfunktion skall aldrig kunna returnera ett dataobjekt som ej är korrekt enligt reglerna för datatypen. (defun skapa-produkt (op1 op2) ; uttryck x uttryck -> (if (and (uttryck? op1) ; sammansatt-uttryck (uttryck? op2)) (list op1 '* op2) (error fel datatyp )) (defun uttryck? (uttryck) (or (summa? uttryck) (produkt? uttryck))) Man skulle kunna tänka sig optimeringar: (skapa-summa (skapa-konstant 10) (skapa-konstant 0)) => Sammansatta dataobjekt. Olika möjligheter att sätta samman med diskretmatematiska begrepp Tupel: ett fixt antal element, där varje element har en given datatyp <integer, symbol> <1, kalle>, <5, lisa>, <-100, hus> Sekvens: inget, ett eller flera element av given datatyp {{integer}}* (tomma sekvensen ingår) {{integer}} + (sekvensen har minst ett element) {{}}, {{1}}, {{1, 2}}, {{1, 2, 3}}, {{1, 1, 1, 1}} Ändlig avbildning (finite mapping): indexmängd med n antal element av en given datatyp. Position beskrivs av index ur indexmängden [integer, integer, integer, integer, integer] [1,3,5,7,9], [100, 99, 98, 97, 96] 20 Mängd (potensmängden) {integer} {}, {1, 3, 5, 7}, {100, 101}

6 Exempel TUPEL Abstrakt datatyp datum: 3 feb 21 ÄNDLIG AVBILDNING Abstrakt datatyp betygstabell: 22 3 februari, 12 april, 7 oktober <månadsdag, månadsnamn> månadsdag är en grundläggande datatyp med värdena 1, 2 t.o.m. 31 månadsnamn är en grundläggande datatyp med värdena jan, feb, t.o.m. dec Är alla värden (tupler) av dessa två datatyper (mängder) korrekta datum? Nej. Endast 366 av de 12x31=372 möjliga värden är korrekta. Vi måste precisera oss noggrannare. Vissa kombinationer är ej giltiga! <30, feb>, <31, nov> Abstrakt datatyp mätvärden: {{heltal-0-till-9}}* SEKVENS [integer, integer, integer, integer,] med index betygsgrad UK betygsgrad är en grundläggande datatyp med 3 värdena UK, 3, 4, 5 4 MÄNGD Abstrakt datatyp grupp: {klass} 5 19 där klass är en grundläggande datatyp med värdena anna, lisa, mia, stina, bo, sten och karl anna bo lisa sten mia karl bo mia Sammansättningar av datatyper och vanliga representationer i Lisp, Ada, Java, C/C++ tupel <d1, d2,.., dn> Lisp: lista post/struktur C/Ada: post - record, struktur (struct) Java: klassobjekt sekvens {{d}}* Lisp: lista C/Ada: länkad lista Java/C++: i programbibliotek (collections, STD) ändlig avbildning (map) [d, d,..., d] Lisp: associationslista arraystruktur hashtabell C/Ada: arraystruktur - array, fält, vektorer Java/C++: array, i progambibliotek (collections, STD) 23 Ada har till exempel: tupel ändlig avbildning - post - arraystruktur type date is record day : 1..31; month : end record; type year is array (1..12) of integer; 24 mängd {d} Lisp: C/Ada: Java/C++: lista länkad lista i programbilbliotek (collections, STD) Valet beror även på om vi programmerar funktionellt med kopiering av strukturer eller om vi tillåter destruktiva ändringar i strukturer,

7 Hantering av en almanacka. Detta är ett relativt stor exempel på hur vi kan strukturera större problem. I laboration 4 kommer ni att få en hel del kod och skall komplettera med egna funktioner och använda den för att lösa olika typer av problem. Laborarationen är ett krav för att få påbörja projektarbetet om några veckor. Vi vill kunna tillämpningsprogram som använder tid, datum, bokningar mm för att t ex kunna skriva tillämpningsprogram för - en personlig almanacka boka den 12 jan för Lisp-fö skriv ut möten 12 jan - ett schemaläggningsystem Olika slags objekt: datum, månad, timme, minut, klockslag, mötestid, dagalmanacka, månadsalmanacka, årsalmanacka 25 Val av primitiva operationer för grundläggande/odelbara/primitiva datatyper: Exempel: minut, timme, dagnummer, månad primitiva operationer: Konstruktor constructor skapar ett objekt konvertering av Lisp-objekt till abstrakt objekt Lisp-tal (10) -> minut Lisp-sträng ( januari ) -> månad igenkännare recognizer känna igen objekt konverteringsfunktion konvertering abstrakt objekt till Lisp-objekt in-/utmatningsfunktion andra operationer Exempel på en primitiv datatyp: timme 1 timme 15 timmar skapa-timme : Lisp-naturligt-tal-> timme (skapa-timme 5) => 5 timmar timme? : Lisp-objekt -> sanningsvärde heltal : timme -> Lisp-heltal skriv-timme : timme -> addera-timme : timme x timme -> timme (skriv-timme (addera-timme (skapa-timme 5) (skapa-timme 7))) Val av primitiver för sammansättningen med tupel Konstruktor skapa nytt objekt av givna delar en selektor för varje del ta ut en given del recognizer Exempel på tupel: klockslag = <timme, minut> 0<=timme<24, 0<=minut<60 skapa-klockslag : timme x minut -> klockslag timdel : klockslag -> timme minutdel : klockslag -> minut klockslag? : Lispobjekt -> sanningsvärde

8 29 30 Val av primitiver för sammansättning med ändlig avbildning ändlig avbildning: konstruktor skapa tomt objekt lägg in nytt värde för givet index selektor ta ut värde för givet index igenkännare recognizer iterator för varje element gör något Exempel på ändlig avbildning: årsalmanacka = [månadsalmanacka,..., månadslamanacka] indexmängd är månad, dvs (jan, feb, mar..) skapa-tom-årsalmanacka : -> årsalmanacka lägg-in-ny-månadsalmanacka : månad x x månadsalmanacka x årsalmanacka -> -> årsalmanacka månadsalmanacka : månad x årsalmanacka -> -> månadsalmanacka årsalmanacka? : Lisp-objekt -> sanningsvärde för-varje-månad : årsalmanacka x (månad x månadsalmanacka ->) -> Exempel på ändlig avbildning: årsalmanacka = [månadsalmanacka,..., månadslamanacka] indexmängd är månad, dvs (jan, feb, mar..) skapa-tom-årsalmanacka : -> årsalmanacka lägg-in-ny-månadsalmanacka : månad x x månadsalmanacka x årsalmanacka -> -> årsalmanacka månadsalmanacka : månad x årsalmanacka -> -> månadsalmanacka årsalmanacka? : Lisp-objekt -> sanningsvärde för-varje-månad : årsalmanacka x (månad x månadsalmanacka ->) -> Val av primitiver för sammansättning med sekvens Sekvens: konstruktor skapa tomma objektet lägg till ett elem ent först selektor första elementet resten av elementen igenkännare recognizer tomma objektet iterator för varje element i objektet gör något

9 33 34 Exempel på sekvens: dagalmanacka = {{mötestid}}* skapa-tom-dagalmanacka : -> dagalmanacka lägg-in-mötestid : mötestid x dagalmanacka -> dagalmanacka första-mötestid : dagalmanacka -> mötestid resten-dagalmanacka : dagalmanacka -> dagalmanacka tom-dagalmanacka? : dagalmanacka -> sanningsvärde dagalmanacka? : Lisp-objekt -> sanningsvärde Likhet av datatyper? klockslag = <timme, minut> kl 2.15 kl tidsrymd = <timme, minut> 2 timmar 15 minuter 48 timmar 20 minuter Namnlikhet eller strukturlikhet Vad är tillåtet? klockslag + klockslag = klockslag klockslag + tidsrymd = klockslag tidsrymd + tidsrymd = tidsrymd Krav på primitiver - kontrollera att datatypen på argumenten är korrekta - kontrollera att alla restriktioner och samband mellan ingående delar gäller - ett värde som en konstruktor skapar skall alltid vara korrekt! (skapa-klockslag (skapa-timme 25) (skapa-minut 100)) (lägg-in-ny-dagalmanacka (skapa-dag 31) Kalles-dag-almanacka (skapa-tom-månadsalmanacka (skapa-månad februari))) Abstraktion - representation Vi vill gömma representationen för användaren (information hiding). (skapa-klockslag (skapa-timme 10) (skapa-minut 30)) => kl 10:30 (klockslag (timme. 10) (minut. 30)) Man får ej skapa eller ändra abstrakta objekt direkt i representationen. (skapa-tidsperiod '(klockslag (timme. 50)(minut. 100)) '(klockslag (timme. 55)(minut. 0))) => kl 50:100 - kl 55:00 Här anser vi att argumenten till skapa-klockslag är listor och av felaktig typ, ty skapa-tidsperiod: klockslag x klockslag -> tidsperiod Hur kontrolleras detta? I Lisp måste vi själva kontrollera detta. I typade språk (t ex Ada, Java) kan en del kontroller utföras av kompilatorn.

10 37 38 Exempel på tillämpningsfunktioner: (defun lägg-in-mötestid-om-ledigt (m-tid d-alm) ; mötestid x dagalmanacka -> dagalmanacka (if (ledig-tid? (tidsperiodsdel m-tid) d-alm) (lägg-in-möte m-tid d-alm)) d-alm)) (defun ledig-tid? (t-per d-alm) ; tidsperiod x dagalmanacka -> Lisp-sanningsvärde (cond ((tom-dagalmanacka? d-alm) t) ((överlappar? t-per (tidsperiodsdel (första-mötestid d-alm))) nil) (t (ledig-tid? t-per (resten-dagalmanacka d-alm))))) (defun överlappar? (t1 t2) ; tidsperiod x tidsperiod -> Lisp-sanningsvärde (and (före-klockslag (start-klockslag t1) (slut-klockslag t2)) (före-klockslag (start-klockslag t2) (slut-klockslag t1) ) ))) (defun före-klockslag (k1 k2) ; klockslag x klockslag -> Lisp-sanningsvärde (or (< (heltal (timdel k1)) (heltal (timdel k2))) (and (= (heltal (timdel k1)) (heltal (timdel k2))) (< (heltal (minutdel k1)) (heltal (minutdel k2))) ))) Typad representation Man måste från själva dataobjektet kunna avgöra dess abstrakta datatyp. Inför typmärkning av dataobjektet. (skapa-timme 10) => (timme. 10) (skapa-tom-dag-almanacka) => (dagalmanacka) timme klockslag årsalmanacka punkterat par på formen: (timme. Lisp-heltal) lista på formen: (klockslag timme minut) typad associationslista på formen: (årsalmanacka. ((januari. månadsalmanacka) (februari. månadsalmanacka)... (december. månadsalmanacka)) dagalmanacka lista på formen: (dagalmanacka mötestid... mötestid) Vi behöver två primitiver: Lägg till typmärkning och ta bort typmärkning. I boken funktionerna typa och värde. I laborationen packa-ihop och packa-upp. Alternativ representation Nytt förslag: Gles representation Har man stora dataobjekt behöver inte alla delar ha en explicit representation. För en strukutr som är sammansatt som en ändlig avbildning (t ex årsalmanackan) så behöver man inte ha plats för alla elementen (månadsalmanackorna) om ett element är tomt eller har ett standardvärde (t ex 0). Vi har endast lagra månadsalmanackor för mars och november. (årsalmancka (mars. icke-tom-månadsalmanacka ) (nov. icke-tom-månadsalmanacka )) Primitiven månadsalmanacka : månad x årsalmanacka -> månadsalmanacka måste definieras så att om inte månaden finns skall de returnera en tom månadsalamancka, som den primitiven skapar själv med skapa-tom-månadsalamancka. 39 Komplexitet - abstraktionsbarriärer Nivåuppdelning En tillämpning som använder almanackan, t ex Universitets schemaläggningssystem byggstenar boka gemensamma-tider skriv-ut DATOR LISP ALMANACKA append Lisp-primitiver Maskininstruktioner Hårdvaran ledig-tid? lägg-in-möte-om-ledigt överlappar? lägg-in-dagalmanacka primitiver skapa-minut skapa-klockslag remove car ADD mapcar cons eq + cond COMP JMP 40

11 41 42 Deklaration av datatyper Allla funktioner skall ha en kommentar eller dokumentationssträng som anger parametrarnas och värdets datatyper. (defun skapa-klockslag (tim min) timme x minut -> klockslag (defun skapa-klockslag (tim min) ;; timme x minut -> klockslag (defun skapa-klockslag (tim min) tim : timme, min : minut, värde : klockslag Många programspråk är sk starkt typade och kräver motsvarande deklarationer. Gäller för Ada och Java. Notationen för datatypbeskrivning. fak: nat-tal -> nat-tal append: lista x lista -> lista derivera: uttryck x variabel -> uttryck subst: atom x atom x lista -> lista Vi ser datatyperna som mängder: xärkartesiska produkten (ordnat par, tupel) mellan mängder. -> avbildning (mapping) mellan två mängder Funktionen derivera är en avbildningen mellan ett par av ett uttryck och en variabel och en lista. En datatypbeskrivning brukar kallas för en funktions signatur Olika signaturer för en predikatfunktion: listp : Lisp-uttryck -> sanningsvärde för en funktion utan parametrar: (lambda () 10) : -> integer för en funktion som inte returnerar något (intressant) värde, ex (setf x (a b c)) setf : symbol x Lisp-uttryck -> (Java använder void för att ange inget värde) för en funktion som tar funktionsparametrar: (mapcar # (lambda (e)..) l) : (Lisp-uttryck -> Lisp-uttryck) x lista -> lista Typerna i alla uttryck skall överensstämma. Vi kan ibland kunna härleda typen för en funktion. Vissa funktionella språk (ML och Haskell) gör detta. Vilken typ (av Lisp s typer) är denna funktion definierad för? (defun f (l) (mapcar # (lambda (n) (if (= n 0) noll ej-noll)) l))) f : lista av tal -> lista av symbol

12 45 46 Abstrakta datatyper - objekt-orienterad design (Ada, Java, C++) Inkapsling (encapsulation) Runt varje abstrakt datatyp har vi skapat primitiva funktioner (konstruktor, selektorer, iterators etc..) Inom objektorientering vill man starkt gruppera samma dessa och skapar därför klasser. En klass beskriver de data som skall ingå i objektet samt de funktioner (metoder) som skall operera på dessa data. Vi skapar sedan objekt från dessa klasser. Klass klockslag två datafält: timme, minut som i sin tur är objekt eller grundläggande värden t ex heltal konstruktor för att skapa ett objekt metoder: timdel, minutdel, klockslag+tidsperiod, skriv-klockslag etc Låt konstruktorn normalisera och ev optimera sina argument. (skapa-summa (skapa-konstant 10) (skapa-konstant 0)) => konstanten 10 (skapa-tidsrymd (skapa-timme 10) (skapa-minut 200)) => 13 tim 20 min Skapa objektet kl (i Java) Klockslag kl10_15 = new Klockslag(new Timme(10), new Minut(15)) Strukturen på sammansättningen beskriver programstrukturen Exempel. Utskrift av dataobjekt i almanackan. klockslag tupel <timme,minut> (defun skriv-klockslag (kl) klockslag -> (skriv-timme (timdel kl)) (princ # :) (skriv-minut (minutdel kl))) dagalmanacka sekvens {{mötestid}}* (defun skriv-dagalmanacka (dag) dagalmanacka -> (cond ((tom-dagalmanacka? dag) nil) (t (skriv-möte (första-mötestiden dag)) (skriv-dagalmanacka (resten-dagalmanacka dag))) )) 47 Hur gör vi med operationer som redan finns i Lisp, t ex aritmetik klockslag + tidsrymd -> klockslag 10: tim 45 min = 13:15 (kl+tr (skapa-klockslag (skapa-timme 10) (skapa-minut 30)) (skapa-tidsrymd (skapa-timme 2) (skapa-minut 45)) => 13:15 Alternativ 1: (defun kl+tr (kl tr) klockslag x tidsrymd -> klockslag (let ((minutes (min+ (minut-del kl) (minut-del tr)) (60-min (skapa-minut 60)) (1-tim (skapa-timme 1))) (if (min>= minutes 60-min) (skapa-klockslag (tim+ (tim+ (timdel kl) (timdel tr)) 1-tim)) (min- minutes 60-min)) (skapa-klockslag (tim+ (timdel kl) (timdel tr)) minutes)) )) Aritmetiska operationer för varje datatyp införs. (defun min+ (m1 m2) minut x minut -> minut (skapa-minut (+ (heltal m1) (heltal m2)))) 48

13 49 50 Alternativ 2: Konvertera direkt till heltal och använd Lisp-operationerna (defun kl+tr (kl tr) klockslag x tidsrymd -> klockslag (let ((minutes (+ (heltal (minut-del kl)) (heltal (minut-del tr)))))) (if (>= minutes 60) (skapa-klockslag (skapa-timme (+ (heltal (timdel kl)) (heltal (timdel tr)) 1)) (skapa-minut (- minutes 60)) (skapa-klockslag (skapa-timme (+ (heltal (timdel kl)) (heltal (timdel tr))) (skapa-minut minutes)) ))) Nackdel: Alternativ 1 - många funktioner Alternativ 2 - ingen kontroll på att operationerna görs korrekt Kan vi aldrig blanda in Lisp-objekt med i de abstrakta objekten? Jo, internt kan man vilja skapa strukturer som ej har en tillämpningsmotsvarighet, utan av programmeringspraktiska skäl vill vi ex vis samla på oss klockslag genom att bilda en lista av klockslag När börjar alla möten längre än 2 timmar den 17:e? Skriv ut dessa. (skriv-klocklista (långa-möten dag-17 2-tim)) (defun långa-möten (d tr) dagalmanacka x tidsrymd -> lista av klockslag (cond ((tom-dagalmanacka? d) ()) ((längre-möte? (första-mötestiden d) tr) (cons (start-klockslag (tidsperioddel (första-mötestiden d))) (långa-möten (resten-dagalmanacka d) tr))) (t (långa-möten (resten-dagalmanacka d) tr)))) (defun skriv-klocklista (kl-lista) lista av klockslag -> (mapc #'skriv-klockslag kl-lista))) Datadriven programmering sid deriveringsexemplet Gör varje deriveringsregel till en funktion: (defun derivera-2 (uttr var) ; uttryck x variabel -> uttryck (cond ((konstant? uttr) (skapa-konstant 0)) ((variabel? uttr)...) ((summa? uttr) (derivera-summa uttr var)) ((produkt? uttr) (derivera-produkt uttr var))... här kan nya deriveringsregler läggas in (t (error... )) )) Datadriven struktur: Lagra alla regler som funktioner (lambda-uttryck) i en datastruktur, t ex en associationslista: (setq *deriveringsregler* (list (cons + # (lambda (uttr var) ; utryck x variabel -> uttryck (skapa-summa...))) (cons * # (lambda (uttr var)...)) )) övriga regler Vi måste här skapa ett funktions-objekt genom att beräkna ett # - (function) uttryck

14 53 54 sid 170 (defun derivera-3 (uttr var) ; uttryck x variabel -> uttryck (cond ((konstant? uttr)..) ((variabel? uttr)..) ((deriveringsregel? (operator uttr)) (applicera-regel (hämta-regel (operator uttr)) uttr var)) (t (error...)) )) (defun deriveringsregel? (fn) (assoc fn *deriveringsregler*)) (defun applicera-regel (deriv-fn uttr var) ; (uttryck x variabel -> uttryck) x uttryck x ; x variabel -> uttryck (funcall deriv-fn uttr var)) Den datadrivna strukturen möjliggör nu att vi kan lägga till nya regler i form av Lisp-funktioner i associationslistan, utan att behöva gå in i programkoden! (defun hämta-regel (fn) (cdr (assoc fn *deriveringsregler*))

Dagens föreläsning. TDDC67 Funktionell programmering och Lisp Fö 8 och 9

Dagens föreläsning. TDDC67 Funktionell programmering och Lisp Fö 8 och 9 1 Dagens föreläsning TDDC67 Funktionell programmering och Lisp Fö 8 och 9 Dataabstraktion - Abstrakta datatyper - datatypbeskrivning - datatyplikhet - sammansättningar av datatyper med sekvens, tupel,

Läs mer

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap Dataabstraktion TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12 Peter Dalenius Institutionen för datavetenskap 2013-11-12 Översikt Vad är abstraktion? Vad är en abstrakt datatyp?

Läs mer

Dataabstraktion. TDDD73 Funktionell och imperativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Dataabstraktion. TDDD73 Funktionell och imperativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap Dataabstraktion TDDD73 Funktionell och imperativ programmering i Python Föreläsning 12 Peter Dalenius Institutionen för datavetenskap 2014-11-19 Översikt Vad är abstraktion? Vad är en abstrakt datatyp?

Läs mer

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

Dagens föreläsning Programmering i Lisp Fö 5 Anders Haraldsson 1 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.3) - Iteratorer - Egenskaper

Läs mer

Tentamen i. TDDC67 Funktionell programmering och Lisp

Tentamen i. TDDC67 Funktionell programmering och Lisp 1 Linköpings tekniska högskola Institutionen för datavetenskap Anders Haraldsson Tentamen i TDDC67 Funktionell programmering och Lisp och äldre kurser TDDC57 Programmering, Lisp och funktionell programmering

Läs mer

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

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2 Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.) - Iteratorer

Läs mer

Uppgift 4A - Definition av enkla funktioner

Uppgift 4A - Definition av enkla funktioner Uppgift 4A - Definition av enkla funktioner (defun start-klockslag (tidsperiod) "tidsperiod -> klockslag" (typkontroll tidsperiod #'tidsperiod?) (first (packa-upp tidsperiod))) (defun slut-klockslag (tidsperiod)

Läs mer

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

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur Imperativ programmering konstruktioner i Lisp Imperativ programmering I den imperativa programmeringen skriver vi program satsvist. Datastrukturer (kap.-.) aystruktur poststruktur Iterativa uttryck (avs.)

Läs mer

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler 21-1-2 1 Dagens föreläsning Hur fungerar ett Lisp system intern struktur av symbolen, tal, listan pekare - delade strukturer - eq minneshantering fri lista - sophämtning/garbage collection stack Diverse

Läs mer

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)

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) Programmönster: # Listan som sekvens, Rekursiv process Enkel genomgång av sekvens (element på toppnivån i en lista)) TDDC60 Programmering: abstraktion och modellering Föreläsning 5 Rekursiva och iterativa

Läs mer

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering DUGGA 2 AID-nummer: Datum: 2011-02-18 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 2 Fredag 18 feb 2011

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2011-06-10 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Fredag 10 juni

Läs mer

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

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning 1 Dagens föreläsning Programmering i Lisp - Block, räckvidd - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch

Läs mer

Uppgift 6A - Frekvenstabell

Uppgift 6A - Frekvenstabell Uppgift 6A - Frekvenstabell (defstruct par element antal) (defun unika-element (lista) (reduce #'(lambda (x y) (if (listp x) (if (find y x) x (cons y x)) (if (eq x y) x (list x y)))) lista)) (defun sortera-tabell

Läs mer

Rekursiva algoritmer sortering sökning mönstermatchning

Rekursiva algoritmer sortering sökning mönstermatchning Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 6-7 Rekursiva strukturer rekursiva definitioner rekursiva funktioner rekursiva bevis: induktion - rekursion strukturell

Läs mer

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

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 1 2 - Block, räckvidd Dagens föreläsning Programmering i Lisp - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2011-01-11 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Tisdag 11 januari

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2012-01-10 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Tisdag 10 januari

Läs mer

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk 1 Dagens föreläsning Programmering i Lisp Fö 7 Kopplingen funktionella programmering och diskret matematik. Jämför vad ni hittills gjort i denna kurs och i den diskreta matematiken, med referenser in i

Läs mer

Idag: Dataabstraktion

Idag: Dataabstraktion Idag: Dataabstraktion Hur använder vi det vi hittills kan om Scheme för att realisera (implementera) sammansatta data? DA2001 (Föreläsning 7) Datalogi 1 Hösten 2013 1 / 16 Idag: Dataabstraktion Hur använder

Läs mer

allt.cl Page 1 of 17 Date: torsdag 7 december 2006

allt.cl Page 1 of 17 Date: torsdag 7 december 2006 allt.cl Page 1 of 17 Slumpspelaren Väljer slumpvis en flytt ur möjliga flyttar. (defun skapa-slump-spelare (namn bricktyp) "lisp-sträng x bricka -> spelare" (skapa-spelare #'slump-gör-flytt namn bricktyp))

Läs mer

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15 TENTAMEN I PROGRAMSPRÅK -- DVG C01 140605 kl. 08:15-13:15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Bilaga A: BNF-definition Betygsgräns: Kurs: Max 60p, Med beröm godkänd 50p, Icke utan beröm godkänd

Läs mer

LABORATION 1. Inledande Lisp - rekursion

LABORATION 1. Inledande Lisp - rekursion AI - Lisp / Laboration 1 - Inledande Lisp - rekursion 1 LABORATION 1 Inledande Lisp - rekursion 1.0 LABFÖRORD Detta labbmaterial ger dig introduktion till Lisp för att kunna använda programmeringsspråket

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18 TDDC74 Programmering: Abstraktion och modellering Datortenta - 2018-06-07, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

Läs mer

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?

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? Tidigare TDDC74 Programming: Abstraktion och modellering Föreläsning 4 Symboler, Par, Listor Representation av par, Grafisk notation för par Representation av listor mha par Typiska listhanteringsprocedurer

Läs mer

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering DUGGA 2 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 2 Torsdag 19 feb 2009 8-10 Namn: Personnummer:

Läs mer

Sista delen av kursen

Sista delen av kursen Sista delen av kursen handlar om hur program, delprogram och datatyper deklareras och vad det man åstadkommit egentligen betyder. Innehåll Syntaktisk (hur ser det ut) och semantisk (vad betyder det) beskrivning

Läs mer

Programspråkslingvistik. Sista delen av kursen. Ett programspråk

Programspråkslingvistik. Sista delen av kursen. Ett programspråk Sista delen av kursen Programspråkslingvistik handlar om hur program, delprogram och datatyper deklareras och vad det man åstadkommit egentligen betyder. Innehåll Syntaktisk (hur ser det ut) och semantisk

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Sista delen av kursen

Sista delen av kursen Sista delen av kursen handlar om hur program, delprogram och datatyper deklareras och vad det man åstadkommit egentligen betyder. Innehåll Syntaktisk (hur ser det ut) och semantisk (vad betyder det) beskrivning

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

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

Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b) Symbolisk data (1 2 3 4) (a b c d) (jacek johan david) ((jacek "jacek@cs.lth.se") (johan "johang@cs.lth.se") (david "dat99dpe@ludat.lth.se")) ((anna 13) (per 11) (klas 9) (eva 4)) (+ (* 23 4) (/ y x))

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12 TDDC74 Programmering: Abstraktion och modellering Datortenta - 2019-05-27, kl 08-12 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datortenta

TDDC74 Programmering: Abstraktion och modellering Datortenta TDDC74 Programmering: Abstraktion och modellering Datortenta - 2017-08-26 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

Exempel på typer av datorspråk EXCEL

Exempel på typer av datorspråk EXCEL 1 2 TDDB82 Perspektiv på Datateknik Breddgivande föreläsning Datorspråk Programmeringsparadigmer Programmeringsspråk Konstruktioner i programmeringsspråk Litteratur: Brookshear, Computer Science - an overview,

Läs mer

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

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29 Idag: Par och listor DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 1 / 29 Idag: Par och listor Hur hanterar man icke-numeriska problem? DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 1 / 29 Idag: Par och

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2011-08-17 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Onsdag 17 augusti

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18 TDDC74 Programmering: Abstraktion och modellering Datortenta - 017-10-7, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

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

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv. Idag: Par och listor Symboler Hur hanterar man icke-numeriska problem? Hur hanterar man en samling av data? Hur konstruerar man sammansatta datastrukturer? Bra om du har läst följande avsnitt i AS: Pair

Läs mer

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga. Tentamen Programmeringsteknik II 2014-0-27 Skrivtid: 0800 100 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19 TDDC74 Programmering: Abstraktion och modellering Dugga 2, 2017-04-06, kl 17-19 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12 TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 215, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16 TDDC74 Programmering: Abstraktion och modellering Dugga 2, 207-04-06, kl 4-6 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python) Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python) Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok, t.ex. den rekommenderade kursboken. Boken

Läs mer

Parameteröverföring. Exempel. Exempel. Metodkropp

Parameteröverföring. Exempel. Exempel. Metodkropp Exempel atriangle.changesize (100, 50); // OK atriangle.changesize (100); // fel antal atriangle.changesize ( 1, 50); // fel datatyp char c = atriangle.getarea (); // fel datatyp Parameteröverföring I

Läs mer

Länkade strukturer. (del 2)

Länkade strukturer. (del 2) Länkade strukturer (del 2) Översikt Abstraktion Dataabstraktion Inkapsling Gränssnitt (Interface) Abstrakta datatyper (ADT) Programmering tillämpningar och datastrukturer 2 Abstraktion Procedurell abstraktion

Läs mer

TDDC74 Lab 02 Listor, sammansatta strukturer

TDDC74 Lab 02 Listor, sammansatta strukturer TDDC74 Lab 02 Listor, sammansatta strukturer 1 Översikt I denna laboration kommer ni att lära er mer om: Mer komplexa rekursiva mönster, procedurer och processer. Hur man kan hantera listor och andra enklare

Läs mer

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

Lösningsförslag. TDDC74 Programmering: Abstraktion och modellering. Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum: Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum: 2013-03-12 Lösningsförslag Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum: 2013-03- 12 Läs alla frågorna först och bestäm dig för den ordning som passar dig

Läs mer

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

Föreläsning 1 Datastrukturer (DAT037)

Föreläsning 1 Datastrukturer (DAT037) Föreläsning 1 Datastrukturer (DAT037) Fredrik Lindblad 1 30 oktober 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037

Läs mer

Samlingar Collection classes

Samlingar Collection classes Samlingar Collection classes Sven-Olof Nyström Uppsala Universitet 17 mars 2005 Skansholm: Kapitel 9, 19 Se även Suns tutorial om Collections Olika slag av samlingar i Java Arrayer (Till exempel: int[])

Läs mer

Programmering II (ID1019) :00-17:00

Programmering II (ID1019) :00-17:00 ID1019 Johan Montelius Programmering II (ID1019) 2014-03-10 14:00-17:00 Förnamn: Efternamn: Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.

Läs mer

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

Signalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv. Strömmar (streams) De sista dagarna objekt med tillstånd modellerades som beräkningsobjekt med tillstånd. Isådana modeller är tiden modelerad (implicit) som en sekvens av tillstånd. För att kunna modellera

Läs mer

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- Abstrakt datatyp Datatyp för en variabel Betecknar i ett programmeringsspråk den mängd värden variabeln får anta. T ex kan en variabel av typ boolean anta värdena true och

Läs mer

Idag: Dataabstraktion

Idag: Dataabstraktion Idag: Dataabstraktion Hur använder vi det vi hittills kan om Scheme för att realisera (implementera) sammansatta data? Hur separerar man datastrukturen från resten av ett program så att ändringar i datastrukturen

Läs mer

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Lambdas (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Funktioner En funktion (i programmeringstermer) är en operation som tar ett eller flera argument,

Läs mer

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

Datalogi, grundkurs 1. Lösningsförslag till tentamen Datalogi, grundkurs 1 Lösningsförslag till tentamen 6 maj 2000 1. För att proceduren sortera ska fungera som tänkt kan den se ut på följande sätt: const min = 1; max = 3; type tal = integer; index = min..max;

Läs mer

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 FÖRELÄSNING 1 TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 Introduktion till kursen Schemespråkets grunder Enkla exempel Jalal Maleki Institutionen för datavetenskap Linköpings universitet

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

Läs mer

TDDE44 Programmering, grundkurs

TDDE44 Programmering, grundkurs TDDE44 Programmering, grundkurs Föreläsning 5 Jody Foo, jody.foo@liu.se Föreläsning 5 & 6 Laboration 3: En egen pokedex data från webben Ny datatyp: dictionary Mer om dataabstraktion Nästlade datastrukturer

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037) Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet

Läs mer

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud. Analog Digitalitet Kontinuerlig Direkt proportionerlig mot källan Ex. sprittermometer Elektrisk signal som representerar ljud Diskret Digital Representation som siffror/symboler Ex. CD-skiva Varje siffra

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,

Läs mer

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? TDDD78, TDDE30, jonas.kvarnstrom@liu.se 729A85 jonas.kvarnstrom@liu.se

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

Statistik över heltal

Statistik över heltal Övningsuppgift Statistik över heltal Steg 2 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande

Läs mer

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34 Tentamen Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Lördagen den 30 november 2002 kl 9.00 14.00, salar E33, E34 Inga hjälpmedel 30 poäng ger säkert godkänt, 40 poäng ger betyg 4 50 poäng ger

Läs mer

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

Typsystem. Typsystem... Typsystem... Typsystem... 2 * Typsystem Typsystem finns i alla programmeringsspråk. Avsikten med typsystem är att kontrollera att uttryck är säkra i den bemärkelsen att innebörden i operanderna är klar och inte är motsägelsefull och

Läs mer

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

Ändringsbar (mutable compound) data. TDDC74 Programmering: abstraktion och modellering. Sätta - samman listor kopiering. Hitta sista cons-cellen TDDC74 Programmering: abstraktion och modellering Ändringsbar (mutable comound) data Att göra strukturförändringar i listor Ändra car- och cdr-ekare SICP 3 (del ) Föreläsning 8 Anders Haraldsson (set-car!

Läs mer

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

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19 Typsystem Typsystem finns i alla programmeringsspråk. Avsikten med typsystem är att kontrollera att uttryck är säkra i den bemärkelsen att innebörden i operanderna är klar och inte är motsägelsefull och

Läs mer

TDDC74 Programmering, abstraktion och modellering DUGGA 3

TDDC74 Programmering, abstraktion och modellering DUGGA 3 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 3 Torsdag 4 mars 2010 kl 8-10 Namn: Personnummer:

Läs mer

TDDC74 Programmering, abstraktion och modellering DUGGA 1

TDDC74 Programmering, abstraktion och modellering DUGGA 1 AID-nummer: Datum: 2011-02-04 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 1 Fredag 4 feb 14-16

Läs mer

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon. Datastrukturer och algoritmer Föreläsning 7 Tabell, hashtabell Relation & lexikon Innehåll Tabell Tabell Hashtabell Relation, lexikon Modell Uppslagsbok Organisation Ändlig avbildning av argument på värden

Läs mer

Programmering II (ID1019)

Programmering II (ID1019) ID1019 Johan Montelius Instruktioner Betyg Programmering II (ID1019) 2019-03-08 Svaren skall lämnas på dessa sidor, använd det utrymme som nns under varje uppgift för att skriva ner ditt svar (inte på

Läs mer

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad 1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen

Läs mer

Föreläsning 15: Repetition DVGA02

Föreläsning 15: Repetition DVGA02 Föreläsning 15: Repetition DVGA02 Vad handlar kursen om? Kursen kan i grova drag delas upp i tre delar: 1. Objekt-orienterad programmering 2. Grafiska användargränssnitt 3. Datastrukturer Dessutom genomsyras

Läs mer

Programmeringsteknik II

Programmeringsteknik II Programmeringteknik II Kursintroduktion http://www.it.uu.se/edu/course/homepage/prog2/vt18/ 2018-03-19 Programmeringsteknik II 2018-03-19 1 / 9 Lärare Carl Nettelblad (kursansvarig) Anna Eckerdal Biträdande

Läs mer

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Introduktion till formella metoder Programmeringsmetodik 1. Inledning Introduktion till formella metoder Programmeringsmetodik 1. Inledning Fokus på imperativa program (ex. C, Java) program betyder härefter ett imperativt program Program bestäms i en abstrakt mening av hur

Läs mer

Exempel på typer av datorspråk EXCEL

Exempel på typer av datorspråk EXCEL 1 2 TDDC10 Perspektiv på datateknik/datavetenskap TDDC79 Perspektiv på informationsteknologi TDP001 Handhavande av datormiljö (D, IT, C, IP) Breddgivande föreläsning Historik Datorspråk Programmeringsparadigmer

Läs mer

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer Arrayer Samling av data Datastrukturer int[] minatelnummer = new int[30]; // allokering av tillräckligt // stort minnesutrymme Element refereras genom indexering ringa = minatelnummer[25]; // indexering

Läs mer

Innehåll. F7: Tabell, hashtabell, relation & lexikon. Gränsyta till Tabell. Tabell. Tabell Hashtabell Relation Lexikon.

Innehåll. F7: Tabell, hashtabell, relation & lexikon. Gränsyta till Tabell. Tabell. Tabell Hashtabell Relation Lexikon. Innehåll F7: Tabell, hashtabell, relation & lexikon Niclas Börlin 5DV49 Datastrukturer och algoritmer Tabell Hashtabell Relation Lexikon Tabell Gränsyta till Tabell Modell Uppslagsbok Organisation Ändlig

Läs mer

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik I 2016-06-11 Skrivtid: 0900 1400 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015 TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? jonas.kvarnstrom@liu.se 2014 2017 jonas.kvarnstrom@liu.se

Läs mer

Komma igång med Allegro Common Lisp

Komma igång med Allegro Common Lisp Funktionell programmering med Lisp 9 Första gången Komma igång med Allegro Common Lisp Det Lisp-system som vi i kommer att använda för laborationerna heter Allegro Common Lisp. Det är en kommersiell programvara

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Träd, speciellt binära träd egenskaper användningsområden implementering Datavetenskap (LTH) Föreläsning 9 HT 2017 1 / 31 Inlämningsuppgiften De föreläsningar som inlämningsuppgiften

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

Läs mer

Föreläsning 13. Träd

Föreläsning 13. Träd Föreläsning 13 Träd Träd Ett träd är en datastruktur som tillåter oss att modellera sådant som vi inte kan modellera med linjära datastrukturer. Ett datavetenskapligt träd består av noder med pilar emellan.

Läs mer

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN: Algoritmer och datastrukturer. Läs detta! 1 (6) TENTAMEN: Algoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att vi

Läs mer

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014 Introduktion till Datalogi DD1339 Föreläsning 2 22 sept 2014 Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 public class { public class { Åtkomst, public betyder fullt tillgänglig utifrån public

Läs mer

Språket Python - Del 1 Grundkurs i programmering med Python

Språket Python - Del 1 Grundkurs i programmering med Python Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR

Läs mer