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.

Relevanta dokument
Deklarationer/definitioner/specifikationer

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

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

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

I dag: Blockstruktur, omgivningar, problemlösning

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

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

Föreläsning 5: Introduktion av pekare

Föreläsning 6: Introduktion av listor

Tentamen Grundläggande programmering

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

Programmering A. Johan Eliasson

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

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

Objektorienterad Programmering (TDDC77)

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Objektorienterad Programmering (TDDC77)

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

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

Poster. Vi har ofta behov av att behandla klumpar av data som i sig är inhomogena men sett över ett helt register har klumparna lika struktur.

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

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

Föreläsning 3-4 Innehåll

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

Pascal. Vi har ofta behov av att behandla klumpar av data som i sig är inhomogena men sett över ett helt register har klumparna lika struktur.

Poster... Poster. Poster... Poster...

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

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

Imperativ programmering. Föreläsning 2

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

Funktioner, Procedurer och Parametrar. Funktioner, Procedurer och Parametrar... Funktioner, Procedurer och Parametrar procedurspecifikation

Exempel på ett litet Ada-program

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

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

Objektorientering: Lagring, räckvidd och livstid

KOMPLETTERANDE HEMTENTAMEN TDDB53

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

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

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

Kontinuerliga listor. Fält (listor) Kontinuerliga listor... Kontinuerliga listor...

TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

Typkonvertering. Java versus C

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Våra enkla funktioner eller procedurer

Visual Basic, en snabbgenomgång

SMD 134 Objektorienterad programmering

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

Sista delen av kursen

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

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

F4. programmeringsteknik och Matlab

Föreläsning 5-6 Innehåll

Objektorienterad programmering Föreläsning 6. Mer om klasser och typer Namnrymder Inkapsling Synlighet Statiska variabler Statiska metoder

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

TDIU01 - Programmering i C++, grundkurs

KOMPLETTERANDE HEMTENTAMEN TDDB53

Objektorienterad programmering i Java

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

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Grundkurs Programmering

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

Classes och Interfaces, Objects och References, Initialization

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Objektorientering: Lagring och livstid

Objekt och klasser - Introduktion

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

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Sökning och sortering

Föreläsning REPETITION & EXTENTA

Procedurer och villkor

Tommy Färnqvist, IDA, Linköpings universitet

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

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

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

KOMPLETTERANDE HEMTENTAMEN 2 TDDB53

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

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

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Sista delen av kursen

Tentamen OOP

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Föreläsning 9 Exempel

Några saker till och lite om snabbare sortering

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Programmeringsteknik med C och Matlab

Java, klasser, objekt (Skansholm: Kapitel 2)

kind spelling Scanning

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

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

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Variabler, värden och typer

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

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Standardfilerna Input och Output

Standardfilerna Input och Output. Filer... Filer... vanlig utbyggnad för ökad dynamik. Filer... filtyper

Transkript:

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 (goodenough? x c eps) (< (abs (- (* x x) c)) eps)) (if (goodenough? guess c eps) guess (fixpoint (/ (+ guess (/ c guess)) 2.0) c eps))) (fixpoint 1.0 c 0.000000001)) DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 1 / 20

sqrroot c fixpoint guess, c, eps goodenough? x, c, eps fixpoint 1.0 c 0.000000001 DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 2 / 20

I en omgivning A syns det som är deklarerat i A och A:s globala omgivningar, men inte det som deklarerats i lokala omgivningar inuti A Lexikalt scope innebär att det endast är den deklarerade blockstrukturen som avgör vilka namn som är tillgängliga och vad de betyder. Om man däremot har dynamiskt scope så avgörs vilka namn som är tillgängliga av anropskedjan DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 3 / 20

PROGRAM scope(output); VAR i: Integer; PROCEDURE p; BEGIN i := Succ(i) END; PROCEDURE q(procedure h); VAR i: Integer; BEGIN i := 10; h; WriteLn(i: 1); END; BEGIN q(p); END. DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 4 / 20

Ett namn som inte är deklarerat i den egna omgivningen representerar en fri variabel. En fri variabel har en mening bara i samband med den yttre omgivningen. Om variabelns värde varierar mellan evalueringar av den lokala omgivningen så kommer resultatet eventuellt att variera. Försök att skriva programmen så att de enda fria namnen är sådana som representerar konstanter samt procedurer och funktioner utan fria variabler. DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 5 / 20

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 25) Datalogi 1 Hösten 2010 6 / 20

Typdeklarationer Vi har redan konstaterat att Pascals typspecifikationer 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 H varutyp *) type avd = int * string; (* avd.nummer H 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 25) Datalogi 1 Hösten 2010 7 / 20

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; Men (igen) Pascal har namnekvivalens: TYPE stack = RECORD store: ARRAY [1..max] OF integer; END; storage = ARRAY [1..max] OF integer; är store och storage av olika typ. DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 8 / 20

För att få likhet i typavseende: TYPE storage = ARRAY [1..max] OF integer; stack = RECORD store: storage; END; 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 25) Datalogi 1 Hösten 2010 9 / 20

Variabeldeklarationer En variabel är ett lagringsutrymme. Man måste skilja på statiska och dynamiska variabler. DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 10 / 20

Statiska variabler Deklaration av en statisk variabel innebär att ett namn definieras, binds till aktuell omgivning och sätts att referera till ett minnesutrymme som reserveras för variabeln. Statiska variabler och namnen som refererar till dem försvinner då deras omgivning avvecklas. VAR x: Integer; ok: Boolean;... x := 3.5; ok := x < 2.0; x ok x ok...... 3.5 false DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 11 / 20

Dynamiska variabler Skapas och utplånas genom speciella kommandon, försvinner inte då motsvarande omgivning försvinner och måste därför antingen förstöras innan omgivningen avvecklas eller måste en yttre referens sättas att referera till variabeln. TYPE xref = ˆx; x = RECORD val : Integer END; VAR myx: xref; FUNCTION newx(i:integer):xref; VAR tmp: xref; BEGIN New (tmp); tmpˆ.val := i; newx := tmp; END; DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 12 / 20

I Pascal måste dynamiska variabler utplånas genom kommandot dispose(namnsomrefererartillvariabeln); Scheme har endast statiska variabler. I t ex Java, C och C++ har man möjlighet till både statisk och dynamisk referens till både variabler, konstanter, objekt och procedurer. Resultatet är att man kan hantera värden både på meta -nivå och på objektnivå. DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 13 / 20

Samtidiga deklarationer kan ske i vilken ordning som helst, och alltså får deklarationerna inte vara beroende av varandra. I Pascal finns inte möjlighet till samtidiga deklarationer, men det kan åstadkommas i Scheme (define (f x y) (let ((a (+ 1 (* x y))) (b (* 1 y))) (+ (* x a a) (* y b) (* a b)))) DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 14 / 20

Sekvensiella deklarationer kan vara beroende av varandra. Det är vanligast med sekvensiella deklarationer. I Pascal är det enda möjligheten. FUNCTION f(x, y: Integer): Integer; VAR a, b: Integer; BEGIN... END; (define (f x y) (define (a (+ 1 (* x y)))) (define (b (- 1 y))) (+ (* x a a) (* y b) (* a b))) (define (f x y) (let* ((a (+ 1 (* x y))) (b (- 1 y))) (+ (* x a a) (* y b) (* a b)))) DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 15 / 20

Rekursiva deklarationer är deklarationer som görs i termer av sig själva. I Pascal och Scheme kan procedur-(funktions-) deklarationer vara rekursiva. I ML kan även typdefinitioner vara det. FUNCTION f(n: Integer): Integer; BEGIN IF n = 0 THEN f := 1 ELSE f := n * f(n - 1) END; DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 16 / 20

Ömsesidig rekursion utgör ett problem i Pascal. För att klara av det finns ett direktiv FORWARD. FUNCTION g(n: Integer): Integer; FORWARD; FUNCTION f(n: Integer): Integer; BEGIN IF n = 0 THEN f := 1 ELSE f := g(n-1) END; FUNCTION g; BEGIN IF n = 0 THEN g := 0 ELSE g := f(n-1) END; DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 17 / 20

Ömsesidig rekursion är inte ett problem i scheme eftersom det inte finns krav på att namn skall existera förrän vid exekvering. (define (f n) (if (= n 0) 0 (g (- n 1)))) (define (g n) (if (= n 0) 1 (g (- n 1)))) DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 18 / 20

Ett namn deklareras i början av ett block och syns sedan inom det aktuella blocket så länge detta existerar. Då blocket avvecklas försvinner namnet. Detta gäller alla namn. Om namnet refererar till en statisk variabel försvinner även variabeln. Om namnet refererar till en dynamisk variabel fortsätter variabeln att existera och ta upp minne tills den explicit städas bort eller om, som i ML, det finns en skräpsamlare som kastar bort allt som inte längre refereras till, namn, variabler, omgivningar. I Pascal är ett program, en procedur eller en funktion uppbyggd med ett huvud (program/procedur/funktionshuvud) + ett block. DA2001 (Föreläsning 25) Datalogi 1 Hösten 2010 19 / 20

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 25) Datalogi 1 Hösten 2010 20 / 20