VARNING. Alternativ metod för att läsa XML filer XML - SAX. Ide till lösning. Inte parsa hela dokumentet på en gång

Relevanta dokument
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Dynamisk bindning och polymorfism

Algoritmbiblioteket (STL) Designstrategi Generiska algoritmer som fungerar på godtyckliga samlingsdatatyper, vilka har iteratorer.

F2: Krav på objektorienterat språk

TDDC76 - Programmering och Datastrukturer

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Vad är en klass? Övning 2. Konstruktorer. ffl copy-konstruktorn tar en instans av klassen som. ffl default-konstruktorn tar inga argument och kan

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

Innehåll. Pekare Exempel

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

TDDC76 - Programmering och Datastrukturer

Innehåll. Pekare Exempel

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

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

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med.

TDDC76 Programmering och datastrukturer

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

Programsystemkonstruktion med C++

Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

5 Arv och dynamisk bindning FIGUR

Arv. Objektorienterad och komponentbaserad programmering

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

Tillämpad programmering

Introduktion till arv

Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Classes och Interfaces, Objects och References, Initialization

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

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

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

Det finns många flaggor till g++,

Imperativ programmering. Föreläsning 4

Kursens mål. Objektorienterad programmering. Kursupplägg. Tillgodoräknande. Kursbok. Labsalar

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Synlighet. Namespace Scope-operatorn Klasser Vänner

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

DAT043 Objektorienterad Programmering

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Klasshierarkier - repetition

TDIU20 - Objektorienterad programmering i c++ - föreläsning 6

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

Tommy Färnqvist, IDA, Linköpings universitet

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Innehåll. Parametriserade typer. Klassmallar. Klassmallen Vektor Konstructor med std::initializer_list. Klassmallen Vektor Medlemsfunktioner

Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.

TDIU20 - Objektorienterad programmering i c++ - föreläsning 3

Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

Objektorienterad programmering. Grundläggande begrepp

TDIU01 - Programmering i C++, grundkurs

F4. programmeringsteknik och Matlab

Generell (template) programmering. Effektiv C++ Slutliga tips Genomgång av gammal tenta. Daniel Aarno Allt som fungerar som x ÄR x

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

OOP Objekt-orienterad programmering

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Tillämpad programmering

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

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00

Objektorientering - Arv och polymorfi

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Historik: OOP. Objektorientering. Historik: OOP (forts) En Dum Fråga

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

F8: Typkonvertering i C++

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering

TDIU01 - Programmering i C++, grundkurs

Konstruktion av klasser med klasser

Programmering A. Johan Eliasson

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

grundläggande C++, funktioner m.m.

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

1 Namnkontroll (NameControl)

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

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

Polymorfi. Objektorienterad och komponentbaserad programmering

Föreläsning 3: Booleans, if, switch

Övningar Dag 2 En första klass

Transkript:

Alternativ metod för att läsa XML filer Inte parsa hela dokumentet på en gång XML - SAX Inte bygga upp ett träd i minnet Istället ta element för element Upp till programmet att hantera informationen XML dokument Parser Program <?xml version="1.0" encoding="utf-8"?> <annikastuff> <values> <variable name="l1"> <value value="1" /> <value value="2" /> <value value="3" /> </variable> </values> <students> <student id="1" l1="0" l2="0" l3="0" name="kalle Anka" px="0" py="0" /> </students> </annikastuff> public void parseandprint( String filename ) DefaultHandler eventhandler = new MyEventHandler(); try SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setnamespaceaware( true ); SAXParser parser = factory.newsaxparser(); parser.parse( new InputSource( filename ), eventhandler ); catch ( ParserConfigurationException pce ) pce.printstacktrace(); catch ( SAXException se ) se.printstacktrace(); catch ( IOException ioe ) ioe.printstacktrace(); Ide till lösning VARNING Subklassa DefaultHandler Implementera startelement endelement Inte någon snygg lösning

public void startelement( String namespace, String localname, String qname, Attributes attr ) public void endelement(string uri, String localname, String qname) switch( currentlyparsing ) case 0:... switch( currentlyparsing ) case ANNIKA_STUFF: case ANNIKA_STUFF: if( localname == "values" ) currentlyparsing = 0; currentlyparsing = VALUES; else if( localname == "students") currentlyparsing = STUDENTS; case VALUES: else currentlyparsing = ANNIKA_STUFF; System.out.println( "Syntax error: Expected 'values' or 'students', got '" + localname + "' case STUDENTS: currentlyparsing = ANNIKA_STUFF; case VALUES: if( localname == "variable" ) currentlyparsing = VARIABLE; case VARIABLE: currentvariablename = attr.getvalue( "name" ); currentlyparsing = VALUES; variablevalues = new ArrayList<String>(); System.out.print( currentvariablename + " - " ); else printerror( "variable", localname ); for( String v : variablevalues ) System.out.print( v + " " ); case STUDENTS: System.out.println(""); if( localname == "student" ) currentlyparsing = STUDENT; case VALUE: // Anta att alla attribut är korrekt deklarerade currentlyparsing = VARIABLE; System.out.println( attr.getvalue( "name" ) + ", l1=" + attr.getvalue( "l1" ) + ", l2=" + attr.getvalue( "l2" ) + ", l3= " + attr.getvalue( "l3" ) + ", px= " + attr.getvalue( "p ", py=" + attr.getvalue( "py" ) ); case STUDENT: else currentlyparsing = STUDENTS; printerror( "student", localname ); > java Demo hejsan l1-1 2 3 l2-4 5 l3-6 7 8 px - 11 12 py - 13 14 Kalle Anka, l1=0, l2=0, l3= 0, px= 0, py=0 Kajsa Anka, l1=0, l2=0, l3= 0, px= 0, py=0 Knatte Anka, l1=0, l2=0, l3= 0, px= 0, py=0 Fnatte Anka, l1=0, l2=0, l3= 0, px= 0, py=0 Tjatte Anka, l1=0, l2=0, l3= 0, px= 0, py=0 Andra objektorienterade språk Jan Erik Moström Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till Objektorienterade programmeringsspråk Smalltalk, Eiffel och (Java) är rena objektorienterade språk C++ och Ada stödjer objektorientering Det går att programmera objektorienterat i C eller assembler för den delen Språket måste stödja någon form av inkapsling. T.ex. på fil-nivå 479 480

C++ Skapades i början av 80-talet av Bjarne Stroustrup (AT&T Bell Labs) 1985 släpptes C++ kommersiellt och fick snabbt spridning inom UNIX-värden Största skillnaderna mot java Multipelt arv Inte Garbage Collection som standard Inte bara klasser (vi kan skriva funktioner också) Alla klasser inte i samma arvshierarki (ingen Object klass) Möjlighet till operatoröverlagring Klassbibloteket (mindre i c++) Inte plattformsoberoende i samma grad 481 482 Målen med C++ Bakåtkompabilitet med ANSI C i så hög grad som möjligt Inkludera nya programmeringsparadigmer som objektorientering utan att för den skull offra prestanda. C++ har: Hårdare typkontroll än C Mindre behov av preprocessorn, eftersom man har möjlighet att skriva funktioner som fungerar som makron, samt möjlighet att definiera konstanter utan att använda sig av #define. Har möjlighet att skicka parametrar via call-byreference utan att använda sig av adressoperatorn & Ett stort bibliotek av färdiga klasser och algoritmer Möjlighet till multipelt arv 483 Templates class Complex // Constructor Complex(double rl=0, double im=0) real = rl; imag = im; // Member operators Complex operator+ (Complex operand2) const; Complex operator* (Complex operand2) const; // Data members double real; // real and imaginary parts double imag; // of a complex number // I/O operators friend istream& operator>>(istream& is,complex& innum); friend ostream& operator<<(ostream& os,complex outnum); ; 484 Complex Complex::operator+ (Complex operand2) const Complex result(real+operand2.real, return result; int main(void) Complex tal1; //0 imag+operand2.imag); Complex tal2(1,2); //1+2i cout << tal1+tal2 << endl; return 0; Allokering/deallokering av objekt Var allokera objekten? Tre sätt : Statiskt av kompilatorn Dynamiska objekt på stacken Eller på heapen med new I Java new det enda sättet -> uniform metod Inga pekare som måste derefereras a la C++ C++ har alla sätten - och alla problemen 485 486

Vi använder new, sen då? Arv i C++ Hur deallokera objekten? ->Explicit Problem med dangling pointers C++ har delete -> Implicit Har vi i java i form av Garbage Collection 487 class Fordon ; int branslemangd; tanka(int liter); int getbransle(); class Bil : public Fordon ; int antalpass; 488 Omdefinition Multipelt arv class Fordon int branslemangd; void tanka(int liter); int getbransle(); ; Anställd Person Forskarstud Studerande class Bil : public Fordon int antalpass; void tanka(int liter); ; 489 class Forskarstuderande : public Anstalld, public studerande ; 490 Problem med multipelt arv Omdiskuterat behov Namnkonflikter kan uppstå Dubbla data (löses med virtuellt arv) Använd med försiktighet 491 Olika typer av arv i C++ Public Används alltid om det inte finns något mkt bra skäl till att använda någon av de andra. public och protected metoder behåller sin status Protected public och protected metoder/attribut som ärvs blir protected i subklassen Private public och protected metoder/attribut som ärvs blir private i subklassen Attribut/metoder som är deklarerade private blir alltid oåtkomliga i basklassen 492

Virtuella funktioner Statisk bindning är default - nyckelordet virtual används för att få dynamisk bindning class Figur ; virtual double getarea(); class Rect : public Figur ; double b,h; double getarea() return b*h; // virtuell 493 Virtuella anrop med pekare class Circ: public Figur double r; double getarea() return 3.14*r*r; ; Figur *fp[2]; fp[0]=new Circ(5) fp[1]= new Rect(3,4); for(int i=0;i<2;i++) cout << Area << fp->getarea(); 494 Virtuella anrop med referens void skrivutarea(figur& f) cout << Arean är << f.getarea() <<. ; Cirk jorden(40000000/m_pi/2); skrivutarea(jorden); Referensanrop behåller datat Abstrakt basklass Fångar gemensamma egenskaper Påtvingar ett gränssnitt Går ej skapa objekt från Med äkta (pure) virtuell funktion: class Figur virtual double getarea() = 0; ; Eller med protected konstruktor 495 496 Virtuellt arv Används vid multipelt arv för att se till så att data inte finns i flera kopior class Queue ; class CashierQueue : virtual public Queue ; class LunchQueue : virtual public Queue ; class LunchCashierQueue : public LunchQueue, public CashierQueue ; Algoritmbiblioteket (STL) (f.d.) Standard Template Library Samlingstyper (containers) Algoritmer Funktionsobjekt Adaptrar 497 498

Designstrategi Generiska algoritmer som fungerar på godtyckliga samlingsdatatyper, vilka har iteratorer Algoritm sort find copy vect list stack deque Samling(Datastruktur) Datatyp int char double[] Bil Person 499 forts designstrategi Effektiva algoritmer Använder enbart mallar i C++ Inga arvshierarkier eller virtuella funktioner Ej objekt-orienterat Bygger på forskning om generiska algoritmer av Stepanov/Lee/Musser -79-95 General Electric, AT&T Bell, HP Presenterades för ANSI/ISO C++ 93 Mycket gott mottagande 500 Sekvenser Samlingstyper vector<t>,deque<t>,list<t> Associativa set<t,c>, map<k,v,c>, multiset<t,c>, multimap<k,v,c> Adaptrar stack<t>, queue<t>, priority_queue<t,c> impl t.ex. som vector, deque, eller list Anm. C comparator. Funktionsobjekt för sortering 501 Algoritmer Ca 70 st Opererar på intervall Oberoende av datastruktur Sekvensalgoritmer for_each, find, copy, transform, replace Sortering sort, stable_sort, binary_search, max_element Numeriska accumulate, inner_product 502 Ett litet exempel void sort_file(char *name) ifstream file(name); istream_iterator<string> in(file),eof; vector<string> strs; copy(in,eof,back_inserter(strs)); sort(strs.begin(),strs.end()); copy (strs.begin(),strs.end(), ostream_iterator<string>(cout, \n )); 503 C# Utvecklat av Microsoft Designmål Enkelt objektorienterat språk Robusthet Programmerarportabilitet Alla typer i språket ärver en klass (System.Object) 504

Exempel usingsystem; //Aclassfortwo-dimensionalobjects. classtwodshape doublepri_width;//private doublepri_height;//private //propertiesforwidthandheight. publicdoublewidth getreturnpri_width; setpri_width=value; publicdoubleheight getreturnpri_height; setpri_height=value; publicvoidshowdim() Console.WriteLine("Widthandheightare"+ width+"and"+height); 505 //AderivedclassofTwoDShapefortriangles. classtriangle:twodshape stringstyle;//private //Constructor publictriangle(strings,doublew,doubleh) width=w;//initthebaseclass height=h;//initthebaseclass style=s;//initthederivedclass //Returnareaoftriangle. publicdoublearea() returnwidth*height/2; //Displayatriangle'sstyle. publicvoidshowstyle() Console.WriteLine("Triangleis"+style); 506 publicclassshapes3 publicstaticvoidmain() Trianglet1=newTriangle("isosceles",4.0,4.0); Trianglet2=newTriangle("right",8.0,12.0); Console.WriteLine("Infofort1:"); t1.showstyle(); t1.showdim(); Console.WriteLine("Areais"+t1.area()); Console.WriteLine(); Console.WriteLine("Infofort2:"); t2.showstyle(); t2.showdim(); Console.WriteLine("Areais"+t2.area()); 507