Lagring... DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

Storlek: px
Starta visningen från sidan:

Download "Lagring... DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68"

Transkript

1 Lagring... Variabler är dataobjekt som används för lagring av värden. Dessa värden kan uppdateras och avläsas. I imperativ programmering används variabler för att lagra tillståndet hos den värld man avbildar i sitt program. I funktionell programmering är variablerna oftast knutna till någon lokal parameterlista i en funktion. De flesta variabler existerar endast under tiden som en modul av något slag existerar. Det kan vara ett program, en funktion eller en procedur, men även filer och databaser är variabler och dessa överlever programmen som använder dem. Alla variablers lagringsutrymme utgörs av en eller flera minnesceller i antingen primär- eller sekundärminnet. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

2 Lagring... Här behandlas variabler som om: de lagras i en mängd celler, en cell är allokerad (reserverad för visst ändamål) eller inte allokerad, varje cell har ett innehåll som är definierat eller odefinierat. Att en cell har ett odefinierat värde menas att värdet kan vara vad som helst, oftast det värde som råkade finnas i cellen vid allokeringstillfället. Beroende på programspråk betraktas vissa variabler som enheter eller sammansatta, beroende på om cellerna, där variabeln lagras, måste uppdateras som en helhet eller kan uppdateras selektivt (delar kan uppdateras för sig). DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

3 Lagring... I Python betraktas primitiva värden, konstanta mängder (frozenset), str, tuple och range som enheter. I Scheme betraktas primitiva värden, par, listor, funktioner och referenser till variabler som enheter. Ex (define f (lambda (x) (lambda (y) (let ((x (+ x y))) (* x y))))) f är en variabel vars värde är funktionskroppen inklusive de tre ingående variablerna x, y och x (!). DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

4 Lagring... I ML, där med definitionen type date = {year: int, month: int, day: int}; funktionen fun updatemonth(d: date, newmonth: int) = {year = #year d, month = newmonth, day = #day d}; skapar en ny post med samma värden på year och day men nytt värde på month. Poster behandlas alltså som en enhet i ML. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

5 Lagring... Ex (ML): Man kan deklarera variabler i ML. datatype day = mon tue wed thu fri sat sun ; type weeklyappointment = day * int * int; val nextapp: weeklyappointment ref = ref (mon, 13, 20); Här är day någonting helt nytt, därför datatype, medan weeklyappointment sätts samman av redan definierade typer och nextapp är en variabel vars värde kan uppdateras som helhet, men man kommer inte åt delarna annat än för avläsning. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

6 Kontinuerliga listor Finns i Scheme men inte i Python. Den avgörande skillnaden mellan diskontinuerliga listor och kontinuerliga listor är att man direkt kan komma åt enstaka element genom indexering och att de flesta implementationer av kontinuerliga listor kräver fix längd på dem. Det finns flera sätt att låsa listornas längd och dessa ger upphov till olika termer för listorna. Om indexmängden och därmed längden på listan bestäms vid: kompileringstillfället = statisk kontinuerlig lista då variabeln skapas = dynamisk kontinuerlig lista inte alls låses = flexibel kontinuerlig lista DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

7 Kontinuerliga listor... Statisk kontinuerlig lista (Pascal): CONST minrow = 0; maxrow = 100; mincol = 2; maxcol = 25; TYPE table = ARRAY [minrow..maxrow, mincol..maxcol] OF Integer; VAR mytable: table; PROCEDURE makezerotable(var atable: table); VAR i,j: Integer; BEGIN FOR i := minrow TO maxrow DO FOR j := mincol TO maxcol DO atable[i, j] := 0; END; DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

8 Kontinuerliga listor... Dynamisk kontinuerlig lista (Simula): minrow := InInt; maxrow := InInt; mincol := InInt; maxcol := InInt; BEGIN INTEGER ARRAY table(minrow:maxrow,mincol:maxcol); PROCEDURE makezerotable(atable); INTEGER ARRAY atable; BEGIN INTEGER lowrow, highrow, lowcol, highcol, i, j; lowrow := LowerBound(aTable, 1); highrow := UpperBound(aTable, 1); lowcol := LowerBound(aTable, 2); highcol := UpperBound(aTable, 2); FOR i := lowrow STEP 1 UNTIL highrow DO FOR j := lowcol STEP 1 UNTIL highcol DO atable(i, j) := 0; END; END; DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

9 Kontinuerliga listor... Flexibla kontinuerliga listor finns t.ex. i Java. Lagring av komponenter i en kontinuerlig lista sker så att konsekutiva (på varandra direkt följande) komponenter lagras konsekutivt i minnet. Ex: basadress Adressen till komponent nr i beräknas enligt: basadress + (i startindex) komponentstorlek men detta kräver att alla komponenter tar lika stor plats. Om inte detta är fallet måste följande beräknas. i j=undre-gräns s j + basadress De flesta språk som har kontinuerliga listor understödjer endast homogena kontinuerliga listor, som är enklast, undantag är t ex Smalltalk och Java. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

10 Variablers livstid En variabel skapas genom att utrymme allokeras, används (får ett värde, som kan avläsas och ändras) och utplånas genom att det reserverade utrymmet återbördas till systemet. Statiska variabler deklareras och minne allokeras då deklarationen påträffas. Existerar så länge blocket, i vilket de deklarerades, existerar. Avallokeras tillsammans med blocket. De existerar även i eventuella subblock, men kan skymmas av lokala variabler med samma namn, varvid de, under subblockets existens, inte är åtkomliga. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

11 Variablers livstid... Ex (Scheme): (define (minmax m. n) (let ((min m) (max m)) (define (loop n) (if (null? n) (cons min max) (begin (cond ((> min (car n)) (set! min (car n))) ((< max (car n)) (set! max (car n)))) (loop (cdr n))))) (loop n))) DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

12 Persistenta objekt (långlivade/uthålliga dataobjekt) Den enklaste formen långlivade dataobjekt är vanliga filer, som kan betraktas som listor på sekundärminnet. Mer generellt: Antag att det i Pyton funnes möjlighet att utöka programmens omgivning genom att kunna deklarera programvariabler som inkluderas i omgivningen så att de deklarerade variablernas värden överlever mellan programkörningar. Det kan ske genom att Pyton syntax utökas med ett reserverat ord t ex persistent. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

13 Persistenta objekt... Ex: anumber = None sum = persistent private( Serafim ) anumber = Input( mata in ett tal: ) sum += anumber På grund av den dynamiska typrningen är det här inte riktigt bra. Det vore bättre om vi kunde få typkontroll som fungerar i både språk och på filer. Man kan komma nästan ända fram med hjälp av pickle. Men bara nästan. Man måste lägga till kod för typkontroll och kod för att hålla en fil öppen för lagring av objekten och man måste lgga till kod för att spara och läsa in. Allt detta vill man slippa. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

14 Dataobjektmanipulation (Operationer på variabler) Alla språk som tillåter tilldelning innehåller ett antal programsatser som utför manipulation av innehållet i variabler. Vi kallar denna typ av satser för kommandon. En subjektiv indelning: skip, gör ingenting tilldelning, sätter värdet på en variabel proceduranrop, abstraktion för en mängd satser sekvens, följd av satser samtidiga satser, möjlighet till ickedeterminism villkorlig sats, programflödesstyrning iterativ sats, programflödesstyrning DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

15 Dataobjektmanipulation... I moderna språk behöver man aldrig skriva ut ett skip. Ex (Pascal): IF villkor THEN ELSE; betyder IF villkor THEN skip ELSE skip; a := 3; END betyder a := 3; skip END DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

16 Tilldelning Exempel a = 3 (if villkor then x else y) := 3; (* går bra i t ex ML*) m := n := 23;! går bra i t ex Simula; m = n = 23; /* i C, Python och Java */ c += d; /* c := c + d i C */ DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

17 Proceduranrop P(ap1, ap2,...,apk ); Enbart bieffekter. Är OK utan bieffekter i Ada om man deklarerar separata in- och utparametrar: procedure p (ap1, ap2,...,apk: in Integer; apk+1, apk+2,...,apk+m: out Integer) is begin... end; eftersom man har fullständig kontroll och proceduren kan ses som en process med ett antal in- och utgångar. Obs dock att proceduren inte får ha några bieffekter! DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

18 Sekvenser och samtidiga satser Sekvens, ex: a = 3 b = 4 c = a + b Samtidiga satser, Ex (Scheme): (let ((x 3) (y 4) (z (+ x y))) (let ((y x) (x y))...)) I Python x, y, z = 3, 4, x + y #Hmm.. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

19 Villkorliga satser Används för att ändra programflödet if v then s; if v then s1 else s2; if v1 then s1 elseif v2 then s2 elseif... else sn; if v1 then s1 else if v2 then s2 else if... else sn; Pascal: case expr of L1: s1; L2: s2;... Ln: sn; otherwise s; { inte standard } end; DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

20 Villkorliga satser... Python: if v1: s1 elif v2: s2... else: sn C: switch (c) { case : case \t : case \n : blanks++; break; default : nonblanks++; break; } Men... det finns villkorliga uttryck också (lätt att förväxla) DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

21 Villkorliga uttryck (cond ((> a b) a) (else (if (> b 2) b 2))) (if a > b then x else y) := 3; (* ML *) a := 3 + (if a > b then x else y);! Simula ; DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

22 Iteration Används för att åstadkomma upprepning av programavsnitt. while v do s; repeat s until v; for i := start to stop do s; for i := stop downto start do s; for i in x do s; for i := start step 3 until stop do s; for i := 1,4,17 do s; for i := i + 1 while v do s; loop s1; if v then exit; s2; end loop; DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

23 Iteration... I funktionella språk måste upprepning åstadkommas genom rekursion I deklarativa språk (utom funktionella) finns iterationen inbyggd i språket select namn from anställd where lön > 10000; fac (0, 1). fac (N, N * X) :- N > 0, fac (N-1, X). Sidoeffekter: Kan inte alltid undvikas (innebär alltid uppdatering av variabler) print(x: 1); from pickle import dump intfile = open("integerbinfile", wb )... while n >= 0: dump(n, intfile)... Undvik all användning av ickelokala variabler! DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

24 Deklarationer/definitioner/specifikationer Konstantdefinitioner innebär att ett namn binds och sätts att referera till ett värde som beräknas vid kompileringen/interpreteringen och som under programmets gång inte får ändras. Pascal: CONST n = 10; pi = 3.14; space = ; Simula: INTEGER n = 10; Ada: n: constant integer := 34; a: constant array (boolean) of integer :=(true => 0, false => 1); Funktions- och procedurdefinitioner binder namn till aktuell omgivning och associerar till en programabstraktion. Dessa abstraktioner utgör i sig själva lokala omgivningar. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

25 Typdeklarationer Vi har redan konstaterat att namnekvivalens för typer innebär att två exakt likadant specificerade typer är distinkta. I ML används strukturekvivalens, vilket har fördelar i det att typer som definierats i flera steg eller genererats av funktionsanrop, kommer att vara ekvivalenta om de har samma struktur. Men nackdelar finns också: type vara = int * string; (* varunummer $\times$ varutyp *) type avd = int * string; (* avd.nummer $\times$ avd.namn *) går inte att skilja från varandra och avsikten borde rimligtvis vara att skilja de två olika tupeltyperna åt. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

26 Med strukturekvivalens är de per definition samma typ. I ML finns också möjligheter att genom etiketter skilja typerna åt (= göra dem till olika typer): datatype VARA = vara of int * string; datatype AVD = avd of int * string; Namnekvivalens är enklast och snabbast att kontrollera, men konceptuellt lika typer måste deklareras som samma typ. Strukturell typekvivalens är tyngre för datorn då ju typuttryck måste evalueras för att klarlägga likheten och dessutom kan man inte utan extra åtgärder skilja konceptuellt olika, strukturellt ekvivalenta typer utan extra mekanismer (som datatype i ML) DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

27 Ömsesidig rekursion Ömsesidig rekursion utgör ett problem i statiskt typade språk eftersom namn Ömsesidig rekursion är inte ett problem i scheme eller Python eftersom det inte finns krav på att namn skall existera förrän vid exekvering. def f(n): if n==0: return 0 else: return g(n-1) def g(n): if n==0: return 1 else: return f(n-1) DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

28 Block i olika språk I Scheme är ett block en procedurkropp. I ML kan varje sats vara ett block eftersom varje sats kan innehålla deklarationer. let val x = 3 in x + 2 end; I Java kan deklarationer förekomma var som helst, även mitt i ett block. Där kan variabler deklareras och tilldelas värde i en enda operation. Vill man att det värdet inte ska kunna ändras deklareras det som final. Man har dessutom metoder för att hindra insyn. private final Window w = new Window(...) ger ett fönster som inte kan ändras och som man inte kommer åt utanför blocket. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

29 Abstraktion Inom programmeringstekniken används två former av abstraktion dataabstraktion och programabstraktion. Dataabstraktion handlar om aggregat för att gruppera samhörande data. Programabstraktion sönderfaller i två delar procedur- resp funktions-abstraktion. funktionsabstraktion procedurabstraktion DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

30 Abstraktion... En procedurabstraktion har som uppgift att uppdatera för proceduren globala storheter/strukturer. En funktionsabstraktion utför en beräkning och återsänder ett (eventuellt komplext) värde. Alla funktionsabstraktioner återsänder ett värde till anropspunkten. Detta kan ske genom att, som i funktionella språk, det sist beräknade värdet återsänds eller, som i vissa imperativa språk, man dels talar om att beräkningen inte kan fortsätta, dels anger ett värde att återsända eller, som i andra imperativa språk, funktionen har en pseudovariabel (funktionens namn) vilken tilldelas ett värde. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

31 Abstraktion... Ex: en funktion som ger minsta värdet av tre: Python: def min(a, b, c) tmpmin = a if b < tmpmin: tmpmin = b if c < tmpmin: tmpmin = c return tmpmin DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

32 Abstraktion... Scheme: (define (min a b c) (if (and (< a b) (< a c)) a (if (< b c) b c))) DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

33 Abstraktion... C: min (a, b, c) int a, b, c; { if (a < b && a < c) return a; if (b < c) return b; return c; } DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

34 Abstraktion... Men funktioner i Scheme och Python kan återsända sammansatta värden: def minmax (x): minval = maxval = x[0] for i in range(1, len(x)): if x[i] < minval: minval = x[i] elif x[i] > maxval: maxval = x[i] return minval, maxval DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

35 Abstraktion... Procedurabstraktioner är abstraktioner som endast arbetar via bieffekter, t.ex. skiver till fil, uppdaterar globala variabler... I funktionella språk åstadkoms procedurabstraktioner genom att vissa funktioner får returnera ett resultat som man inte tar hand om eftersom resultatet är irrelevant för funktionen och ingen är intresserad av det. Ex: Scheme: (define (errormsg msg) (display msg) (newline)) DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

36 Abstraktion... Pascal: PROCEDURE printstars(n: Integer); BEGIN FOR i := 1 TO n DO Write( * ); WriteLn; END; DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

37 Abstraktion... En abstraktion skall vara väldefinierad Abstraktionen skall utföra endast en (ev komplex) arbetsuppgift, och utföra denna enda uppgift väl (= korrekt och effektivt). modulärt begriplig Abstraktionen skall ha en betydelse även ryckt ur sitt sammanhan, dvs inte arbeta med globala storheter (skicka allt med parametrarna). robust Abstraktionen upptäcker när indata ligger utanför definitionsområdet och hanterar felsituationer på ett relevant sätt. väldokumenterad Abstraktionen skall vara försedd med pre- och postvillkor och om delar av algoritmen är svårbegriplig skall denna del vara kommenterad DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

38 Abstraktion... I vissa språk kan vi göra högre ordningens abstraktioner: Funktioner och procedurer som tar funktioner och procedurer som parametrar def dotoeach(alist, f): for i in range(len(alist)): alist[i] = f(alist[i]) (define (do-to-each alist f) (if (null? alist) () (cons (f (car alist)) (do-to-each (cdr alist) f)))) DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

39 Abstraktion... Funktioner som ger funktioner som resultat (define (power n) (lambda (x) (expt x n))) ML med: fun upcasechar (s: string) = if ord s >= ord "a" andalso ord s <= ord "z" then chr (ord s + ord "A" - ord "a") else s; kan upcase skrivas som: val upcase = implode o map (upcasechar) o explode; DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

40 Parametrar För att en abstraktion skall vara modulärt begriplig måste alla strukturer och storheter som används av abstraktionen sändas som parametrar. Det är då viktigt i många språk att parametrarna sänds med rätt mekanism. Olika språk ger då olika möjligheter, beroende på vad som kan sändas och vilka mekanismer man kan använda. Traditionellt skiljer man på tre olika mekanismer DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

41 Värdeöverföring Grundläggande mekanism i de flesta programspråken. Den aktuella parametern evalueras och det erhållna värdet substitueras in för varje förekomst av den formella parametern i algoritmen. def f(x, y): x = x + y; return 2 * x DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

42 Referensöverföring I Python sker referensöverföring om parametern är en funktion eller någon datastruktur som kan uppdateras. Det innebär att den formella parameter är en referens till den aktuella parametern. En referens kan ses som en adress till den aktuella variabeln, proceduren eller funktionen. Antag: mm = { min : None, max : None} def minmax(l, minochmax): minochmax[ min ] = minochmax[ max ] = L[0] for i in range(1, len(l)): if L[i] < minochmax[ min ]: minochmax[ min ] = L[i] elif L[i] > minochmax[ max ]: minochmax[ max ] = L[i] DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

43 Namnöverföring Den aktuella parametern evalueras inte förrän den förekommer i algoritmen, d v s att den aktuella parametern, utan evaluering, substitueras för varje förekomst av den formella parametern. Ex (Simula): REAL PROCEDURE sum(x, i, m, n); NAME x, i; REAL x; INTEGER i, m, n; BEGIN REAL summa; summa := 0; FOR i := m STEP 1 UNTIL n DO summa := summa + x; sum := summa END; anropet OutFix(sum(a(i) * b(i), i, 1, 100), 10, 5); ger a(1) * b(1) + a(2) * b(2) a(100) * b(100) Detta brukar även kallas lat evaluering, d v s inga parametrar evalueras förrän de behövs för beräkningen. Exemplet är också en bra illustration av att bieffekter ger obegripliga resultat ibland. Ett modernare sätt är att utföra beräkningen en gång och notera att den är utförd, s.k. chunking DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

44 Parametrar... Intimt förknippat med de olika parameteröverföringsmekanismerna är beräkningsordning vid utförande av abstraktioners algoritmer. Med applikativ ordning beräknas alltid parametrars värden innan anropet till abstraktionen utförs. Med lat evaluering eller normal ordning erhålls en annan beräkningsordning, men där alla parametrar behandlas lika. Det går inte att evaluera procedur-/funktions-parametrar förrän då de förekommer i algoritmen vilka argument skulle man använda? Alltså låter man alla parametrar hanteras lika med sen eller lat evalueringsordning. Två språk av de jag känner till har lat evaluering Miranda (liknar ML) och Haskell, Två ger valmöjlighet Simula och Algol60 De flesta har applikativ ordning, men gör undantag för abstraktioner. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

45 Inkapsling, abstrakta datatyper Med växande program växer kravet på återanvänbarhet för programkod, kravet på att delprogram skall fungera i alla möjliga sammanhang och därmed kraven på modulär begriplighet, möjlighet att gömma modulers inre struktur, och minimala lättbegripliga kommunikationsgränssnitt mellan moduler. Antalet programmerare kan vara stort vid framtagandet av stora program. Därför är det viktigt med effektivitet (återanvända andras kod, generella, lätt anpassbara, lättbegripliga moduler). Det enda programmeraren skall behöva veta är vad modulen gör. Ansvaret för att modulen gör rätt ligger hos implementatören. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

46 Moduler Modularisering sker genom abstraktion. De moduler vi hittills diskuterat är funktioner och procedurer. För att funktioner och procedurer skall passa som moduler gäller utöver modulär begriplighet att de skall vara minimala, dvs att varje procedur/funktion utför endast en väl avgränsad uppgift och att modulen har ingångar endast för det som verkligen behövs för uppgiften och att resultatet är enbart det eftersökta. Man skiljer också mellan procedurer vars uppgift utförs genom bieffekter och funktioner vars utförande ger ett resultat som levereras till omgivningen antingen genom ett funktionsvärde eller genom parametrar om det aktuella språket inte tillåter funktioner att leverera komplexa resultat. Generellt sett skall värden levereras antingen genom funktionsvärde eller via parametrar. Aldrig genom en kombination av dessa. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

47 Moduler... Om funktioner i det aktuella språket kan leverera komplexa värden skall endast funktioner användas då ett i datorn representerbart resultat förväntas. Standard Pascal och Scheme har inget modulbegrepp (utöver funktions- och procedurabstraktioner). I Scheme kan man läsa in filer med definitioner när som helst i ett program. I Pascal är en vanlig utvidgning s.k. Units. Dessa är filer som delas in i två delar av de reserverade orden INTERFACE och IMPLEMENTATION. Allt som definieras i gränssnittsdelen- oftast funktions- och procedurhuvuden - syns i det anropande programmet, men det som finns i implementationsdelen - hjälpfunktioner/procedurer/datastrukturer och funktions- /procedurkroppar - syns inte. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

48 Moduler... Detta är inspirerat av modernare språks modulfaciliteter. I vissa fall kan konceptuellt sammanhörande datastrukturer, funktioner och procedurer föras samman i en modul så att det program som öppnar modulen får tillgång till alla datastrukturer/funktioner/ procedurer i paketet. Även här gäller regeln om minimalitet. Modulen skall då hantera ett koncept, t.ex. trigonometriska funktioner eller vektorer i rymden. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

49 Moduler... import math def spacevector (x, y, z): def scale(s): return spacevector (s * x, s * y, s * z) def add(v): return spacevector (x + v( getx ), y + v( gety ), z + v( getz )) def sub(v): return spacevector (x - v( getx ), y - v( gety ), z - v( getz )) def length(): return math.sqrt(x * x + y * y + z * z) def dotprod(v): return (x * v( getx )) + \ (y * v( gety )) + \ (z * v( getz )) DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

50 Moduler... def op(msg, arg = None): if msg == get : return x, y, z elif msg == getx : return x elif msg == gety : return y elif msg == getz : return z elif msg == add : return add(arg) elif msg == sub : return sub(arg) elif msg == length : return length() elif msg == dotprod : return dotprod(arg) else: print( No such command:, msg) return op DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

51 Moduler... Betraktar man exemplet med vektorer i rymden kan man konstatera att operationerna är grundläggande för typen vector och man kan betrakta typen vector som bestående av alla element som kan tillverkas med hjälp av tripler av reella tal. Typen tillsammans med en eller flera konstruktorer och de grundläggande operationerna kan bilda en abstrakt datatyp. Även för abstrakta datatyper gäller minimalitet: Datastrukturen skall endast innehålla exakt det som krävs. Operationsmängden skall också innehålla endast det som hör samman med typen, och helst bara de grundläggande konstruktorerna, selektorerna och operationer. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

52 Moduler... Om man behöver hjälpstrukturer/funktioner skall dessa helst döljas för omgivningen så att man inte frestas använda dem direkt. Sådan användning av hjälpstrukturer/funktioner och objektens inre struktur kan ha svåröverskådliga följder. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

53 Moduler... flyttfunktion namnfunktion zoomfunktion wind stängfunktion scrollfunktion scrollfunktion sizefunktion DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

54 Moduler... Båda typerna av modul som nu diskuterats finns i flera andra språk, ADA, Simula (vassare), SmallTalk (abstyp, men vassare), C++ (vassare), Eiffel (vassare), Java (vassare) m.m. I vissa språk finns det endast i utvidgningar av olika slag. Bland de vassaste Pascalvarianterna är Borland (Turbo) Pascal. Det nya mode-språket Java har vad man kallar interface (gränssnitt), en sorts signaturer (en slags minsta gemensam nämnare, alla måste uppfylla minst de stipulerade kraven). En modul som implementerat ett gränssnitt tvingas att tillhandahålla åtminstone den i gränssnittet stipulerade funktionalteten. Viktigast är abstraktion och gömmande av detaljer. Man gömmer detaljer för att slippa veta mer än hur man använder modulen och för att undvika fatala misstag. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

55 Polymorfi Polymorfi (många skepnader) är egentligen en mängd olika abstraktionsmekanismer och en indelning skulle kunna se ut så här: polymorfi universell ad hoc parametrisk inclusion coersion overloading DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

56 Parametrisk polymorfi Parametrisk polymorfi är svår att skilja från generik, men det finns en skillnad. Parametrisk polymorfi betyder att en funktion (procedurer) accepterar ett antal olika typer av parametrar, medan en generisk funktion/procedur/datastruktur vid instansiering ger en ny funktion/procedur/datastruktur som är specialanpassad till den aktuella typen. Parametrisk polymorfi har vi i fördefinierade funktioner i många språk, där den aktuella typen ger val av funktion som till slut hanterar problemet. Write/WriteLn i Pascal accepterar godtyckliga utskrivbara värden, vilka konverteras till text och skrivs på fil/skärm. En hel mängd med olika procedurer finns i bakgrunden för att konvertering skall ske på rätt se. Parametrisk polymorfi finns i ML, som accepterar godtyckliga typer som argument till funktioner om ingen bearbetning av värden sker. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

57 Parametrisk polymorfi... Exempel: fun id x = x; fun first (x,y) = x; fun first (x::y) = x; fun second (x,y) = y; fun second (x::y) = y; DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

58 Generik Generiska funktioner och procedurer och även typer finns i många språk, t.ex. Java och ADA. Enklast är ett exempel med en tänkt utbyggnad av Pascal. FUNCTION id <T>(i: T): T; VAR t1 : T; BEGIN id := i END; FUNCTION f<t>(i:t; PROCEDURE todo(var j:t)): T; BEGIN todo(i); f := i END; DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

59 Generik... FUNCTION intid := id <Integer>; FUNCTION RealF := f <Real>; DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

60 Monomorfi Parametrisk polymorfi innebär abstraktioner där information om parametertypen inte är uttömmande. Motsatsen till polymorfi är monomorfi. Monomorfi föreligger i statiskt typade språk som Pascal, C. Undantag är fördefinierade procedurer och funktioner som abs, eof, eoln (Pascal). Övriga statiskt typade språk har i huvudsak monomorfi, men många har mekaismer för parametrisk polymorfi. Tex har Simula viss, begränsad parametrisk polymorfi, ML kräver inte att en typ skall bestämmas om inte typberoende operationer ingår i algoritmen till en funktion, Scheme har parametrisk polymorfi (define (f x) (cond ((atom? x)...) ((number? x)...) (...))) DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

61 Overloading (överladdning) samma namn för många olika funktioner. Systemet avgör vilken funktion som skall anropas baserat på indatatypen. T. ex. fungerar +, och på alla typer av tal (i de flesta av språken) och mängder (Pascal). I vissa varianter av Standard ML finns overloading (NJSML) och det finns även i ADA, C++ och Java. Exempel: (Pascal) heltalsnegering (int int) flyttalsnegering (real real) heltalssubtraktion (int int int) flyttalssubtraktion (real real real) mängddifferens (set set set) DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

62 Omgivningsoberoende överladdning Inparametrarnas typ avgör vilken funktion som anropas vid varje enskilt anrop. Tillämpas i t.ex. Pascal och ML, exempel: Abs(i) (int int) Abs(r) (real real) Omgivningsberoende överladdning: I ADA gäller normalt för / att (int int int) eller (real real real) beroende på inparametertyperna men man kan i någon omgivning deklarera / t ex som (int int real) varvid denna lokala överladdning av funktionen anropas istället för (int int int)-varianten i den aktuella omgivningen. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

63 Parametriserade typer Parametriserade typer är typer som accepterar typer som argument och genererar en ny typ. Parametriserade typer är abstraktioner av abstraktioner, vars instanser är abstraktioner där en familj av typer ersatts av en typ. Det som ligger närmast till hands för exempel är de generiska listorna i ML: type intlist = int list; där intlist är en instans av den inbyggda generiska listtypen a list. I Java finns det inbyggt i språket att alla datatyper ärver typen Object. Allt är m a o subtyper (i någon mening) till denna typ. Fullt polymorfa lagringsstrukturer tillhandahålls för listor, träd, stackar, köer,... DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

64 Typinferens Monomorf typinferens: fun even n = n mod 2 = 0; fun plus m n = m + n; int bool even n? = plus mod 0 int m? n + n 2 int m n DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

65 Typinferens... fun incr m = m + 1; incr m + m 1 Polymorf typinferens = operationen OK trots att entydig info om inparametertyper inte finns, men det finns en entydig relation mellan in- och utdata. Exempel: fun id x = x; fun fst x y = x; id fst x x x y x DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

66 Typkonvertering måste ske (om möjligt) då en operation kräver en viss typ av argument men erhåller ett värde av en annan typ. Pascal har automatisk konvertering från integer till real i ett antal fall. Exempel: VAR r: Real; i: Integer; i := 12; r := i / 5; Här konverteras i s värde till 12.0 och 5 till 5.0 eftersom flyttalsdivision kräver att operanderna är flyttal. Resultatet läggs i variabeln som r refererar till. i := r / 5 blir fel eftersom 5 konverteras till 5.0 och r / 5.0 ger ett flyttal, men någon automatisk konvertering till heltal finns inte i Pascal. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

67 Typkonvertering... I Simula hade det gått bra eftersom resultatet trunkeras till ett heltal. I ML går ingendera varianten eftersom typkonvertering sker explicit: real int genom floor som trunkerar och int real genom funktionen real. I ADA finns en mängd funktioner med samma namn som typen för konvertering till en viss typ, men ingen implicit konvertering. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

68 Subtyper Subtyper finns i en mängd olika skepnader. Den enklaste är den som finns i Pascal. TYPE weekday = (mon, tue, wed, thu, fri, sat, sun); workday = mon.. fri; weekendday = sat.. sun; natural = 0.. MaxInt; smallint = ; smallletter = a.. z ; Man kan i Pascal definiera subtyper till alla diskreta typer. Alla sådana blir då delintervall av den ursprungliga domänen. Alla operationer som finns i den ursprungliga typen finns även tillgängliga för subtypen. Man säger att subtypen ärvt alla operationer. I vissa språk kan man lägga till attribut (egenskaper) och modifiera operationsmängden (Simula, Smalltalk, C++, Borland Pascal, Eiffel, m fl). DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68

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

Abstraktion. procedurabstraktion. DA2001 (Föreläsning 26) Datalogi 1 Hösten / 27 Abstraktion Inom programmeringstekniken används två former av abstraktion dataabstraktion och programabstraktion. Dataabstraktion handlar om aggregat för att gruppera samhörande data. Programabstraktion

Läs mer

Abstraktion. Abstraktion... Abstraktion... Abstraktion...

Abstraktion. Abstraktion... Abstraktion... Abstraktion... Abstraktion Inom programmeringstekniken används två former av abstraktion dataabstraktion och programabstraktion. Dataabstraktion handlar om aggregat för att gruppera samhörande data. Programabstraktion

Läs mer

Deklarationer/definitioner/specifikationer

Deklarationer/definitioner/specifikationer Deklarationer/definitioner/specifikationer Konstantdefinitioner innebär att ett namn binds och sätts att referera till ett värde som beräknas vid kompileringen/interpreteringen och som under programmets

Läs mer

Polymorfi (många skepnader) är egentligen en mängd olika abstraktionsmekanismer och en indelning skulle kunna se ut så här: polymorfi

Polymorfi (många skepnader) är egentligen en mängd olika abstraktionsmekanismer och en indelning skulle kunna se ut så här: polymorfi Polymorfi Polymorfi (många skepnader) är egentligen en mängd olika abstraktionsmekanismer och en indelning skulle kunna se ut så här: polymorfi universell ad hoc parametrisk inclusion coersion overloading

Läs mer

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

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem. Omgivningar Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem. (define (sqrroot c) (define (fixpoint guess c eps) (define

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

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

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

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

Imperativ programmering. Föreläsning 2

Imperativ programmering. Föreläsning 2 Imperativ programmering 1DL126 3p Föreläsning 2 Imperativ programmering Kännetecken för imperativa språk: Programmet består av en serie instruktioner. Olika språk har olika uppsättningar av instruktioner.

Läs mer

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

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt Programspråk uppkallat efter Blaise. Skapat av Nicolaus Wirt. Avsett för undervisning för att lära ut typbegreppet och styrstrukturer. Har fått stor spridning p.g.a. enkelhet och att kompilatorn varken

Läs mer

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

Pascal... Pascal. Pascal... Pascal... ... Programspråk uppkallat efter Blaise. Skapat av Nicolaus Wirt. Avsett för undervisning för att lära ut typbegreppet och styrstrukturer. Har fått stor spridning p.g.a. enkelhet och att kompilatorn varken

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

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

Datalogi, grundkurs 1. Lösningsförslag till tentamen Datalogi, grundkurs 1 Lösningsförslag till tentamen 10 december 2008 1. a. Man testar med typiska värden, gränsvärden och värden utanför specificerad indatavärdemängd. Helst med alla permutationer av

Läs mer

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python Repetition i Python 3 Exemplen fac Orginalet I Scheme använde vi rekursion för all slags repetition. Efterom Scheme är ett funktionellt språk återsänder alla språkkonstruktioner ett värde men i Python

Läs mer

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse GRUNDER I VHDL Innehåll Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse KOMPONENTMODELL Modell för att beskriva komponenter Externt interface Intern funktion

Läs mer

Funktionell programmering DD1361

Funktionell programmering DD1361 Funktionell programmering DD1361 Tupler Två eller fler (men ändligt) antal element. Elementen kan vara av olika typer. Ex: (1,2) :: (Integer, Integer) (( 2, hejsan ), True) ::? Tupel med två element ->

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.

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

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

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

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

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Lab 04 Muterbara strukturer, omgivningar TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden

Läs mer

Tentamen Grundläggande programmering

Tentamen Grundläggande programmering Akademin för Innovation Design och Teknik Tentamen Grundläggande programmering Kurskod: DVA103 Datum 2012-06-11 Tid 14.10 16.30 Examinator: Lars Asplund Maxpoäng: 48 Betygsgränser: Betyg 3: 20 Betyg 4:

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

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

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet Repetition Introduktion Repetition i Exemplen fac Orginalet I Scheme använde vi rekursion för all slags repetition. Efterom Scheme är ett funktionellt språk återsänder alla språkkonstruktioner ett värde

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

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

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

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK FÖRELÄSNING 2 Viss repetition av Fö1 Rekursivt fallanalys Rekursiva beskrivningar BEGREPP HITTILLS Konstant, Namn, Procedur/Funktion, LAMBDA, Parameter, Argument, Kropp, Villkor/Rekursion, Funktionsanrop,

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

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

DD1361 Programmeringsparadigm. Carina Edlund

DD1361 Programmeringsparadigm. Carina Edlund DD1361 Programmeringsparadigm Carina Edlund carina@nada.kth.se Funktionell programmering Grundidéen med funktionell programmering är att härma matematiken och dess funktionsbegrepp. Matematiskt funktionsbegrepp

Läs mer

Imperativ programmering. Föreläsning 4

Imperativ programmering. Föreläsning 4 Imperativ programmering 1DL126 3p Föreläsning 4 Imperativa paradigmer Ostrukturerad programmering Strukturerad programmering Procedurell programmering Objektorienterad programmering Klassbaserad programmering

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

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

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

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

Föreläsning 6: Metoder och fält (arrays)

Föreläsning 6: Metoder och fält (arrays) TDA 545: Objektorienterad programmering Föreläsning 6: Metoder och fält (arrays) Magnus Myréen Chalmers, läsperiod 1, 2015-2016 I (föregående och) denna föreläsning Läsanvisning: kap 2 & 13 meddelanden

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer

Läs mer

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser Introduktion till programmering Föreläsning 2: Variabler, uttryck och satser 1 1 Värden De grundläggande saker som en dator manipulerar resultaten av beräkningar kallas värden Värden vi stött på: 2 och

Läs mer

Föreläsning 9 Exempel

Föreläsning 9 Exempel Föreläsning 9 Exempel Intervallhalveringsmetoden DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 1 / 24 Föreläsning 9 Exempel Intervallhalveringsmetoden Newton-Raphsons metod DA2001 (Föreläsning 9) Datalogi

Läs mer

Typkonvertering. Java versus C

Typkonvertering. Java versus C Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då

Läs mer

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,

Läs mer

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv

Läs mer

Föreläsning 5-6 Innehåll

Föreläsning 5-6 Innehåll Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]

Läs mer

DAT043 - föreläsning 8

DAT043 - föreläsning 8 DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns

Läs mer

Imperativ programmering. Föreläsning 3

Imperativ programmering. Föreläsning 3 Imperativ programmering 1DL126 3p Föreläsning 3 Imperativa paradigmer Ostrukturerad programmering Strukturerad programmering Procedurell programmering Objektorienterad programmering Klassbaserad programmering

Läs mer

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till

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

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

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden... Föreläsning 9 Intervallhalveringsmetoden Intervallhalveringsmetoden Newton-Raphsons metod Mer om rekursion Tidskomplexitet Procedurabstraktion Representation Bra om ni läst följande avsnitt i AS: Procedures

Läs mer

Föreläsning 5: Introduktion av pekare

Föreläsning 5: Introduktion av pekare Föreläsning 5: Introduktion av pekare Det bör påpekas att det som tas upp i introduktionen inte är reella exempel på kod. Man anväder inte pekare till att peka på enstaka heltal som i exemplen nedan, men

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

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0.. Ett problem Kontrollstrukturer och er Hur sparas data T ex när man vill spara resultaten av en tävling Exempel med 3 deltagare: public class Competition private int result1; private int result2; private

Läs mer

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

Föreläsning REPETITION & EXTENTA

Föreläsning REPETITION & EXTENTA Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder

Läs mer

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

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz, Imperativ och Funktionell Programmering i Python #TDDD73 Fredrik Heintz, IDA fredrik.heintz@liu.se @FredrikHeintz Översikt Repetition: Satser och uttryck Variabler, datatyper, synlighet och skuggning Upprepning,

Läs mer

Pythons standardbibliotek

Pythons standardbibliotek Pythons standardbibliotek Python 3 skall, enligt standarddokumenten http://docs.python.org/py3k/library/index.html ha stöd för vissa funktioner, typer och datastrukturer Så länge man håller sig till detta

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer Exempel for (int antal=; antal < 75; antal++) System.out.println (antal); Arrayer for (int num=5; num

Läs mer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man

Läs mer

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

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck. DAT 060: Introduktion till (funktions)programmering. Jacek Malec m. fl. www.cs.lth.se/home/jacek Malec/dat060 Idag: 1. Kursens innehåll 2. Kursens organisation 3. Programmeringsspråket Scheme 4. Introduktion

Läs mer

Föreläsning 3: Booleans, if, switch

Föreläsning 3: Booleans, if, switch TDA 545: Objektorienterad programmering Föreläsning 3: Booleans, if, switch Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Påminnelse om klasser och objekt Boll boll1 = new Boll(5,12); skapar ett nytt

Läs mer

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.axelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

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

Arrayer. results

Arrayer. results Arrayer 85 Arrayer Deklarerar utrymme för många variabler i en enda deklaration Array (fält) Varje värde har ett numeriskt index i Java indexeras en array med N element med indexen till N-1 Exempel: 1

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

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i

Läs mer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i

Läs mer

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada Datastrukturer Vad är en datastruktur? Vad är en datatyp? Primitiva datatyper i Java Icke-primitiva datatyper i Java Minnesexempel med datastrukturer Vektorer i Java Erik Forslin efo@nada.kth.se Rum 1445,

Läs mer

Föreläsning 2, vecka 8: Repetition

Föreläsning 2, vecka 8: Repetition TDA 548: Grundläggande Programvaruutveckling Föreläsning 2, vecka 8: Repetition Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Idag Metoder och terminologi Referensvärden och arrays Interface och ritning

Läs mer

Sammansatta datatyper Generics: Parametrisk polymorfism

Sammansatta datatyper Generics: Parametrisk polymorfism jonas.kvarnstrom@liu.se 2017 Sammansatta datatyper Generics: Parametrisk polymorfism Listor och arrayer 2 Enligt TDDD73: Många språk har både listor och arrayer även Java och Python! Exakta definitioner

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

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

Variabler och konstanter

Variabler och konstanter Variabler och konstanter Deklareras automatisk när man stoppar in data i dem. X = 7 Y = A Z = Kalle Definieras av att de har: ett namn (X) en datatyp (Integer) ett värde (t.ex. 7) Lagras i datorns minne!

Läs mer

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

Grundläggande datalogi - Övning 1

Grundläggande datalogi - Övning 1 Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b

Läs mer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon

Läs mer

Variabler, värden och typer

Variabler, värden och typer Variabler, värden och typer Viktigt att förstå på djupet: För programmering i många språk, t.ex. Java För kommande objektorientering! TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Fråga kommentera

Läs mer

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och Innehåll u OOP snabbintroduktion u Datatyper u Uttryck u Satser u Arv (intro) u Programvaruutveckling och programmering u Klassdesign och metodik (UML, CRC) u Arv, polymorfi och dynamisk bindning u Fält

Läs mer

Tentamen i. TDDA 69 Data och programstrukturer

Tentamen i. TDDA 69 Data och programstrukturer 1 Linköpings tekniska högskola Institutionen för datavetenskap Anders Haraldsson Tentamen i TDDA 69 Data och programstrukturer Torsdag den 14 januari 2009, kl 14-18 Hjälpmedel: Inga. Poänggränser: Maximalt

Läs mer

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition): Översikt Motivering Syntax och semantik Imperativa språkets byggstenar och Python Datatyper Tilldelning och uttryck Kontrollstrukturer (på satsnivå) Subprogram Relaterade avsnitt: PL 3.1-3.2, 5.1-5.3,

Läs mer

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn. Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

Läs mer

Variabler, värden och typer

Variabler, värden och typer Variabler, värden och typer Viktigt att förstå på djupet: För programmering i många språk, t.ex. Java För kommande objektorientering! jonas.kvarnstrom@liu.se 2017 Fråga kommentera avbryt! Intro till variabler

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

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