Imperativ programmering. Föreläsning 3

Relevanta dokument
Imperativ programmering. Föreläsning 2

Imperativ programmering. Föreläsning 4

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDIU01 - Programmering i C++, grundkurs

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDDC77 Objektorienterad Programmering

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

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

Imperativ programmering

Klassdeklaration. Metoddeklaration. Parameteröverföring

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Tentamen Grundläggande programmering

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

Repetition C-programmering

Objektorienterad programmering

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

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)

Det finns många flaggor till g++,

En kort text om programmering i C.

TDIU01 - Programmering i C++, grundkurs

Deklarationer/definitioner/specifikationer

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Metoder. Inledande programmering med C# (1DV402)

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Introduktion C-programmering

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

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

F4. programmeringsteknik och Matlab

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

1 Funktioner och procedurell abstraktion

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

Språket Python - Del 2 Grundkurs i programmering med Python

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:

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

Sista delen av kursen

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

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Programmering B med Visual C

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

Sista delen av kursen

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

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?

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Sammansatta datatyper Generics: Parametrisk polymorfism

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

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.

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

Objektorienterad Programmering (TDDC77)

Planering Programmering grundkurs HI1024 HT 2014

TDDE10 TDDE11, 725G90. Gemensam kurswebsida på:

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Objektorienterad Programmering (OOP) Murach s: kap 12-16

TDP002 - Imperativ programmering

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

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

Funktionens deklaration

Introduktion till programmering. Programspråk och paradigmer

Föreläsning 1 & 2 INTRODUKTION

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson.

Föreläsning 6: Introduktion av listor

Tommy Färnqvist, IDA, Linköpings universitet

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

grundläggande C++, funktioner m.m.

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

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

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Exempel på typer av datorspråk EXCEL

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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.

C++ - En introduktion

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

Grundläggande datalogi - Övning 1

Typkonvertering. Java versus C

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Program & programmering

Övningsuppgifter kapitel 8

TDDC76 - Programmering och Datastrukturer

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Föreläsning 3-4 Innehåll

Programmeringsteknik med C och Matlab

Statistik över heltal

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Transkript:

Imperativ programmering 1DL126 3p Föreläsning 3

Imperativa paradigmer Ostrukturerad programmering Strukturerad programmering Procedurell programmering Objektorienterad programmering Klassbaserad programmering Prototypbaserad programmering Konceptorienterad programmering Aspektorienterad programmering Attributorienterad programmering... och så vidare...

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.

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).

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.

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

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!"

FORTRAN Används fortfarande för högprestandaberäkningar. 1966 1978 1992 1997 Nov 2004 FORTRAN 66 FORTRAN 77 Fortran 90 Fortran 95 Fortran2003

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.

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

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

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".

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.

FORTRAN do <variable> = <start>,<stop>,<step> 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.

FORTRAN PROGRAM MAIN PARAMETER (maxsiz=99) REAL A(MAXsiz) 10 READ (5,100,END=999) K 100 FORMAT(I5) IF (K.LE.0.OR. K.GT.MAXSIZ) STOP READ *,(A(I),I=1,K) PRINT *,(A(I),I=1,K) PRINT *,'SUM=',SUM(A,K) GO TO 10 999 PRINT *, "All Done" STOP END

FORTRAN C UNDERPROGRAM SUMMA FUNCTION SUM(V,N) REAL V(N) SUM = 0.0 DO 20 I = 1,N SUM = SUM + V(I) 20 CONTINUE RETURN END

FORTRAN / Pascal C UNDERPROGRAM SUMMA FUNCTION SUM(V,N) REAL V(N) SUM = 0.0 DO 20 I = 1,N SUM=SUM+V(I) 20 CONTINUE RETURN END (* 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;

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)

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');

Parameteröverföring Ada: Namngiven parameteröverföring. procedure foo(ett : Integer; tva : Character) foo(tva => 'Z', ett => 48); Standardargument ("default-värden") procedure foo(ett : Integer := 0; tva : Character := 'A') foo(tva => 'Z');

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)

Call-by-value procedure foo(x : Integer) var y : Integer := 38; foo(y); 0 1 2 3 4 5 6 7 8 9 10 11 12 38 38... y x

Call-by-value procedure foo(x : Integer) var y : Integer := 38; var z : Integer := 27; foo(y + z); 0 1 2 3 4 5 6 7 8 9 10 11 12 38 27 65... y z x

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.

Call-by-reference void foo(string str) String text = "Hej"; foo(text); 0 1 2 3 4 5 6 7 8 9 10 11 12 H e j... text str Java använder alltid callby-reference för objekt.

Call-by-reference void foo(int* x) int y = 48; foo(&y); 0 1 2 3 4 5 6 7 8 9 10 11 12 48 0... y x C kan simulera call-byreference med pekare.

Call-by-reference procedure foo(cbv : Integer; var cbr : Integer) var x : Integer := 42; var y : Integer := 35; foo(x,y); 0 1 2 3 4 5 6 7 8 9 10 11 12 42 35 42... x y cbr cbv Pascal erbjuder båda varianterna (var)

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 proceduren. Att dereferera en pekare kräver en extra instruktion.

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.

Call-by-name Call-by-name: De formella parametrarna byts textuellt ut mot de faktiska. Textuellt = Ordagrant textutbyte. Algol 60, Haskell, Makron i C

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.

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.

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!

Omgivningar C++ namespace N { class C { void f (bool b) { if (b) {... } } }; } Namnrymd: Grupperar namn Klass: Medlemsvariabler och funktioner Funktion: Körbar kod Anonymt: Kan skapas i körbar kod // namespace scope // class scope // function scope // unnamed scope

Omgivningar class Javaklass { private int a; public int b; void foo(int c) { int d; } } a: Tillgänglig i hela klassen b: Tillgänglig i hela klassen och i andra klasser c & d: Endast lokalt tillgängliga i metoden foo

Omgivningar Skuggning: void foo() { int x = 42; Programmet skriver ut: 38 } { int x = 38; print(x); } print(x); 42 Den lokala deklarationen av x skuggar den tidigare.

Omgivningar Statisk omgivning - Definieras av programmkoden. Omsluts normalt med {... } alt. BEGIN... END. Dynamisk omgivning - Den senast deklarerade versionen gäller.

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.

Omgivningar Dynamisk omgivning farligt och ovanligt. Valbart i t.ex. Common LISP och Perl.

Obligatorisk uppgift Skriv ner det viktigaste / det du minns bäst från dagens föreläsning