TDDE10 TDDE11, 725G90 Objektorienterad programmering i Java, Föreläsning 1 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Kursinformation Imperativa delen av Java Hello World! Gemensam kurswebsida på: www.ida.liu.se/~tdde10 1
Kurspersonal Kursledare: Erik Nilsson Examinator: Torbjörn Jonsson Kursassistent : Magnus Nielsen Labbhandledare : Henrik Fredriksson Labbhandledare : Alojz Milecevic Labbhandledare : Gustav L'Estrade Labbhandledare : Christoffer Holm Labbhandledare : Alexander Johansson Labbhandledare : Kerstin Söderkvist Kursadministratör: Madeleine Häger Dahlkvist 2
Kursinnehåll (ca) 10 Föreläsningar (20h) (8 för TDDE11) 4 Lektioner (8h) 5 Laborationer (26h i sal) Projektarbete (12h) (EJ TDDE11) Datortentamen 20h + 8h + 26h +12h = 66h schemalagd tid => mycket hemarbete! Kurslitteratur Objektorienterad Programmering och Java av Per Holm Java Direkt med Swing av Jan Skansholm 3
Kursöversikt 4
Kursöversikt Vecka Teoretiskt Praktiskt Kommentar 3 FÖ intro, 3x FÖ OOP Lab 0, Webtutorial (1 pass) 4 Lektion 1 Webtutorial, Lab 1 (1+2 pass) 5 2x FÖ Datastruktuer, Generics Lektion 2 Lab 1 (2 pass) Lab 2 (1 pass) 6 FÖ Grafik, Lektion 3, FÖ Extra Lab 2 (1 pass) Lab 3 (2 pass) 7 2 x FÖ Proj (ej TDDE11) Lab 3 (1 pass) 1 Extrapass Kravspec. skrivs 8 LE Projekt (ej TDDE11) 1 Extrapass, Projekt Kravspec. OK => börja koda 9 Projekt 5 10 Projekt, Demo Reflektion skrivs.
Lite om laborationerna Anmälan till grupp i Webreg Måste vara registrerad... Ni går i grupp A eller B Eclipse ThinLinc Muntlig demo i labsal Kodinlämning via skriptet sendlab Fusk... 6
Kursens utveckling Förra året var piloten, i år kör vi 2.0! Lite från kursutvärderingarna: PROBLEM ORSAK FÖRBÄTTRING I 2.0 Lab 1 Supertung Mycket krångel med sendlab - Svår (nytt tänk) - Labtid i underkant - Le 1 dåligt nyttjad - Webtutorialen skippades - Gjordes i fel ordning - Ovana med terminalen - En obligatorisk del blivit VG-del - Lånar ett pass från lab 2 - Le 1 kommer lite senare - Webtutorialen obligatorisk - Ingår nu i webtutorialen, före lab 1. - term_hjalp + info på hemsidan För lite hjälp på labpassen! Info om tentan bristfällig Inte tillräckligt med live-kodning - Passen utnyttjades inte maximalt. - Ekonomi... - Första gången kursen gick... - Blir ofta inte så interaktivt => passivt lärande - Uppmuntrar Copy/Paste - Bättre verkningsgrad behövs! - Mer förberedelser/hemarbete! - Info finns nu och blir samma i år (reservation för mindre förändringar). 7 - Kanske fler! Vi får se!
Nu till Java! Ett objektorienterat språk Ett av världens mest använda Senaste version 1.8 (1.7 funkar i kursen) Körs av Java Virtual Machine JVM, ej av operativsystemet + Samma program kan köras på Windows, Mac, UNIX.. - Lite långsammare än jämförbara språk 8
Imperativa delen av Java(1) Kodskelett procedure My_Program is begin -- Huvudprogram end My_Program; Källkodsfilen heter my_program.adb public class MyProgram { public static void main(string[] args) { // huvudprogram Källkodsfilen heter MyProgram.java 9
Imperativa delen av Java(2) Deklaration och tilldelning procedure My_Program is x : Integer; y : Character := 'c'; z : array(1..5) of Integer; s : String(1..5) := "hello"; begin x := 7; end My_Program; public class MyProgram { public static void main(string[] args) { // Deklaration och satser mixas int x; x = 7; char y = 'c'; int[] a = new int[5]; // index 0..4 String s = hello"; 10
Imperativa delen av Java(3) Datatyper Integer Float Boolean Character String int float, double boolean char String Primitiva Datatyper Record Array Class [], Inbyggda klasser t.ex ArrayList 11
Imperativa delen av Java(4) Datatyper i minnet... x : 1 d : b : c : TRUE 'f' s : s innehåller en referens (en pekare). 3.14 'h''e' 'l' 'l' 'o' int x = 1; double d = 3.14; boolean b = true; char c = 'f'; Primitiva Datatyper String s ; = new String( hello ); s är en variabel av klasstyp Just String går att tilldela på ett enklare sätt String s = hello ; I stort sätt alla övriga datatyper i java är av klasstyp! D.v.s. referenserna är överallt! 12
Imperativa delen av Java(5) Villkorssatser if a = 4 and b /= 3 and not Some_Bool_Func(c) then Do_Something; elsif a = 0 then Do_Something_Else; end if; if (a == 4 && b!= 3 &&!somebooleanmethod(c)) { dosomething(); else if (a == 0) { dosomethingelse(); 13
Imperativa delen av Java(6) while i < 10 loop i := Do_Something; end loop; Upprepning while (i < 10) { i = dosomething(); if (i > 10) { break; går också bra loop i := Do_Something; exit when i > 10; end loop; do { i = dosomething(); while (i <= 10); 14
Imperativa delen av Java(7) Upprepning for i in 1..10 loop Put(i); New_Line; end loop; for (int i = 0 ; i < 10 ; ++i ) { System.out.println(i); Körs 1 gång, Villkor för om loopen innan första varvet. skall fortsätta gå. Körs i slutet av varje varv. 15
Imperativa delen av Java(8) Operatorer Operator Betydelse && Logiskt AND Logiskt OR! Logiskt NOT +, -, *, / Aritmetiska operatorer % Rest vid heltalsdivision (eng. Remainder) <, <=,!=, >=, > Jämförelseoperatorer ++x, x++, --i, i-- Pre- och postinkrementering/dekrementering x += 1; 16
Imperativa delen av Java(9) Underprogram function Sum(a, b : in Integer) return Integer is begin return a + b; end Sum; procedure Print(text : in String) is begin Put_Line(text); end Print; int sum(int a, int b) { return a+b; Parametrar har alltid parametermod in void print(string text) { Returtyp System.out.println(text); Procedurer och funktioner metoder (funktioner) 17
Imperativa delen av Java(10) Exceptions raise Exception_Name; throw new ExceptionName(); throw new ExceptionName("message"); begin -- Kod som kastar exception exception when Exception_Name1 => Do_Something; when Exception_Name2 => Do_Something_Else; end try { // Kod som kastar exception catch (ExceptionName1 e) { dosomething(); catch (ExceptionName2 e) { dosomethingelse(); Vi tittar närmre på exceptions senare... 18
Imperativa delen av Java(11) Poster type My_Record_Type is record V : Datatype; -- end record; class My_Class { Datatype v; int somemethod() { // operationer på datat! Poster används för att samla data som hör ihop. Klasser används för att samla data och metoder som hör ihop. Underprogram som hanterar datat deklareras utanför posten. 19
Imperativa delen av Java(12) Paket package body Package_Name is --... end Package_Name; package packagename; //... Paket är för att samla ihop data med underprogram i en separat modul. Paket är för att samla klasser som hör ihop. Klasser ligger på egna filer. Paket är alltså mappar. Adas paket är mer som mina klasser. 20
Imperativa delen av Java(13) Inkludering av separata moduler with Package_Name; use Package_Name; import packagename.classname; import otherpackage.*; I Ada inkluderar man paket. I java inkluderar man klasser. Man kan dock ta allt från ett paket med *. 21