Abstrakta datatyper. Dagens föreläsning. Abstract data types (ADT)
|
|
- Sandra Hansson
- för 7 år sedan
- Visningar:
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
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 merDataabstraktion. 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 merDataabstraktion. 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 merDagens 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 merTentamen 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 merUniversitetet 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 merUppgift 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 merImperativ 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 merDagens 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 merTvå 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 merTDDC74 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 merTDDC74 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 merDagens 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 merUppgift 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 merRekursiva 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 merUniversitetet 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 merTDDC74 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 merTDDC74 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 merDagens 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 merIdag: 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 merallt.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 merTENTAMEN 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 merLABORATION 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 merTDDC74 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 merTDDC74 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 merTDDC74 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 merDatatyper 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 mern 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 merTDDC74 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 merSista 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 merProgramsprå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 merTDDC30. 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 merSista 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 merTDDC30. 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 merSymbolisk 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 merTDDC74 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 merTDDC74 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 merExempel 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 merIdag: 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 merTDDC74 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 merTDDC74 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 merIdag. 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 merIdag: 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 merDet ä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 merTDDC74 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 merTDDC74 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 merTDDC74 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 merInstruktioner - 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 merParameterö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 merLä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 merTDDC74 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 merLö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 merTDDC74 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 merFö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 merSamlingar 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 merProgrammering 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 merSignalflö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 merAbstrakt 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 merIdag: 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 merLambdas. (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 merDatalogi, 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 merTDDC74 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 merTDDC74 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 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 merTDDE44 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 merFö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 merDigitalitet. 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 merTDDC30. 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 merIntroduktion 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 merTommy 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 merTentamen 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 merStatistik ö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 merTentamen. 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 merTypsystem. 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
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 merTypsystem. 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 merTDDC74 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 merTDDC74 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 merDatastrukturer 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 merProgrammering 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 merFö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 merFö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 merProgrammeringsteknik 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 merIntroduktion 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 merExempel 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 merDatastrukturer. 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 merInnehå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 merITK: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 merAnmä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 merArv: 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 merTDDC74 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 merProgrammering 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 merIntroduktion 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 merKomma 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 merFö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 merKlassdeklaration. 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 merFö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 merTENTAMEN: 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 merIntroduktion 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 merSprå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