Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Like dokumenter
Dagens tema: Kjøresystemer II

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

Plan: Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) Funksjonelle språk. Innføring i ML. typer enkle funksjoner (Fortsetter med ML i to uker til)

Kap 6.4: Typesjekking Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 19. og 23. mars Dagens tema: Typer og typesjekking

Semantisk Analyse del III

Datatyper og typesjekking

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

Datatyper og typesjekking

Datatyper og typesjekking

Kjøresystemer. Hva er et kjøresystem? Den abstrakte maskinen SIMPLESEM (2.6) Klassifisering av språk: Parametre (2.7.7) Statiske språk (

Runtime-omgivelser Kap 7 - II

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Runtimesystemer - II. Parameteroverføring Call by value Call by reference Call by value-result Call by name INF 3110/ INF

2012 2a. C rc; void main() { rc = new C (); rc.m2(); } } INF 3110/ INF /28/13 1

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

Datatyper og typesjekking

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Runtime-omgivelser Kap 7 - I

Runtimesystemer Kap 7 - I

Anatomien til en kompilator - I

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

UNIVERSITETET I OSLO

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Diverse eksamensgaver

Dagens tema: Sjekking

Runtimesystemer Kap 7 - I

Fiktiv eksamensbesvarelse IN 211 høsten 2001

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF2810: Funksjonell Programmering

Anatomien til en kompilator - I

INF2810: Funksjonell Programmering

IN 147 Program og maskinvare

IN 147 Program og maskinvare

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

2 Om statiske variable/konstanter og statiske metoder.

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

IN 147 Program og maskinvare

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

INF1000 Prøveeksamen Oppgave 7 og 9

Hjemmeeksamen 2 i INF3110/4110

INF2810: Funksjonell Programmering

Variable Man kan bruke variable i ML. ML (kap 5 og 6) Nye datatyper INF3110/4110 INF3110/4110 INF3110/4110 INF3110/4110. Variable i ML.

Forelesere. Velkommen til programmeringsspråkenes verden IN211. Praktiske opplysninger. Faglige forutsetninger. Ragnhild Kobro Runde

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

Løsnings forslag i java In115, Våren 1996

Dagens tema. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

UNIVERSITETET I OSLO

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Dagens tema: 12 gode råd for en kompilatorskriver

INF2810: Funksjonell Programmering. En metasirkulær evaluator

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Obligatorisk oppgave 1 INF1020 h2005

Forelesning inf Java 5

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Forelesning inf Java 5

Dagens tema: Datastrukturer

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

Enkle generiske klasser i Java

6108 Programmering i Java. Leksjon 5. Tabeller. Roy M. Istad 2015

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF Notater. Veronika Heimsbakk 10. juni 2012

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Introduksjon til objektorientert programmering

IN 211 programmeringsspråk H 99

KONTINUASJONSEKSAMEN I FAG ALGORITMER OG DATASTRUKTURER

UNIVERSITETET I OSLO

Det finnes ingenting. som kan gjøres med interface. men som ikke kan gjøres uten

2 Om statiske variable/konstanter og statiske metoder.

TDT4110 IT Grunnkurs Høst 2015

Eksamensoppgaver 2014

Transkript:

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) Funksjonelle språk (Ghezzi&Jazayeri kap.7 frem til 7.4) Neste uke: ML Ark 1 av 16 Forelesning 16.10.2000

Parameteroverføring Parametre plasseres blant de lokale variablene. Det er imidlertid ulike teknikker for hva som skal plasseres der: Referanseparametre Kopiparametre Verdiparametre Resultatparametre Verdi-resultatparametre Navneparametre Definisjoner Formell parameter er den parameteren som forekommer i rutinedeklarasjonen. Aktuell parameter er den parameteren som forekommer i rutinekallet. Forelesning 16.10.2000 Ark 2 av 16

Referanseparametre Her sendes det over en referanse til hvilken lagercelle parameteren ligger i. Eksempel int a = 1; void f(int x) { x=x+1; } void main() { f(a); } ip f main C set D[D[0]+3], D[D[D[0]+3]]+1 set 1, D[0] set 0, D[D[0]+1] jump D[D[1]] set D[1], 11 set D[1]+1, D[0] set D[1]+2, D[0] set D[1]+3, 2 set 0, D[1] set 1, D[1]+4 jump 0 halt 0 1 2 3 4 5 6 7 8 9 10 11 D «current» = 6 «free» = 10 a = 1 «return» = 0 «dyn link» = 0 «stat link» = 0 «return» = 11 «dyn link» = 3 «stat link» = 3 x = 2 «globale» main f Referanseparametre brukes i C (for matriser), FORTRAN og Simula (for matriser og tekster). Forelesning 16.10.2000 Ark 3 av 16

Verdiparametre Her sender man med en kopi av parameteren. Det betyr at hvis den endres i rutinen, vil den aktuelle parameteren forbli uendret. ip f main C set D[0]+3, D[D[0]+3]+1 set 1, D[0] set 0, D[D[0]+1] jump D[D[1]] set D[1], 11 set D[1]+1, D[0] set D[1]+2, D[0] set D[1]+3, D[2] set 0, D[1] set 1, D[1]+4 jump 0 halt 0 1 2 3 4 5 6 7 8 9 10 11 D «current» = 6 «free» = 10 a = 1 «return» = 0 «dyn link» = 0 «stat link» = 0 «return» = 11 «dyn link» = 3 «stat link» = 3 x = 1 «globale» main Verdiparametre brukes i Java, C (for alt unntatt matriser) og Simula (for enkle variable). f Forelesning 16.10.2000 Ark 4 av 16

Resultatparametre Dette er det «motsatte» av verdiparametre: Den lokale kopien i rutinen kopieres over til den aktuelle parameteren når rutinen returnerer. ip f main C set D[0]+3, D[D[0]+3]+1 set 1, D[0] set 0, D[D[0]+1] jump D[D[1]] set D[1], 10 set D[1]+1, D[0] set D[1]+2, D[0] set 0, D[1] set 1, D[1]+4 jump 0 set 2, D[D[1]+3] halt 0 1 2 3 4 5 6 7 8 9 10 11 D «current» = 6 «free» = 10 a = 1 «return» = 0 «dyn link» = 0 «stat link» = 0 «return» = 10 «dyn link» = 3 «stat link» = 3 x =?? «globale» main f Forelesning 16.10.2000 Ark 5 av 16

Verdi-resultatparametre Dette er en kombinasjon av de to foregående, og effekten er nesten den samme som referanseparametre. ip f main C set D[0]+3, D[D[0]+3]+1 set 1, D[0] set 0, D[D[0]+1] jump D[D[1]] set D[1], 11 set D[1]+1, D[0] set D[1]+2, D[0] set D[1]+3, D[2] set 0, D[1] set 1, D[1]+4 jump 0 set 2, D[D[1]+3] halt 0 1 2 3 4 5 6 7 8 9 10 11 12 13 D «current» = 6 «free» = 10 a = 1 «return» = 0 «dyn link» = 0 «stat link» = 0 «return» = 11 «dyn link» = 3 «stat link» = 3 x = 1 «globale» main f Forelesning 16.10.2000 Ark 6 av 16

Navneparametre Dette er en gammel metode som minner om bruk av makro: «Selve uttrykket» sendes over, og det beregnes på nytt hver gang det brukes, og svarer til tekstlig substitusjon. Et kjent eksempel på hva man kan gjøre med navneparametre, er «Jensen s device». Hvis vi kjører programmet på neste ark, får vi følgende utskrift: Summen 1-10 av x^2: 385 Summen av a: 29 Antall oddetall i a: 3 Forelesning 16.10.2000 Ark 7 av 16

begin integer procedure Jensen(x, i, n); name x, i, n; integerx,i,n; begin integer index, sum; for index := 1 step 1 until n do begin i:=index; sum := sum + x; end for; Jensen := sum; end Jensen; integer ix, res1, res2, res3; integer array a(1:5); res1 := Jensen(ix*ix, ix, 10); OutText("Summen 1-10 av x^2: "); OutInt(res1,0); OutImage; a(1) := 7; a(2) := -1; a(3) := 11; a(4) := 8; a(5) := 4; res2 := Jensen(a(ix), ix, 5); OutText("Summen av a: "); OutInt(res2,0); OutImage; res3 := Jensen(if Rem(a(ix),2)<>0 then 1 else 0, ix, 5); OutText("Antall oddetall i a: "); OutInt(res3,0); OutImage; end Forelesning 16.10.2000 Ark 8 av 16

Navneparametre: Eksempel PROC Bytt(x,y) BEGIN VAR tmp := x; x := y; y :=tmp END Se på kallet Bytt(i, a[i]). Hvis parametrene overføres ved name kan kallet forstås slik: BEGIN VAR tmp := i; i := a[i]; a[i] := tmp END som ikke helt er det samme som å bytte om to tall! Forelesning 16.10.2000 Ark 9 av 16

Aliasing To variable (uttrykt i samme programenhet) kalles aliaser hvis deres verdier ligger på samme sted i lageret. Alias kan oppstå ved bruk av pekere: For eksempel, p1 : NEW C(...); p2 : p1 referanse-overføring: Gitt PROC p(x,y); BEGIN..x...y...END så vil kallet p(w, w) gi opphav til alias. name-overføring: for eksempel som over. ikke-lokale variable: Gitt PROC p(x); BEGIN... w...x...end så vil kallet p(w) gi opphav til alias. Verdi-parametre gir ikke opphav til alias. Forelesning 16.10.2000 Ark 10 av 16

Referanse-parametre: Alias-eksempel PROC Bytt2(x,y) kall: Bytt2(a,b) BEGIN a b x := x+y; a+b b y := x-y; a+b a x := x-y; b a END Denne vil vanligvis bytte om to tall (uten bruk av ekstra variable). Se på kallet Bytt(a, a). Hvis parametrene overføres ved referanse får vi: verdi på x ======================= a x := x+y; a+a y := x-y; 0 x := x-y; 0 som ikke helt er det samme som å bytte om to tall! Forelesning 16.10.2000 Ark 11 av 16

Prosedyrer som parametre BEGIN VAR c:int;... PROC A(x:Int,y:Bool); BEGIN...x...y..c..END; PROC B(p(Int,Bool),x:Int); BEGIN... CALL p(x,false)...end; CALL B(A,0); END IN 211 Programmeringsspråk Merk: Her er p en formell parameter. Siden parametertypene til p er eksplisitt gitt, kan vi gjøre type-analyse av kallet på p. Problem: Hvordan lage kode for kallet på p? Vi kjenner ikke starten på koden som skal utføres, ikke lengden av aktiveringsblokken som skal opprettes, og ikke statisk link. Løsning: Disse tre informasjonsbitene sendes som parametre! Dvs. en prosedyreparameter blir implementert ved et slikt trippel. Forelesning 16.10.2000 Ark 12 av 16

Typer En (data-)type består av: en verdimengde tilhørende operasjoner for å lage, se på og endre slike verdier Eksempel: Type: boolean Verdimengde: {true, false} Operatorer: NOT, AND, OR... Programmeringsspråk har vanligvis en del predefinerte typer, samt mekanismer for å lage mer komplekse datatyper fra disse. Forelesning 16.10.2000 Ark 13 av 16

Spesielle TYPE-mekanismer predefinerte typer, ofte integer, real, character, string oppramstyper, eks. {mandag, tirsdag, onsdag,...} intervall-typer, f.eks. tallene fra 1 til 100 lister, sekvenser predefinert i LISP, ML tabeller, arrayer gjerne predefinert i imperative språk Forelesning 16.10.2000 Ark 14 av 16

Generelle TYPE-mekanismer produkt-typer med flere komponenter Pascal/Ada: record C/C++: structure Java/Simula: klasser union-typer gir flere alternativer Eksempel (i ML-syntaks): datatype boolean = true false; Pascal/Ada: variant record C/C++: union Java/Simula: super-/subklasser rekursive typer inneholder noe av sin egen type Eksempel: liste av heltall class Node { int verdi; Node neste; } Node liste; parametriserte typer muliggjør datastrukturer over vilkårlige element -typer Eksempel: en generell liste Forelesning 16.10.2000 Ark 15 av 16

Abstrakte datatyper Innkapsling: Kan definere verdimengden og de tilhørende funksjonene i én modul. Beskyttelse: Skjule visse funksjoner og variable i en modul slik at de ikke kan brukes utenfor modulen. Eksempel: Rasjonale tall som data-type: Type RAT = modulebegin # Verdimengde/datastruktur: t, n : Int # Tilhørende funksjoner: FUNC mult(a,b:rat):rat == RETURN((a.t*b.t),(a.n*b.n))... endmodule RAT Forelesning 16.10.2000 Ark 16 av 16