imperativ programmering - uppsala university
TRANSCRIPT
![Page 1: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/1.jpg)
Imperativ programmering
1DL126 3p
Föreläsning 3
![Page 2: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/2.jpg)
Imperativa paradigmer
Ostrukturerad programmering Strukturerad programmering
Procedurell programmering Objektorienterad programmering
Klassbaserad programmering Prototypbaserad programmering Konceptorienterad programmering
Aspektorienterad programmering Attributorienterad programmering ... och så vidare ...
![Page 3: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/3.jpg)
Procedurell programmering
Bryter upp problemen i mindre delar och löser var del för sig med hjälp av procedurer.
Funktioner, delprogram (sub program), rutiner, metoder.
![Page 4: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/4.jpg)
Procedurell programmering
Procedurer Kan anropas när som helst under
en programkörning. Kan anropas av vilken kod som
helst - även av andra procedurer eller av proceuren själv (rekursion).
![Page 5: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/5.jpg)
Procedurell programmering
Fördelar: Återanvända kod. Lättare att hålla ordning på
kontrollflödet än med goto. Möjligheten att skriva modulär kod. Proceduren blir en fristående
kodbit med ett enkelt gränssnitt.
![Page 6: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/6.jpg)
Procedurell programmering
För att betraktas som ett procedurellt programmeringsspråk ska språket ha stöd för konceptet procedur och en syntax för att definiera den.
Ada, ALGOL, BASIC, C, C++, ColdFusion, COBOL, Component Pascal, D, Delphi, ECMAScript (ActionScript, DMDScript, JavaScript, JScript), Forth, Fortran, Lasso, Linoleum, Maple, Mathematica, MATLAB, Modula-2, Oberon, Occam, M, Pascal, Perl, PHP, PL/C, Python, PL/I, Rapira, VBScript
![Page 7: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/7.jpg)
FORTRAN
FORTRAN - FORmula TRANslation
John Backus (IBM) 1952 - 54 Första högrenivåspråket som
blev allmänt använt. Mycket kontroversiellt!
"Kompilerande språk är ineffektiva!"
![Page 8: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/8.jpg)
FORTRAN
Fortran2003Nov 2004
Fortran 951997
Fortran 901992
FORTRAN 771978
FORTRAN 661966
Används fortfarande för högprestandaberäkningar.
![Page 9: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/9.jpg)
FORTRAN
Fortran77 är i storlek som C Endast statisk minnesallokering. Inga pekare. Endast fördefinierade typer.
Implicit typning (arv från F66) Variabelnamn som inleds med bokstäverna
i,j..n är heltal, annars flyttal. Fast kodform (hålkort!)
Alla rader är maximalt 72 tecken. Positionerna 1 till 5 är reserverade för
rubriker. Position 6 markerar "continuation". Positionerna 7 till 72 FORTRAN-kod.
![Page 10: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/10.jpg)
FORTRAN
F90, F95 - modernt programmeringsspråk. Egna typdefinitioner. Dynamisk minneshantering. Pekare. Överlagring av operatorer.
Fortran95 “bugfix” för Fortran90.
Mest kommersiella kompilatorer men ett par open source-varianter finns. http://gfortran.org http://www.g95.org
![Page 11: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/11.jpg)
FORTRAN
Tidiga versioner låg nära hårdvaran. Endast register - ingen stack. Minnet betraktas som en array.
Datatyper: Integer, Real, Complex, Double, Bool Arrayer, Strängar Filer
![Page 12: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/12.jpg)
FORTRAN
Ett program består av ett huvudprogram och ett antal underprogram. De kompileras var för sig och länkas samman när programmet körs - Länkningsfel!
F66 bygger mest på goto F77 Erbjuder mer instruktioner för
kontrollflöde, tex "conditionals".
![Page 13: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/13.jpg)
FORTRAN
DO motsvarar "for", dvs den räknar upp ett steg per varv i loopen.
Ingen "while". Underprogrammets namn betraktas som
en variabel för returvärde.
![Page 14: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/14.jpg)
FORTRAN
Ett typo...
do 10 i = 1,100 do 10 i = 1.100
... sägs ha varit orsak till att en rymdfärja exploderat vid start.
do <variable> = <start>,<stop>,<step>
![Page 15: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/15.jpg)
FORTRAN
PROGRAM MAINPARAMETER (maxSIZ=99)REAL A(MAXsiz)
10 READ (5,100,END=999) K100 FORMAT(I5)
IF (K.LE.0 .OR. K.GT.MAXSIZ) STOPREAD *,(A(I),I=1,K)PRINT *,(A(I),I=1,K)PRINT *,'SUM=',SUM(A,K)GO TO 10
999 PRINT *, "All Done"STOPEND
![Page 16: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/16.jpg)
FORTRAN
C UNDERPROGRAM SUMMAFUNCTION SUM(V,N)REAL V(N)SUM = 0.0DO 20 I = 1,NSUM = SUM + V(I)
20 CONTINUERETURNEND
![Page 17: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/17.jpg)
FORTRAN / Pascal
(* UNDERPROGRAM SUMMA *)FUNCTION SUM(V:ARRAY OF
REAL; N:INTEGER):REAL;VAR I : INTEGER;VAR S : REAL;BEGIN S := 0; FOR I := 1 TO N DO S := S + V[I]; SUM := S;END;
C UNDERPROGRAM SUMMAFUNCTION SUM(V,N)
REAL V(N)SUM = 0.0DO 20 I = 1,N
SUM=SUM+V(I) 20 CONTINUE
RETURNEND
![Page 18: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/18.jpg)
Parameteröverföring
Skilj på två viktiga koncept: Formella parametrar -
Parameternamnen som deklareras i proceduren.(V och N - L-value)
Faktiska parametrar - Värdena som skickas till proceduren.(Arrayen i A och storleken i K - R-value)
![Page 19: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/19.jpg)
Parameteröverföring
Vid anropet listas de faktiska parametrarna i samma ordning som de formella parametrarna står i procedurdeklarationen:
procedure foo(ett : Integer, tva : Character)
foo(48,'Z');
![Page 20: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/20.jpg)
Parameteröverföring
procedure foo(ett : Integer; tva : Character)foo(tva => 'Z', ett => 48);
procedure foo(ett : Integer := 0; tva : Character := 'A')foo(tva => 'Z');
Ada: Namngiven parameteröverföring.
Standardargument ("default-värden")
![Page 21: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/21.jpg)
Parameteröverföring
Call-by-value: Parametrarna (argumenten)
beräknas innan anrop. Resultatet kopieras till
procedurens egen minnesarea. FORTRAN, Pascal, C, Ada, C++,
Java (enkla typer)
![Page 22: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/22.jpg)
Call-by-value
0 1 2 3 4 5 6 7 8 9 10 11 12
38 38 ...
y x
procedure foo(x : Integer)
var y : Integer := 38;foo(y);
![Page 23: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/23.jpg)
Call-by-value
0 1 2 3 4 5 6 7 8 9 10 11 12
38 27 65 ...
y z x
procedure foo(x : Integer)
var y : Integer := 38;var z : Integer := 27;foo(y + z);
![Page 24: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/24.jpg)
Parameteröverföring
Call-by-reference: Den formella parametern binds
till samma minnesposition som den faktiska parametern använder. (Aliasing)
Den faktiska parametern måste ha ett L-värde - Det måste finnas en plats i minnet att referera till.
![Page 25: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/25.jpg)
Call-by-reference
0 1 2 3 4 5 6 7 8 9 10 11 12
H e j ...
text str
void foo(String str)
String text = "Hej";foo(text);
Java använder alltid call-by-reference för objekt.
![Page 26: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/26.jpg)
Call-by-reference
0 1 2 3 4 5 6 7 8 9 10 11 12
48 0 ...
y x
void foo(int* x)
int y = 48;foo(&y);
C kan simulera call-by-reference med pekare.
![Page 27: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/27.jpg)
Call-by-reference
0 1 2 3 4 5 6 7 8 9 10 11 12
42 35 42 ...
x y cbr cbv
procedure foo(cbv : Integer; var cbr : Integer)
var x : Integer := 42;var y : Integer := 35;foo(x,y);
Pascal erbjuder båda varianterna (var)
![Page 28: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/28.jpg)
Parameteröverföring
Call-by-reference är att föredra när man skickar stora datastrukturer som argument - det tar tid att kopiera.
Call-by-value är effektivare för enkla typer och små datastrukturer som används väldigt mycket i proce-duren. Att dereferera en pekare kräver en extra instruktion.
![Page 29: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/29.jpg)
Parameteröverföring
Call-by-reference kan innebära en säkerhetsrisk. Om proceduren ändrar i datat så kommer förändringen att överleva proceduren.
![Page 30: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/30.jpg)
Call-by-name
Call-by-name: De formella parametrarna byts
textuellt ut mot de faktiska.Textuellt = Ordagrant textutbyte.
Algol 60, Haskell, Makron i C
![Page 31: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/31.jpg)
Call-by-name
C-makro byter ut texten på riktigt:
#define add(x,y) x+y
z = add(45,6); z = 45+6;
Implementationen under ytan i t.ex. Haskell använder funktionspekare.
![Page 32: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/32.jpg)
Returvärden
Funktioner returnerar värden. Procedurer returnerar INTE värden.
(undantaget call-by-reference) Pascal erbjuder både procedurer och
funktioner. C och Java m.fl. har bara funktioner men
simulerar procedurer med void.
![Page 33: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/33.jpg)
Omgivning - Scope
En omgivning är en del av programmet där procedurer och variabler är tillgängliga.
Omgivningar kan vara nästlade. Det som definieras i den yttre omgivningen är tillgängligt i den inre, men inte tvärt om!
![Page 34: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/34.jpg)
Omgivningar
namespace N { // namespace scope class C { // class scope void f (bool b) { // function scope if (b) { // unnamed scope ... } } };}
C++
Namnrymd: Grupperar namn
Klass: Medlemsvariabler och funktioner
Funktion: Körbar kod
Anonymt: Kan skapas i körbar kod
![Page 35: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/35.jpg)
Omgivningar
class Javaklass { private int a; public int b; void foo(int c) { int d; }}
a: Tillgänglig i hela klassenb: Tillgänglig i hela klassen och i andra klasserc & d: Endast lokalt tillgängliga i metoden foo
![Page 36: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/36.jpg)
Den lokala deklara-tionen av xskuggar dentidigare.
Omgivningar
void foo() { int x = 42;
{ int x = 38; print(x); } print(x);}
Programmetskriver ut:3842
Skuggning:
![Page 37: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/37.jpg)
Omgivningar
Statisk omgivning - Definieras av programmkoden. Omsluts normalt med { ... } alt.BEGIN ... END.
Dynamisk omgivning - Den senast deklarerade versionen gäller.
![Page 38: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/38.jpg)
Omgivningar
int x = 0;int f () { return x; }int g () { int x = 1; return f(); }
Statisk omgivning: g returnerar 0.Dynamisk omgivning: g returnerar 1.
![Page 39: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/39.jpg)
Omgivningar
Dynamisk omgivning farligt och ovanligt.
Valbart i t.ex. Common LISP och Perl.
![Page 40: Imperativ programmering - Uppsala University](https://reader030.vdocuments.net/reader030/viewer/2022012622/61a2270d48152537706367f3/html5/thumbnails/40.jpg)
Obligatorisk uppgift
Skriv ner det viktigaste / det du minns bäst från dagens föreläsning