SMD 038 Imperativ Programmering 4 0 pong http

  • Slides: 40
Download presentation
SMD 038 Imperativ Programmering 4. 0 poäng http: //www. sm. luth. se/csee/courses/smd/038/2001/LP 1/index. html

SMD 038 Imperativ Programmering 4. 0 poäng http: //www. sm. luth. se/csee/courses/smd/038/2001/LP 1/index. html Jan-Åke Lehto janos@cdt. luth. se A 3311 (72299) http: //www. cdt. luth. se/~janos/ 1/32

SMD 038 Kursinnehåll I kursen ingår: • Fem räkneövningar • Fem duggor (quiz) •

SMD 038 Kursinnehåll I kursen ingår: • Fem räkneövningar • Fem duggor (quiz) • En laboration • Tentamen Betygskala är 5, 4, 3 eller Underkänd. För att bli godkänd krävs godkänt resultat på (min 15/25): – – Räkneövningar Duggor Laboration Tentamen Betygsgränser (x poäng): – – 100 x 90 = 5 090 > x 80 = 4 080 > x 70 = 3 070 > x = U 2/32

SMD 038 Resultat räkneövning torsdag 6/9 • Alla godkända • De grupper som inte

SMD 038 Resultat räkneövning torsdag 6/9 • Alla godkända • De grupper som inte hade alla medlemmar med fick 50% av uppnådd poäng (i det här fallet 2, 5 poäng). • De som inte gjort alla uppgifter men mer än hälften fick 3 poäng. 3/32

SMD 038 Laborationsintroduktion Introduktionen syftar till ni skall få bekanta er med de miljöer

SMD 038 Laborationsintroduktion Introduktionen syftar till ni skall få bekanta er med de miljöer ni kommar att arbeta i, samt sätta upp en miljö där ni dokumenterar ert arbete: – – – Java Development Kit (JDK) Emacs eller annan editor Arbete vid terminal (DOS) Blue. J Forte (IDE) HTML • Gör en enkel hemsida med en applet för ditt arbete i kursen, där du sedan redovisar dina övningar och laboration. • Bekanta dig med Javaomgivningen på NT och UNIX datorerna. • Lös uppgifter från boken: – t. o. m. Kapitel 3 4/32

Att lära sig programmera. . . är frusterande!!! Ett enkelt fel kan ta flera

Att lära sig programmera. . . är frusterande!!! Ett enkelt fel kan ta flera timmar att fixa! Problemet är inte att det är svårt utan att det är ett nytt sätt att tänka. Lösningen: ”Divide and Conquer” 5/32

SMD 038 Arbetstakt Håll takten! Se till att du inte kommer efter! Det är

SMD 038 Arbetstakt Håll takten! Se till att du inte kommer efter! Det är väldigt svårt att hinna ifatt! 6/32

SMD 038 Lektion • • • Variabler Typer Värden Tilldelningar Arrayer Strängar • •

SMD 038 Lektion • • • Variabler Typer Värden Tilldelningar Arrayer Strängar • • • Aritmetik Konverteringar Villkor Slingor Metoder 7/32

En klass i Java • Varje klass bör läggas i en fil för sig

En klass i Java • Varje klass bör läggas i en fil för sig public class Hello. World { String hello = ”Hello”; – Enklare att hitta – Enklare att felsöka – Enklare att förstå • En publik klass per fil! public int get. Hello() { return hello; } } • Innehåller variabler och metoder. 8/32

Vad finns i klassen? public class Test { public final static int MIN_KONSTANT =

Vad finns i klassen? public class Test { public final static int MIN_KONSTANT = 7; // Konstant private static int gemensam. Variabel = 42; // Klassvariabler public static int get. Gemensam. Variabel() { // Klassmetod return gemensam. Variabel; } public static int set. Gemensam. Variabel(int nytt. Varde) { // Klassmetod gemensam. Variabel = nytt. Varde; } public static void main(String[] arg) { // Huvudmetod } } 9/32

Vad finns i objektet? public class Test { private int min. Variabel; // Instansvariabel

Vad finns i objektet? public class Test { private int min. Variabel; // Instansvariabel // 1 per objekt public Test() { min. Variabel = 9; } // Konstruktorer public int get. Min. Variabel() { return gemensam. Variabel; } // Instansmetod // 1 per klass public int set. Min. Variabel(int nytt. Varde) {// Instansmetod min. Variabel = nytt. Varde; // 1 per klass } } 10/32

Klasser och Objekt i minnet • I minnet lagras mallen för ett objekt med

Klasser och Objekt i minnet • I minnet lagras mallen för ett objekt med allt som är gemensamt för objekt av en viss klass. – Alla metoder – Statiska variabler, tex klassvariabler och konstanter • För varje objekt av en viss typ (klass) lagras sedan enbart det som är enskilt för varje objekt – Instansvariabler 11/32

Variabler. . . speglar ett objekts tillstånd. public class Test { // Variabler av

Variabler. . . speglar ett objekts tillstånd. public class Test { // Variabler av enkel typ private int i = 8; private real r = 0. 7; private boolean b = true; . . . kan vara av enkel eller komplex typ. // Variabler av komplex typ private String hello = ”Hello”; private int[] vektor = { 1, 2 }; . . . bör inte synas utåt! } 12/32

Variabler. . . Primitiva typer • Heltal – – public class Test { //

Variabler. . . Primitiva typer • Heltal – – public class Test { // Variabler av enkel typ private int i = 8; private real r = 0. 7; private boolean b = true; byte (8 bitar) short (16 bitar) int (32 bitar) long (64 bitar) // Variabler av komplex typ private String hello = ”Hello”; private int[] vektor = { 1, 2 }; • Flyttal – float (32 bitar) – long (64 bitar) } 13/32

Variabler. . . Primitiva typer • Tecken public class Test { // Variabler av

Variabler. . . Primitiva typer • Tecken public class Test { // Variabler av enkel typ private int i = 8; private real r = 0. 7; private boolean b = true; – char (16 bitar) – unicode – ‘a’ // Variabler av komplex typ private String hello = ”Hello”; private int[] vektor = { 1, 2 }; • Sanningsvärden – boolean (8 bitar) – true – false } 14/32

Variabler. . . Variabelnamn • Måste börja med en bokstav inklusive ‘_’ och ‘$’

Variabler. . . Variabelnamn • Måste börja med en bokstav inklusive ‘_’ och ‘$’ public class Test { // Variabler av enkel typ private int i = 8; private real r = 0. 7; private boolean b = true; // Variabler av komplex typ private String hello = ”Hello”; private int[] vektor = { 1, 2 }; • Får inte vara samma som nyckelord i Java ( t. ex. int, public) } 15/32

Tilldelningar … = Ger värden till variabler • För att använda en variabel ger

Tilldelningar … = Ger värden till variabler • För att använda en variabel ger man den ett värde. • Värdet måste vara av den typ som variabeln deklarerats (i vissa fall konverteras värdet automatiskt). public class Test { // Variabler av enkel typ private int i = 8; private real r = 0. 7; private boolean b = true; // Variabler av komplex typ private String hello = ”Hello”; private int[] vektor = { 1, 2 }; } 16/32

Komplexa datatyper… Array (vektor) • En lista av värden som kan vara primitiva datatyper

Komplexa datatyper… Array (vektor) • En lista av värden som kan vara primitiva datatyper eller komplexa. • Initialiseras för – tal till 0 – sanningsvärden till false – tecken till ‘u 0000’ public class Testa. Bok{ public static void main (String[] argv) { String[][] bibliotek = new String[3][2]; // biblioteket är en lista av böcker // varje bok har en författare och titel int index=0; for (index=0; index<=1; index=index+1) { bibliotek [index] [0] = "James Gosling"; bibliotek [index] [1] = "Java Tutorial" + " part " + (index+1) ; System. out. flush(); } // for index=0; for (index=0; index<=1; index=index+1) { System. out. print ("Bok " + (index+1) + ": " + bibliotek [index] [1]); System. out. println(" skriven av " + bibliotek [index] [0]); } // for } // main } // Testa. Bok 17/32

Strängar … Ändlig följd av tecken • Dubbla citationstecken innebär sträng. • Escapesekvenser –

Strängar … Ändlig följd av tecken • Dubbla citationstecken innebär sträng. • Escapesekvenser – för att skriva ut tecken som inte kan skrivas ut i en sträng eller kan ses – n ny rad – t tabulatortecken – ” public class Test { // Variabler av enkel typ private int längd; private boolean b = true; // Variabler av komplex typ private String hello = ”Hello”; System. out. println(”Jag heter ” + ””” + ”Jan-Åke” + ”””); } 18/32

Operatorer … Operatorer arbetar på ett eller flera argument eller operander • Aritmetik –

Operatorer … Operatorer arbetar på ett eller flera argument eller operander • Aritmetik – * multiplikation – / division (OBS! Om bägge talen int så sker heltalsdivision!) – % modulo (divisionsrest) – + addition (av tal och strängar) – - subtraktion public class Test { // Variabler av enkel typ private int längd; private boolean b = true; int a = 12/9; // a = ? float a = 5. 0/9. 0; int b = 12%9; // b = ? } 19/32

Konverteringar … Implicit (automatiskt) • int a = 200; float b = a; men

Konverteringar … Implicit (automatiskt) • int a = 200; float b = a; men ej int c = b; Explicit • int c = (int) b; Tecken • char tkn = (char) a; public class Test { // Variabler av enkel typ int i = 8; real r = 0. 7; float f = i; // implicit int i 2 = (int) f; // explicit } 20/32

Metoder Funktioner. . . Procedurer. . . returnerar ett värde, tex ett objekts tillstånd.

Metoder Funktioner. . . Procedurer. . . returnerar ett värde, tex ett objekts tillstånd. . förändrar ett objekts tillstånd. Men det är inte alltid så! Försök dock ha regeln att separera på metoder som returnerar något och de som förändrar något! 21/32

Funktioner. . . returnerar ett värde. public class Test { . . . bör

Funktioner. . . returnerar ett värde. public class Test { . . . bör inte förändra tillstånd på objekt! int get. Number() { return 42; } String get. Hello() { return ”Hello. World”; } . . . bör vara korta. } 22/32

Procedurer. . . förändrar ofta ett objekts tillstånd. public class Test { private hello

Procedurer. . . förändrar ofta ett objekts tillstånd. public class Test { private hello = ”Hello”; private int number = 9; void set. Hello(String s) { hello = s; } . . . bör vara korta, precis som funktioner. void set. Number(int i) { number = i; } } 23/32

Huvudmetoder i Java. . . • . . . startar upp ett program. //

Huvudmetoder i Java. . . • . . . startar upp ett program. // Klassen Hello. World • . . . måste deklareras som ”public static void main(String[])” för att systemet skall hitta den. public class Hello. World { public static void main(String[] arg) { // Här börjar programmet } • . . . kan finnas en per klass. – Även om man inte använder dem annat än för felsökning. } • . . . körs med javakommandot. – java Hello. World 24/32

Villkorssatser if (. . . ). . . if (. . . ) {.

Villkorssatser if (. . . ). . . if (. . . ) {. . . } else {. . . } if (current. Time>rast) { open. Doors(); } else { explain. Something(); } 25/32

Villkorssatser switch (<variabel>) { case <värde> : . . . continue; // tex case

Villkorssatser switch (<variabel>) { case <värde> : . . . continue; // tex case <värde> : . . . return; // tex default : . . . } switch (antal. Lungor) { case 0 : write(”Game Over!”); return; case 1 : write(”Be careful!”); continue; default : write(”Smile!”); } 26/32

Slingor // Vid känt antal upprepningar for (<initiering>; <villkor>; <sats>) {. . . }

Slingor // Vid känt antal upprepningar for (<initiering>; <villkor>; <sats>) {. . . } // Till exempel for (int i = 0; i<10; i++) System. out. println(i); 27/32

Slingor // När antal upprepningar ej är känt, 0 eller fler while (<villkor>) {.

Slingor // När antal upprepningar ej är känt, 0 eller fler while (<villkor>) {. . . } // Till exempel while (!file. is. Full()) file. write(”SMD 038 var här och rotade. ”); 28/32

Slingor // När antal upprepningar ej är känt, 1 eller fler do {. .

Slingor // När antal upprepningar ej är känt, 1 eller fler do {. . . } while (<villkor>); // Till exempel do { file. write(” SMD 038 var här och rotade. ”); } while (!file. is. Full()); 29/32

KISS Keep It Simple, Stupid! • Det funkar bättre ju enklare du gör det!

KISS Keep It Simple, Stupid! • Det funkar bättre ju enklare du gör det! • Börja ALLTID med någonting LITET som FUNGERAR!!! 30/32

Java - Introduktion Exempel /** * Namn calls Hej and prints the entered name

Java - Introduktion Exempel /** * Namn calls Hej and prints the entered name * Usage: java Namn <name> * * @author Jan-Åke Lehto * @version ver. 1 Sept 5 th, 2001 */ import java. io. *; class Namn { public static void main (String[] namn) { Hej. skriv(); System. out. println(" "+namn[0]); } // main } // Namn 31/32

Java - Introduktion Exempel /** * Hej prints "Hejsan!" * * @author Jan-Åke Lehto

Java - Introduktion Exempel /** * Hej prints "Hejsan!" * * @author Jan-Åke Lehto * @version ver. 1 Sept 5 th, 2001 */ import java. io. *; class Hej { public static void skriv() { System. out. println("Hejsan!"); } // skriv } // Hej 32/32

Java - Introduktion Exempel janhej-9>javac Hej. java janhej-9>javac Namn. java janhej-9>java Namn Jan-Åke janhej-9>Hejsan!

Java - Introduktion Exempel janhej-9>javac Hej. java janhej-9>javac Namn. java janhej-9>java Namn Jan-Åke janhej-9>Hejsan! janhej-9> Jan-Åke 33/32

SMD 038 Dugga måndag 10/9 • Allt material t. o. m. kapitel 3 ingår.

SMD 038 Dugga måndag 10/9 • Allt material t. o. m. kapitel 3 ingår. • Kunna visa hur ni skapar filer, kataloger, och hur ni gör från det att ni får en programmeringsuppgift till dess att den körs (exekveras). Dvs från papper till dator till körbart program. • Rita ett enkelt klassdiagram (arvsträd) baserat på Objektorienterad systemutveckling i ett nötskal (Intro till OO). • Lite om olika datatyper och vad som händer beroende på deklaration av dessa typer. 34/32

En klass är. . . en mall för att skapa objekt. 35/32

En klass är. . . en mall för att skapa objekt. 35/32

En klass och objekt. . . • Superklass: Superklass Motorfordon Subklasser: – Motorcykel –

En klass och objekt. . . • Superklass: Superklass Motorfordon Subklasser: – Motorcykel – Buss – Bil • Lastbil • Personbil u Privatbil u Taxibil • Objekt: Den roströda Saaben ABC 123 36/32

En klass och objekt. . . 37/32

En klass och objekt. . . 37/32

SMD 038 Frågor? 38/32

SMD 038 Frågor? 38/32

System. in Hur man läser in hela rader från terminalen. . . br är

System. in Hur man läser in hela rader från terminalen. . . br är en java. io. Buffered. Reader - läser hela rader av bokstäver från en annan Reader isr är en java. io. Input. Stream. Reader - läser UNICODE bokstäver en Input. Stream, dvs förvandlar byte till bokstäver System. in är en java. io. Input. Stream - läser bytes från terminalen import java. io; . . . Input. Stream. Reader isr = new Input. Stream. Reader(System. in); Buffered. Reader br = new Buffered. Reader(isr); String line = br. read. Line(); . . . 39/32

Paus • 3 minuter rast 40/32

Paus • 3 minuter rast 40/32