Lagring... DA2001 (Föreläsning 23) Datalogi 1 Hösten / 68
|
|
- Eva Lundqvist
- för 7 år sedan
- Visningar:
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 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 merAbstraktion. 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 merDeklarationer/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 merPolymorfi (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 merOmgivningar. 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 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 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 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 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 merImperativ 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 merPascal. 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 merPascal... 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 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 merDatalogi, 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 merRepetition 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 merGRUNDER 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 merFunktionell 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 merFö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 merFö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 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 merPython. 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 merPython. 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 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 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 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 merKompilering 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 merTDDC74 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 merTentamen 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 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 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 merRepetition 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 merLite 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 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 merBEGREPP 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 merProgrammera 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 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 merDD1361 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 merImperativ 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 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 merProgrammering 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 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 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 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 merFö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 merFö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 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 merFö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 merIntroduktion 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 merFö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 merTypkonvertering. 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 merFö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 merArv. 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 merFö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 merDAT043 - 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 merImperativ 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 merObjektorienterade 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 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 merFö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 merFö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 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 merObjektorienterad 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 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 merEDAA20 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 merEtt 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 merI 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 merObjektorienterad 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 merTDIU01 - 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 merFö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 merImperativ 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 merPythons 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 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 merExempel. 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 merFö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 merSprå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 merFö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 merEDAA20 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 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 merArrayer. 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 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 merIntroduktion. 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 merDagens 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 merDatastrukturer. 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 merFö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 merSammansatta 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 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 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 merVariabler 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 merFö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 merGrundlä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 merStatic 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 merVariabler, 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 merInnehå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 merTentamen 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 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 merNå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 merClasses 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 merVariabler, 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 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 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 mer