DAIMI, AUIntroducerende Objektorienteret Programmering1 Persistens, I/O og strømme Input og output, datastrømme i Java, objekt serialisering.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

07 – Kort om OO Introduktion.
1 Frameworks. 2 Plan Frameworks • Kollektioner • Input/output Nyt designmønster: Decorator.
Perspektiverende Datalogi Internetalgoritmer MapReduce Gerth Stølting Brodal.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Distribueret programmering, specielt.NET Remoting Rasmus D. Lehrmann DM
NetBeans Installation og brug.
Grundlæggende programmering Efterår 2001
1 Filer - intro Data-hierarki Filer og strømme (eng.: streams) af bytes Klasserne File og Directory Oprettelse af sekventiel tekstfil Læsning af data fra.
Objektorienteret programmering
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
Tietgen Skolen Trick med facadeklasse og serialisering ”Trick” – model ”samles” til eet overordnet objekt Alle klasser i model skal have attriutten [Serializable]
Structs Structs allokeres på stakken Memory-allokering sker ved oprettelse af variabel og ikke ved new Der kan defineres metoder incl. Constructor. Eksempel.
Arv Idéen i arv et at kunne genbruge gennem generalisering
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
Eksempel på realisering af domænemodel
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Objekter og klasser Rasmus D. Lehrmann DM
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Procestræ under afvikling af cp init login shell cp cp src dest.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
GP7, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 7 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
FEN IntroJava AAU1 Endnu mere om Klasser og Objekter Mange til mange relationer Student-Course v3.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Tekst filer Tekstfiler opbygges normalt af linier, hvor disse ikke behøver at være samme længde. Når man skal arbejde med tekstfiler, ønsker man metoder.
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4C.1 Systemdesign Design med flere klasser, En kaffeautomat.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Klassevariable- og metoder Tilstand og opførsel på klasseniveau.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
DAIMIIntroducerende objektorienteret programmering12A.1 Moduler Packages i Java.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende Objektorienteret Programmering1 Collections og opremsning Nye typer collections, objektorienteret sweep.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Henrik Bærbak, 2000Introducerende objektorienteret programmering11B.1 Destilleret UML Oversættelse fra UML til Java.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Indledende Programmering Uge 6 - Efterår 2006
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2002Objektorienteret systemudvikling1.1 Objektorienteret design Persistens - introduktion.
DIEB8.1 Kursusgang 8 Oversigt: Sidste kursusgang Beskrivelser af komponenter Typiske komponenter Arkitektur for en GUI.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
DAIMI, AUIntroducerende objektorienteret programmering11A.1 Destilleret UML Oversættelse fra UML til Java.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Collections og opremsning Nye typer collections, objektorienteret sweep.
Parametrisering En kort introduktion.
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

DAIMI, AUIntroducerende Objektorienteret Programmering1 Persistens, I/O og strømme Input og output, datastrømme i Java, objekt serialisering

DAIMI, AUIntroducerende Objektorienteret Programmering2 Persistens  At data er persistent betyder (i denne sammenhæng) at data overlever mellem programafviklinger.  Normalt dør alle objekter og variable når et program afsluttes: Deres tilstand glemmes.  I de mange sammenhænge er dette naturligvis uacceptabelt.

DAIMI, AUIntroducerende Objektorienteret Programmering3 Persistens i Java  Java indeholder en pakke, java.io, som indeholder klasser til at læse og skrive data, f.eks. fra et lagermedie såsom en filstruktur. Disse klasser er bygget med størst mulig fleksibilitet for øje.  Omkostningen ved denne fleksibilitet er stor kompleksitet, bla. er der over 48 forskellige klasser at vælge imellem, to basalt forskellige tilgange til persistens, samt fire (næsten) parallelle klassehierarkier.

DAIMI, AUIntroducerende Objektorienteret Programmering4 Princip i gennemgang  Vi vil atter ikke dvæle ved detaljer, men prøve at give et overblik og illustrere vha. små eksempler.

DAIMI, AUIntroducerende Objektorienteret Programmering5 To tilgangsvinkler  Java tilbyder to vidt forskellige tilgange til persistens  Den klassiske: Et programs tilstand opfattes som en samling bytes og/eller tegn, som programmøren skal skrive og læse fra filer på filsystemet.  Den objekt-orienterede: Et programs tilstand er repræsenteret ved objekter, som selv kan finde ud af at skrive og indlæse sig selv fra filsystemet.

DAIMI, AUIntroducerende Objektorienteret Programmering6 Den klassiske  Java tilbyder den klassiske type persistens, hvor programmøren selv håndterer det at skrive og læse data.  Java skelner (som stort set alle andre computerbaserede systemer) mellem binær- og tekstuel data.  Binær data:.class,.exe,.doc, …  Tekstuel data:.txt,.java,...

DAIMI, AUIntroducerende Objektorienteret Programmering7 IO hierarkier  De to typer håndteres af hver deres hierarkier af klasser.  Binære data Læsning: Sker vha. specialiseringer af InputStream Skrivning: Vha. specialiseringer af OutputStream  Tekstuel data Læsning: Specialiseringer af Reader Skrivning: Specialiseringer af Writer

DAIMI, AUIntroducerende Objektorienteret Programmering8 I/O og strømme  Al kommunikation med omverdenen fra et Java program (I/O = input/output) sker via strømme (streams).  En strøm flyder fra en kilde (source) og til et afløb (sink).   Således opfattes skærmen (System.out) som et afløb og keyboardet (System.in) en kilde: De aftager eller producerer data, i dette tilfælde tegn.

DAIMI, AUIntroducerende Objektorienteret Programmering9 Readers og Writers  En Reader (eller InputStream) modellerer en kilde (input)  En Writer (OutputStream) modellerer et afløb (output) Data-kilde Data-afløb ReaderWriter

DAIMI, AUIntroducerende Objektorienteret Programmering10 Fysiske og virtuelle strømme  Både binære og tekstuelle, såvel som input- og output-strømme deles i to kategorier:  Fysiske datastrømme: En fil, en streng, zip fil,… bruges som kilde eller afløb  Virtuelle datastrømme: Kilde/afløb er en anden fysisk eller virtuel datastrøm

DAIMI, AUIntroducerende Objektorienteret Programmering11 “Rørlægning” i Java  Virtuelle strømme bevirker at vi kan lave filtre, dvs. lade datastrømmen løbe igennem en række virtuelle strømme som bearbejder data undervejs på forskellig vis.  Dette er analogt til f.eks. hvordan et renseanlæg til en swimming pool virker på badevandet: filtreringKalkspaltningVarmelegmeKlorering

DAIMI, AUIntroducerende Objektorienteret Programmering12 Writer eksempel public static void putQuoteIn( String filename ) throws FileNotFoundException, IOException { // Skab en output writer på den givne fil FileWriter fw = new FileWriter( filename ); // Og skab et filter foran filwriteren som kan formattere tekst PrintWriter pw = new PrintWriter( fw ); pw.println( "Keep it simple, as simple as possible," ); pw.println( " but no simpler." ); pw.println( " - Albert Einstein" ); // Når man lukker en reader/writer lukker den automatisk alle // ned ad strømmen. pw.close(); } Fysisk datawriter Virtuel datawriter

DAIMI, AUIntroducerende Objektorienteret Programmering13 Writer eksempel Strengen: “Keep it simple…” PrintWriter FileWriter filen: “quote.txt” println write

DAIMI, AUIntroducerende Objektorienteret Programmering14 Reader eksempel: ‘type” public static void typeOnScreen( File f ) throws FileNotFoundException, IOException { FileReader fr = new FileReader( f ); BufferedReader br = new BufferedReader( fr ); String line; while ( (line = br.readLine()) != null ) { System.out.println( line ); } br.close(); }

DAIMI, AUIntroducerende Objektorienteret Programmering15 Reader eksempel: “grep” public static void grepOnScreen( String target, File f ) throws FileNotFoundException, IOException { FileReader fr = new FileReader( f ); GrepReader br = new GrepReader( target, fr ); String line; while ( (line = br.readLine()) != null ) { System.out.println( line ); } br.close(); }

DAIMI, AUIntroducerende Objektorienteret Programmering16 GrepReader class GrepReader extends BufferedReader { String pattern; public GrepReader( String target, Reader inputReader ) { super( inputReader ); pattern = target; } public String readLine() throws IOException { String line; return line; } do { } while ((line != null) && line.indexOf(pattern) == -1); line = super.readLine();

DAIMI, AUIntroducerende Objektorienteret Programmering17 Den objektorienterede  Antag vi har en vektor af objekter, som vi vil kunne læse ind og ud af en fil.  Kræver at myType kan konvertere en tekstpræsentation til den indre repræsentation. Skrivning: Vector v = ….; Enumeration e = v.elements(); while ( e.hasMoreElements() ) { myType m = (myType) e.nextElement(); stream.println( m ); } Læsning: ???

DAIMI, AUIntroducerende Objektorienteret Programmering18 Objekt serialisering  Problemet med at konvertere til og fra et objekts interne repræsentation (int, char, andre objekter, i computerens lager) til en ekstern repræsentation (bytes i en fil) hedder objekt serialisering.  Problemstillingen kompliceres af at eet objekt jo ofte refererer til et eller flere andre: f.eks. vektor eksemplet fra før.

DAIMI, AUIntroducerende Objektorienteret Programmering19 Interface Serializable  Java er elegant på dette punkt. Det eneste man skal gøre er, at erklære at ens klasse implementerer interfacet Serializable. Derefter kan objekter af klassen læses og skrives vha. virtuelle datastrømme: ObjectInputStream hhv. ObjectOutputStream, som igen kan bruge binære datastrømme som afløb.  public class myType implements Serializable {  …  }

DAIMI, AUIntroducerende Objektorienteret Programmering20 Eksempel: stringVectorOut // Skab først nogle objekter som skal 'streames' ud på en fil Vector v = new Vector(); v.addElement( "Hello World!" ); v.addElement( "Object persistence is easy in Java!" ); v.addElement( "Isn't IOOP just a great course?" ); FileOutputStream fo = new FileOutputStream( "svo.dat" ); ObjectOutputStream oo = new ObjectOutputStream( fo ); oo.writeObject( v ); oo.flush(); oo.close();

DAIMI, AUIntroducerende Objektorienteret Programmering21 Eksempel: stringVectorIn // Skab en input strøm svarende til filen svo.dat FileInputStream fi = new FileInputStream( "svo.dat" ); ObjectInputStream io = new ObjectInputStream( fi ); Vector v = (Vector) io.readObject(); io.close(); // Udskriv hvad vi fik ud. System.out.println("Vector read, now lets see whats in it: " ); Enumeration e = v.elements(); while ( e.hasMoreElements() ) { String s = (String) e.nextElement(); System.out.println( "Element is: \""+s+"\"" ); }

DAIMI, AUIntroducerende Objektorienteret Programmering22 Serialisering  Smart; men hvad sker der egentlig?  Ikke alene vektor ‘v’ selv bliver serialiseret, men også alle objekter, som v refererer til! "Hello World!" "Object persistence is easy in Java!" "Isn't IOOP just a great course?" v:

DAIMI, AUIntroducerende Objektorienteret Programmering23 Transitiv lukning  Man kalder dette den transitive lukning af objektgrafen; dvs. hvis vi serialiserer objektet O bliver alle objekter som O referer til, direkte eller indirekte, også serialiseret.  Transitive regel:  A = B og B = C  A = C  Analogt, hvis relationen  betyder ‘afhængig af’:  A  B og B  C  A  C  Transitive lukning af  :  TL(O) = { objekter o’ | O  o’ }

DAIMI, AUIntroducerende Objektorienteret Programmering24 Serialiseringskrav  For at Java kan serialiserer et objekt, O, kræves naturligvis at alle objekter som O transitivt refererer til, implementerer Serializable.  Eller på matematisk:  o  TL(O) : o implementerer Serializable

DAIMI, AUIntroducerende Objektorienteret Programmering25 Smart, men farligt  Objekt serialisering er smart, men der er nogle faldgruber  1) Hvad med en reference til en AWT-dialog? Ja, så kommer hele AWT hierarkiet med, og det fylder! Java har løsningen via en modification som hedder transient.  2) Hvis en klasses definition ændres, kan I ikke længere læse de gamle filer. Slemt...

DAIMI, AUIntroducerende Objektorienteret Programmering26 Filhåndtering  Filer kan opfattes som objekter via klassen File. Denne klasse stiller metoder til rådighed til at slette filer, test eksistensen af en fil, fortælle om det er en fil eller et katalog, liste indhold af kataloger, og meget andet.  Set eksemplerne på ugesedlen og check dokumentationen

DAIMI, AUIntroducerende Objektorienteret Programmering27 Undtagelseshåndtering  At læse og skrive filer er “beskidt arbejde” idet der kan opstå alle mulige fejlsituationer: Filen eksisterer ikke/allerede, disk fyldt,disk defekt, …  Dette dækkes af Java’s exception mekanisme, undtagelseshåndtering.  Vi vil ikke gå nærmere ind i dette her, men fodgængerreglen er at en metode, hvori en undtagelse kan opstå skal erklære en throws i metode-definitionen

DAIMI, AUIntroducerende Objektorienteret Programmering28 Eksempel public static void grepOnScreen( String target, File f ) throws FileNotFoundException, IOException { FileReader fr = new FileReader( f ); GrepReader br = new GrepReader( target, fr ); String line; while ( (line = br.readLine()) != null ) { System.out.println( line ); } br.close(); }