Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset) Mail: blom@chalmers.se Handledare : Rasmus Knutsson Mail: farmand@student.chalmers.se Föreläsning 1 Katarina Blom 1 2 Kursens hemsida http://www.cse.chalmers.se/edu/course/dit011/ Titta på kurshemsidan ofta Kursens organisation Undervisningen består av: Åtta föreläsningar - Stöd för inläsning av boken. - Inget för Java-experten. Cirka en gruppövning per vecka - Nybörjarkaraktär på dessa. Labhandledning - Labhandledare finns i labsal på labtiderna (se schema) redo att svara på frågor. Kursbok Cay Horstmann: Big Java 3rd edition - Det finns en tunnare variant av boken (Java Concepts 5ht edition) som innehåller en delmängd av kapitlen ur Big Java. Om du bara tänker läsa denna kurs så räcker den tunnare varianten alldeles utmärkt. Om du följer datavetenskapligt program (och alltså även tänker läsa fortsättningskursen) är Big Java boken förmodligen att föredra) - Det finns mycket Javalitteratur. Har du redan en bok om Java? Visa den för mig, den kanske täcker innehållet i kursen (isåfall ska du ju inte köpa en till bok). - Boken finns förmodligen att få tag på begagnad (fast då i äldre versioner). 3 4
Examination För att få godkänt på kursen måste följande moment vara godkända: Tre laborationer - Utföres i grupper om 2 personer. - Redovisas enligt respektive labpm. Skriftlig tentamen - Huvudsakligen programmeringsuppgifter - En (inbunden) bok om Java är tillåten som hjälpmedel på tentan. Kursens mål och innehåll Kursen ska ge en introduktion till objektorienterad programmering Du lär dig att utforma, implementera, testa och dokumentera enkla program Som programspråk används Java. De centrala delarna i språket behandlas. 5 6 Java Programspråket Java, utvecklat på Sun 1995, blev på några månader det hetaste språket i datavärlden och miljarder dollar har redan satsats i utveckling av mjukvara och hårdvara som bygger på Java. Java är (helt) objektorienterat. Java är plattformsoberoende (dvs ett program skrivet på en Pc går lika bra att köra på tex. en Mac) Körbara javaprogram kan läggas ut på webbsidor Java har standardbibliotek för nätprogrammering och grafiska användargränssnitt. (Bland annat) plattformsoberoendet gör exekveringen långsam. 7 Varför Java? (Relativt) enkel och ren språkdesign (en programmerare som är van vid C/C++ känner sig hemma i Java, eftersom mycket av syntaxen är hämtad från C). Stor växande anvädning. Bra, gratis implementationer. Mycket stödmaterial på webben. 8
Att programmera Att programmera är att instruera en dator att göra det vi vill att den ska göra. Instruktionerna sätter man ihop till ett program. Man skriver programmet i något programspråk (i vårt fall Java). För att kunna köra programmet måste man kompilera det, dvs Java-instruktionerna måste översättas till instruktioner som processorn (på den dator man kör på) kan tolka. Objektorienterad programmering Ett objektorienterat program är uppbyggt av en uppsättning objekt som interagerar (samverkar) med varandra. Ett objektorienterat program byggs upp av delar, klasser, efter de begrepp som hanteras. Ett objekt är en instans, eller ett exemplar, av en klass. Programmets uppgift är att manipulera objekten 9 10 Objekt Ett objekt karaktäriseras av Vad man kan göra med det (vilka metoder ett objekt erbjuder) Vilka interna tillstånd objektet kan vara i (vilka tillståndsvariabler objektet har). Klass En beskrivning eller mall över hur objekten ska fungera. Ett exempel: En räknare Vilket internt tillstånd har en räknare? Vilka operationer kan man utföra på en räknare, dvs vad kan man göra med den? 11 12
En klassdeklaration för en räknare public class Counter{ private int val; Att förstå en klassdeklaration public class Counter { public Counter(){ val = 0; public void incr(){ val = val+1; public void reset(){ val = 0; public int getval(){ return val; /* Tillståndsvariabel */ private int val; /* Konstruktor */ public Counter(){ val = 0; /* Metoder */ public void incr(){ val = val+1; public void reset(){ val = 0; public int getval(){ return val; 13 14 Klasser och objekt Att använda klassen Counter En klass är en mall från vilken man kan skapa många objekt. Varje nytt objekt har sin egen uppsättning tillståndsvariabler. /* Skapa ett objekt */ /* c är nu namnet på det skapade objektet. Namnet används när man vill anropa objektets metoder: */ /* Påverka objektets tillstånd */ /* Avläsa objektets tillstånd */ Var skriver man den här koden? 15 16
Programmets startkod main public class RäkneExempel{ public static void main(string[] ar){ Hela programmet public class Counter{ private int val; public Counter(){ val = 0; public void incr(){ val = val+1; public void reset(){ val = 0; public int getval(){ return val; public class RäkneExempel{ public static void main(string[] ar){ 17 18 In- och ut- matning Det finns fördefinerade klasser och objekt i Java. Bland annat finns två fördefinerade objekt för in- och ut- matning: System.in är ett objekt av klassen InputStream, knutet till tangentbordet. System.out är ett objekt av klassen PrintStream, knutet till bildskärmen. Lägg till en utskrift public class RäkneExempel{ public static void main(string[] ar){ System.out.println(värde); 19 20
Kompilering och exekvering >> javac Counter.java >> javac RäkneExempel.java >> java RäkneExempel 2 >> ls Counter.java Counter.class RäkneExempel.java RäkneExempel.class Primitiva typer Java innehåller ett litet antal primitiva (inbyggda) typer, bland annat: int för heltal. double för flyttal. boolean för sanningsvärden. char för tecken. Alltså: Skriv java-koden i lämpliga filer (med suffixet.java). Kompilera programmet med kompilatorn javac Kör programmet med kommandot java 21 22 Aritmetik Konstanter - av typerna int och double: 3-25 3.1415926 3e-10 - av typerna char och boolean: K 5 true false Operatorer som i Haskell, utom - Heltalsdivision, som skrivs / - Modulo operatorn som skrivs % Variabler Variabeldeklaration typnamn variabelnamn; eller typnamn variabelnamn = initialvärde; int val = 53; double epsilon = 1e-5; boolean stängd; Variabler är namn på minnesceller: var 53 epsilon 0.00001 stängd 23 24
Typkonvertering int m = 3; int n = 5; double x = 2.5; x = x*m; Värdet av m konverteras till double innan multiplikationen utföres. x = m/n; Värdet av högerledet konverteras till double före tilldelning. Obs heltalsdivision. n = x; Typfel! double kan inte lagras i heltalsvariabel. Klasser är också typer Klassdeklaration Klassnamn var; eller Klassnamn var = new Klassnamn(); (Anropet till höger om likhetstecknet är egentligen ett konstruktoranrop ) String str = new String(); c och str kallas referensvariabler. String är en fördefinerad klass. Referensvariabler refererar till en plats i minnet där objekten finns lagrade. 25 26 Textsträngar I Java finns en fördefinerad klass som heter String. Objekt av denna klass är textsträngar. String namn = new String( Lotta ); Några metoder som finns definerade för String-objekt: namn.length(); //antal tecken i namn namn.charat(2); //tecknet på pos. 2 namn.touppercase();//strängen LOTTA För String-objekt finns också en operator för strängkonkatenering +: String par = Anders och +namn; 27