Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klassen Mio ffl Särfall ffl Interface Kungl. Tekn. Högskolan Förel 1, bild 2 ffl Abstraktion ffl Datastrukturer ffl Algoritmer Kursinnehåll För att klara kursen måste du bli godkänd på följande moment: ffl Sju labbar (LAB1; 2 p). ffl Tentamen på algoritmer och datastrukturer (TEN1; 2 p). Kungl. Tekn. Högskolan Förel 1, bild 3 Lärare Namn Datorpost Kursledare Ann Pan panda@nada.kth.se Föreläsare Felipe Wersén felipe@nada.kth.se Examinator Henrik Eriksson henrik@nada.kth.se Övn. grupp 1 Martin Gülich d99-mgl@nada.kth.se Övn. grupp 2 Elina Eriksson elina@kth.se Övn. grupp 3 Ann Pan panda@nada.kth.se Kungl. Tekn. Högskolan Förel 1, bild 4 Föreläsningarna 1 Introduktion, repetition 2 Java: Objekt, klasser, arv 3 Komplexitet, sökning 4 Abstrakta datatyper, stack, kö, lista 5 Rekursion 6 Binärträd och generella träd, binära sökträd 7 Problemträd: breddenförst och djupetförst 8 Sortering 9 Hashning, Bloomfilter 10 Prioritetskö, heap, heapsort 11 Textsökning, automater, KMP 12 Syntax, syntaxträd, rekursiv medåkning 13 Repetition inför tentan
Kungl. Tekn. Högskolan Förel 1, bild 5 Enkelt Javaprogram Här följer ett enkelt Javaprogram med exempel på ffl en klass ffl en metod ffl en parameter av vektortyp ffl tre olika typer av kommentarer ffl en variabel av primitiv datatyp ffl en slinga ffl metodanrop /** Skriver ut en multiplikationstabell */ class Exempel1 /* Vi väljer sjuans tabell */ int nr = 7; System.out.print("Tabell " + nr + ": "); for (int j = 1; j <= 10; j++) System.out.print(j*nr + " "); System.out.println(); // main // class Exempel1 Kungl. Tekn. Högskolan Förel 1, bild 6 Exempel körning /** Skriver ut en multiplikationstabell */ class Exempel1 /* Vi väljer sjuans tabell */ int nr = 7; System.out.print("Tabell " + nr + ": "); for (int j = 1; j <= 10; j++) System.out.print(j*nr + " "); System.out.println(); // main // class Exempel1 yellow08> ls Exempel1.java yellow08> javac Exempel1.java yellow08> ls Exempel1.class Exempel1.java yellow08> java Exempel1 Tabell 7: 7 14 21 28 35 42 49 56 63 70 yellow08> Kungl. Tekn. Högskolan Förel 1, bild 7 Referenser Kungl. Tekn. Högskolan Förel 1, bild 8 Referenser (forts.) ffl En referensvariabel lagrar den minnesadress där ett objekt finns. ffl Värdet null markerar att referensvariabeln är tom. ffl De tre operatorerna == och = och. kan användas på referensvariabler. ffl a == b blir true om a och b refererar till samma objekt. ffl a = b; tilldelar a b:s värde, dvs gör så att a kommer att referera till samma objekt som b. ffl a.färg plockar fram värdet på a:s instansvariabel färg ffl a.måla() anropar a:s metod måla() class Person String namn; public Person(String namn) this.namn = namn; // Person() // class Person class Referenser /* Jämförelse av referenser */ Person a = new Person("Andersson"); Person b = new Person("Andersson"); if (a == b) System.out.println("Refererar a och b " + "till samma objekt?"); /* Jämförelse av strängar */ String anamn = a.namn; String bnamn = b.namn; if (anamn.equals(bnamn)) System.out.println("a och b har samma namn!"); /* Tilldelning ändrar referensen */ a = b; if (a == b) System.out.println("Nu refererar a och b " + "till samma objekt!"); //class Referenser yellow08> java Referenser a och b har samma namn! Nu refererar a och b till samma objekt! yellow08>
Kungl. Tekn. Högskolan Förel 1, bild 9 Nyckelordet static static betyder att efterföljande metod eller variabel finns vid programstart i ett exemplar. Annars skapas objekten med new. Kungl. Tekn. Högskolan Förel 1, bild 10 Klassen Mio Klassen Mio förenklar in- och utmatning. Man kan antingen ffl kopiera filen Mio.java från kursbiblioteket ffl skapa en symbolisk länk till filen Mio.class close(bufferedinputstream in) Stäng den öppnade filen efter läsning eof() Returnera true om ctrl-d står i tur från tangenterna eof(bufferedinputstream in) Returnera true om filen är slutläst eoln() Returnera true om retur står i tur från tangenterna eoln(bufferedinputstream in) Returnera true om retur står i tur att läsas i filen getchar() Läs ett tecken från tangenterna och returnera det getchar(bufferedinputstream in) Läs ett tecken från filen och returnera det Kungl. Tekn. Högskolan Förel 1, bild 11 Klassen Mio (forts.) Kungl. Tekn. Högskolan Förel 1, bild 12 Klassen Mio (forts.) static double static double static int static int getdouble() Läs decimaltal avgränsat av blanka från getdouble(bufferedinputstream in) Läs ett decimaltal avgränsat av blanka från filen och returnera det getint() Läs ett heltal avgränsat av blanka från getint(bufferedinputstream in) Läs ett heltal avgränsat av blanka från filen och returnera det getline() Läs en rad från tangenterna, glufsa radbytet, returnera raden getline(bufferedinputstream in) Läs en rad från filen, glufsa radbytet, returnera raden getword() Läs ett ord avgränsat av blanka från getword(bufferedinputstream in) Läs ett ord avgränsat av blanka från filen och returnera det nextchar() Tjuvtitta på nästa tecken från nextchar(bufferedinputstream in) Tjuvtitta på nästa tecken i filen och returnera det BufferedInputStream openread(string s) Öppna filen för läsning static PrintWriter openwrite(string s) Öppna filen för skrivning skipblanks() Glufsa eventuella blanka på tur att läsas från tangenterna skipblanks(bufferedinputstream in) Glufsa eventuella blanka på tur att läsas i filen
Kungl. Tekn. Högskolan Förel 1, bild 13 Användning av Mio Alla metoder i Mio är static-deklarerade, så man behöver inte skapa något Mio-objekt för att anropa dom. Exempel: class Hej System.out.print("Vad heter du? "); System.out.flush(); String namn = Mio.getLine(); System.out.println("Hej " + namn + "!"); // main // class Hej Kungl. Tekn. Högskolan Förel 1, bild 14 Särfall (Exceptions) Särfall används för att hantera speciella händelser, t ex att det blir fel. I Mio finns metoden openread() som öppnar en fil för läsning. Om filen inte existerar kommer konstruktorn FileInputStream() att kasta ett särfall. Så här fångas det upp: public static BufferedInputStream openread(string s) try return new BufferedInputStream(new catch (IOException e) FileInputStream(new File(s))); System.err.println("Kan inte öppna " + s); return null; Kungl. Tekn. Högskolan Förel 1, bild 15 Att hantera särfall Kungl. Tekn. Högskolan Förel 1, bild 16 Att generera särfall ffl Kod som skulle kunna generera särfall bör man placera i ett try-block. ffl try-blocket följs av ett catch-block där man skriver den kod som ska utföras då ett särfall inträffat. ffl Om man vill kan man låta catch-blocket följas av ett finally-block där man skriver kod som alltid ska utföras sist. ffl Särfall är objekt och skapas med new. Exempel: Exception e = new Exception(); ffl Med satsen throw ser man till att ett särfall kastas iväg. ffl Särfallet kastas vidare tills det fångas upp av catch ffl Varje metod som kan kasta ett särfall vidare måste ha throws Exception efter parenteserna i metodhuvudet. ffl Om man inte nöjer sig med Exception så kan man deklarera sin egen särfallsklass: public class Särfall extends Exception public Särfall() super("mitt eget särfall!"); // Särfall() // class Särfall
Kungl. Tekn. Högskolan Förel 1, bild 17 Gränssnitt (interface) ffl Ett gränssnitt är en klass som bara består av konstanter och abstrakta metoder. ffl Ett gränssnitt kan användas som modell för en klass. ffl En klass som definierar alla metoder i ett gränssnitt implementerar gränssnittet. Klassen Melon lovar att implementera gränssnittet Frukt om den deklareras class Melon implements Frukt Så här kan ett gränssnitt definieras Kungl. Tekn. Högskolan Förel 1, bild 18 Övningar Övning grupp 1: mån 14/1 kl 10-12 i L52. Övning grupp 2: tis 15/1 kl 13-15 i L51. Övning grupp 3: tis 15/1 kl 13-15 i L52. Nästa föreläsning: ons 16/1 kl 15-17 i E1 (OBS!). public interface Comparable public int compareto(object o); En klass som implementerar Comparable måste definiera metoden compareto. Varför vill man använda interface? ffl Förenklar samarbetet mellan flera programmerare - man kommer först överens om hur gränssnittet ska se ut. ffl Man kan använda färdiga metoder (se t ex gränssnittet Comparator och klassen Arrays).