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

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

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

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

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Fördjupad Java. Undantagshantering. Fel

Språkkonventioner och redigering av tal.

OOP Objekt-orienterad programmering

Översikt. Skriva och läsa data. Kontrollflöde. Två sorters loopar. For-loop. For-loop

Att skriva till och läsa från terminalfönstret

JAVAUTVECKLING LEKTION 7

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

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Föreläsning 14. Filhantering

Tentamen , Grundläggande programmering i Java

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

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Inre klasser Anonyma klasser Kloning I/O-ramverket. anonyma klasser

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Föreläsnings 9 - Exceptions, I/O

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Objektorienterad programmering Föreläsning 11. Copyright Mahmud Al Hakim

DAT043 Objektorienterad Programmering

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

Objektorienterad Programmering (TDDC77)

Föreläsning 3-4 Innehåll

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

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

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Lösningsförslag till tentamen

F5 Kodkvalitet. Programutveckling sker i faser. Livscykel, vidareutveckling och återanvändning

F10 - Exceptions. ID1004 Objektorienterad programmering Fredrik Kilander

GUI Nyckelbeståndsdelar

Algoritmer. Två gränssnitt

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

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

Föreläsning 9-10 Innehåll

OOP Objekt-orienterad programmering

F2 Java I/O - strömmar Meddelandesändning med TCP

TENTAMEN OOP

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

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 Klass

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Objektorienterad Programmering DAT043. Föreläsning 4 23/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Tentamen , Introduktion till Java, dtaa98, dtea53

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 3: Booleans, if, switch

Objektorienterad programmering i Java

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

Föreläsning 6: Undantag, filhantering samt flera användbara klasser

Chapter 4: Writing Classes/ Att skriva egna klasser.

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

1 Programmering i Java. Program element - Introduktion. Exempel. Exempel. Kapitel 3:

OOP Objekt-orienterad programmering

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

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 i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

PROGRAMMERING-Java Omtentamina

Klass och metoddesign. Skapa en OO-design. Kodkonvention. Hur kan man jobba med kodkvalité? Implementation. Bra klasser är grunden

Objektorienterad Programmering (TDDC77)

Lösningar för tenta 2 DAT043,

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Lösningsförslag till tentamen

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

Del A (obligatorisk för alla)

Ingenjörsfirman Stéen Java Sida 1 av 1

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

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

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Exceptions (undantag) Murach s: kap 7

Objektorienterad Programmering (TDDC77)

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540) Ansvarig: Jan Skansholm, tel eller

F4. programmeringsteknik och Matlab

Input. Programmering. Andra källor

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Del A (obligatorisk för alla)

F2 Java I/O - strömmar Meddelandesändning med TCP EDA095 Nätverksprogrammering

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

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

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

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Transkript:

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Strömmar Filer m.m. 1

In- och utmatning Definition: En ström (en. Stream) är en sekvens av data från någon källa och/eller till något mål. In och utmatning i Java utförs av strömmar Vanliga exempel System.out (av klassen PrintStream) Vanligen kopplad till terminalen System.err (av klassen PrintStream) Vanligen kopplad till terminalen System.in (av klassen InputStream) Vanligen ihopkopplad med annan ström som formaterar indatat, ex. BufferedReader, BufferedLineReader, Scanner 2

In- och utmatning(2) Exempel // Kopplar ihop ett reader-objekt med in-ström BufferedReader input = new BufferedReader( new InputStreamReader(System.in)); // läser en rad och konverterar till int int num = Integer.parseInt(input.readLine()); 3

In- och utmatning(3) Scanner En praktisk klass för att parsa datat som kommer på en ström. // Kopplar ihop ett reader-objekt med in-ström Scanner keyboard = new Scanner(System.in); // läser en rad och konverterar till int int num = keyboard.nextint(); double d = keyboard.nextdouble(); String word = keyboard.next(); // separerat med vita tecken String line = keyboard.nextline(); // separerat med vita tecken // egentligen borde man kolla att det finns data att läsa if (keyboard.hasnext()) { // ok att läsa } 4

In- och utmatning(4) Scanner Kan hantera alla inströmmar, och även strängar String data = 6 laxar i 1 lax-ask ; Scanner scan = new Scanner(data); scan.nextint(); // läser 6 scan.next(); // läser laxar scan.nextint(); // KRASCH! i kan inte tolka som int! 5

Formatering Ofta vill man skriva ut på en viss form double d = 10.0/3.0; System.out.println(d); // 3.3333333333333335 Metoden format i PrintStream kan hjälpa till: System.out.format("Värdet %1.2f är bra grejor.\n", d); // Värdet 3,33 är bra grejor. Locale.setDefault(Locale.US); // Ändra format enl. lokalen System.out.format("The value %1.2f is indeed good.\n", d); // The value 3.33 is indeed good. 6

Formatering(2) Formatspecificerare är på följande form: %[flagga][bredd]typ Typ Förklaring Flaggor Förklaring d x f e Heltal, decimal form Heltal, hexadecimal form Reellt tal, decimalform Reellt tal, exponentform - Vänsterjusteri ng + Talets tecken skrivs ut blankt Positivt tal inleder med blank, Siffrorna grupperas tre och tre 7 Fler specificerare finns, se Javas API-dokumentation

Filer Hantera själva filen med klassen File. Filer läses som strömmar. För textfiler, använd FileReader resp. FileWriter. String filename = "myfile.txt"; File file = new File(filename); FileReader reader = new FileReader(file); Scanner scanner = new Scanner(reader); //... scanner.close(); // bra att stänga strömmar när // man är klar med dem. scanner.nextint(); // error, stängd ström. 8

Filer (2) Exempel (läsa in löner till en map) format på wages.txt: Erik 20 Torbjörn 19 Magnus 5 Rebecka 28 Scanner scanner = new Scanner(new File( wages.txt )); Map<String, Integer> map = new HashMap<>(); Kan kasta FileNotFoundException while (scanner.hasnext()) { String name = scanner.next(); int wage = scanner.nextint(); map.put(name, wage); } System.out.println( Magnus har + map.get( Magnus ) + kr i lön. ); scanner.close(); 9

Filer (3) Exempel (Skriva till en textfil) try { FileWriter writer = new FileWriter(new File("text.txt")); writer.write("stuff\n"); writer.close(); } catch (IOException ioe) { ioe.printstacktrace(); } 10

Filer (4) Exempel (Skriva till slutet av en textfil) try { FileWriter writer = new FileWriter(new File("text.txt"), true); writer.write("stuff\n"); writer.close(); } catch (IOException ioe) { ioe.printstacktrace(); } på text.txt efter tre körningar: Stuff Stuff Stuff 11

Serialisering Det går att spara objekt på fil mellan körningar Java kan platta till ett objekt till en sekvens av bytes Perfekt för att spara Använd strömmarna ObjectInputStream och ObjectOutputStream Kräver att klassen implementerar interfacet Serializable Behöver dock inte implementera några metoder. Object readobject(); // casting is needed to be usable void writeobject(object o); ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(new File("test.dat"))); out.writeobject(new Cat("Isaac", 11)); // if Serializable! out.writeobject("hejsan"); // String is Serializable 12

Serialisering (ex.) Man vill kunna spara/ladda ett spel. Enkel lösning: Låt spelets modell-objekt (och alla objekt som den består av) implementera Serializable. Nu kan vi spara ner allt på fil! GameModel gamemodel = new GameModel(); // innehåller allt data och // tillstånd för spelet.... // när vi vill spara : ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(new File("savefile.xyz"))); out.writeobject(gamemodel); 13

Serialisering (ex.) (2) Man vill kunna spara/ladda ett spel. Enkel lösning: Låt spelets modell-objekt (och alla objekt som den består av) implementera Serializable. Nu kan vi spara ner allt på fil! // när vi vill ladda : ObjectOutputStream out = new ObjectInputStream( new FileInputStream(new File("savefile.xyz"))); gamemodel = (GameModel)out.readObject(); 14

Datum och tid Klassen Date sparar en tid // num = number of milliseconds since Jan 1, 1970 Date date = new Date(num); Klassen Calendar är mer användbar, och kan ta fram nuvarande tid som ett Date. Calendar cal = Calendar.getInstance(); System.out.format("The time is: %tc \n", cal.gettime()); int minute = cal.get(calendar.minute); 15

Datum och tid(2) DateFormat: en (abstrakt) klass som formaterar datum åt oss DateFormat time = DateFormat.getTimeInstance(); DateFormat date = DateFormat.getDateInstance(); Date now = Calendar.getInstance().getTime(); // note that this is locale dependent System.out.println(time.format(now)); // 13:37:00 System.out.println(date.format(now)); // 2012-nov-14 (Mer kontroll? SimpleDateFormat!) 16

Slumptal Klassen Random java.util kan ge slumpade tal. Random rnd = new Random(); int i = rnd.nextint(); double d = rnd.nextdouble(); Random-objektets slumptalsfrö bestäms vid instansiering, d.v.s. det blir ev. inte bra slumptal om man instansierar Random varje gång. 17

Filer (binära) (överkurs) För binära filer, använd DataInputStream resp. DataOutputStream String filename = "myfile.dat"; DataInputStream input; try { input = new DataInputStream(new FileInputStream(filename)); while (true) { System.out.println(input.readInt()); } } catch (EOFException e) { System.out.println("Something went wrong while reading:"); e.printstacktrace(); // print the details! } finally { input.close(); // always close! } 18

Exportera som jar-fil (överkurs) Om man vill exportera sitt projekt för att köra någon annan stans kan man göra det som en jarfil. Man kan t.ex. starta sitt program från kommandoraden med: java -jar mittprogram.jar Vi tar ett litet exempel. 19

Nätverk (överkurs) Klasserna ServerSocket och Socket finns i java.io. ServerSocket listener = new ServerSocket(56789); Socket s = listener.accept(); do { s.getoutputstream().write(1); Thread.currentThread().sleep(1000); } while (true); En server som låter en klient ansluta och som sedan skickar 1:or med 1 sekunds mellanrum. En klient som ansluter till en (lokal) server, tar emot heltal och skriver ut dem på skärmen. Socket socket = new Socket("localhost", 56789); do { System.out.println(socket.getInputStream().read()); } while (true); 20

Lambdauttryck (överkurs) I java 8 infördes lambdauttryck. Interface som bara innehåller en metod kan nu implementeras med en väldigt simpel syntax. Rent praktiskt blir detta som att vi kan skriva en metod som ett uttryck. Vi tar ett litet exempel Generell syntax: (Typ param1, Typ param2,...) -> {sats; sats;... return värde} Man kan utelämna typerna om man vill Man kan utelämna parenteserna om det bara finns en parameter Man kan utelämna klamrarna om kroppen är ett uttryck som evalueras till ett värde av returtypen. 21