Reader en Writer Stream FileStream MemoryStream NetworkStream BufferedStream GZipStream CryptoStream TextWriter StreamWriter StringWriter BinaryWriter.

Slides:



Advertisements
Verwante presentaties
Van domeinklasse tot implementatie
Advertisements

Het type int Tekenen met Java operatoren
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 2 Hallo, C# !.
Inleidend probleem Data structuur (hiërarchie van classes)
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 8 Objecten en klassen.
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
1 Syntax JavaLogo. 2 Hoofdstuk 1 Tekenen in Java.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 3 redirection,
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk.
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Hoofdstuk 3 Methoden om te tekenen.
Programma zonder window commandline interface. Commandline programma public static void main (String [ ] params) { System. out. println (“Hoi allemaal!”);
2e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nOmcirkeld: tentamen2 Achter pijltje: gemiddelde tot nu toe nNeem het.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Hoofdstuk 2 Hallo, C# !. Opbouw broncode nOpdrachten om het geheugen te veranderen nOpdrachten zijn gegroepeerd in methoden nMethoden zijn gegroepeerd.
Gelijkheid van Strings static bool Gelijk( string s, string t) { } int m = s.Length; int n = t.Length; for (i=0; i
Eerste deeltentamen nNagekeken werk ligt voor in de zaal nNeem je eigen werk mee: in het college wordt het besproken nVragen over de beoordeling: in de.
1e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nNeem het even mee, de uitwerking wordt in het college besproken nDiscussies.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Windows-applicatie class HalloWin1 { static void Main ( ) { } Form scherm; scherm = new Form( ); Application.Run(scherm); using System.Windows.Forms; scherm.Text.
Opbouw van het Netwerk void Lees (string filenaam ) { while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty.
Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen.
Bestanden Lezen Schrijven Afbeeldingen. Bestandstypen.txt.png eigen.
Windows-applicatie using System.Windows.Forms; using System.Drawing;
…is eigenlijk overbodig!
Aanroep van een methode voert opdrachten uit in de body daarvan
Lezen en schrijven van tekst
2e Deeltentamen Nagekeken werk ligt voor in de zaal (alfabetisch op achternaam) Neem het even mee, de uitwerking wordt in het college besproken Discussies.
Voortborduren op eerder gedaan werk
ISensorEventListener
1e Deeltentamen Nagekeken werk ligt voor in de zaal (alfabetisch op achternaam) Neem het even mee, de uitwerking wordt in het college besproken Discussies.
Gameprogrammeren: Objecten en geheugen
Reader en Writer leest en schrijft bytes leest string en char
Gameprogrammeren: Lists en interfaces
Hoofdstuk 9.2 Strings.
Letterfrequentie turven
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Methoden
vandaag èn vrijdag deadline maandag 12 dec.
Publieksvraag // schrijf een static methode die telt hoe // vaak een symbool voorkomt in een string // voorbeeld-aanroep: int n; n = Demo . Freq(’e’,
Lezen en schrijven van tekst
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Arjan Egges & Paul Bergervoet
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Arjan Egges & Paul Bergervoet
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Libraries, Platform Games
Practicum: schets-editor
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Gameprogrammeren: Interfaces
Arjan Egges Paul Bergervoet Wouter van Toll
Aanroep van een methode voert opdrachten uit in de body daarvan
Gameprogrammeren: Klassen en objecten
Implementatie Zoekboom
Object Communication (Jewel Jam)
Exceptions Exception:
Eerste deeltentamen Nagekeken werk ligt voor in de zaal
Transcript van de presentatie:

Reader en Writer Stream FileStream MemoryStream NetworkStream BufferedStream GZipStream CryptoStream TextWriter StreamWriter StringWriter BinaryWriter XmlWriter TextReader StreamReader StringReader BinaryReader XmlReader Object store decorator leest en schrijft bytes leest string en char schrijft string en char leest int en double leest XML-teksten

Methoden van Stream Stream FileStream MemoryStream NetworkStream class FileStream { } int Read (byte[] doel, int max) { } for (int t=0; t<max; t++) { } int b = this.ReadByte(); if (b==–1) return t; doel[t] =b ; (byte) return max; Stream int ReadByte ( )virtual class FileStream : Stream { } override int ReadByte ( ) { return } abstract ;

Abstracte methode/klasse Stream FileStream MemoryStream NetworkStream nAbstracte methode: methode zonder body nAbstracte klasse: bevat abstracte methode ●kun je geen new object van maken ●alleen bedoeld als superklasse Brush SolidBrush HatchBrush

Implementaties van Collections IEnumerable LinkedList Queue Stack List HashSet SortedSet SortedList Sorted Dictionary IList ISet IDictionary ICollection genummerd zonder dubbele

Hoe doorloop je een Collection? nList nCollection for (int t=0; t<alles.Count; t++) doeIetsMet( alles[t] ); foreach (String s in alles) doeIetsMet( s ); opdracht for)(expropdrachtexpr ;; typeexprinnaamforeach()opdracht

Commandline programma $>date Wed Nov 2, 15:45 $> ls aap.txt hallo.doc prog.cs $> grep void prog.cs prog.cs, line 6: void Main() prog.cs, line 10: void teken() $>ls > files.txt $> parameters voor het programma output redirection

Grep: main class Grep if (params.Length==0) System.out.println(“Usage: Grep pat file...”); else static void Main ( for (int t=1; t<params.Length; t++) Grep.bewerk( params[0], params[t] ); { } { )string [ ] params

Grep: bewerk static void bewerk (String pat, String naam) { regel=reader.ReadLine() Console.WriteLine( naam if ( regel. IndexOf(pat) >= 0 ) reader = new StreamReader (naam); TextReader reader; String regel; while ()( ) != null ; n++ for (int n=1; + n+ regel ); if (naam=="") reader = Console.In; else try { } catch (Exception e) { Console.WriteLine(naam + e); }

Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk

Routeplanner nKlik startpunt nKlik eindpunt nProgramma bepaalt route nKlik nieuw startpunt... start eind start nSpoorwegkaart:

Modellering nZoek de “beste” route elk traject heeft “kosten”; route met laagste totaalprijs is de beste nOpbouw van het netwerk staat in een file, met: uvoor elke stad: naam en coördinaten uvoor elke weg: 2 steden, en de kosten stad Amersfoort stad Amsterdam stad Apeldoorn weg Amersfoort Apeldoorn43 weg Amsterdam Hilversum29 weg Hilversum Amersfoort 16

Specificatie nBij eerste muisklik: aangewezen stad is het beginpunt toon die in blauw nBij tweede muisklik: aangewezen stad is eindpunt bereken de route, en toon die in rood nBij klik buiten een stad: telt niet mee en 3e, 5e, 7e... en 4e, 6e, 8e...

Opdeling in klassen nInteractieve interface class RouteZoeker : Form nBelangrijke object-typen class Stad class Weg class Pad class Netwerk met in elke klasse: ueen constructor-methode ueen methode Teken om zichzelf te tekenen u... met EventHandler voor: uteken uklik

Klasse-ontwerp wat is... wat kan... en hoe ? een object member- variabelen methode- headers methode- bodies

De klasse RouteZoeker class RouterZoeker : Form { Netwerk netwerk; Stad stad1; Pad pad; “het” netwerk de “blauwe” stad of null het “rode” pad of null Button b; TextBox t; Label lab; we tekenen alles zelf! void klik(..., MouseEventArgs mea) { } void teken(..., PaintEventArgs pea) { } Event-handlers

De klasse Netwerk class Netwerk { Stad [ ] Steden; ICollection Wegen; alle steden op de kaart we gaan per stad alle uitgaande wegen bewaren ICollection Steden;

De klasse Stad class Stad { string Naam; ICollection Wegen; Point Plek; Utrecht

De klasse Weg class Weg { Stad Doel; int Kosten;

De klasse Pad class Pad { IList Steden; Stad Hier; Pad Rest; int Kosten; null ongeveer een LinkedList, maar dan zelfgemaakt

Methoden van Stad class Stad {String Naam; Point Plek; ICollection wegen; Stad ( { } void Teken (Graphics gr, Brush br) { Naam = s; Plek = p; String s, Point p ) Wegen = new LinkedList ( ); gr. FillRectangle(br, Plek.X-5, Plek.Y-5, 10, 10 ); gr. DrawString (Naam, font, br, Plek + new Size(6,-15) ); Utrecht } static Font font = new...

Methoden van Weg class Weg {Stad Doel; int Kosten; Weg ( { } void Teken (Graphics gr, Pen pen ) { } Doel =s; Kosten = k; Stad s, int k ) gr. DrawLine ( pen, bron.Plek,Doel.Plek );, Stad bron ) wordt niet getekend

Methoden van Pad class Pad { Stad Hier; Pad Rest; int Kosten; Pad ( { } void Teken (Graphics gr, Brush br, Pen pen) { } Hier = s; Rest = r; Kosten = k; Stad s, Pad r, int k ) Hier. Teken (gr, br); totale kosten van het pad if (Rest != null) Kosten += Rest.Kosten; if (Rest != null) { } Rest. Teken (gr, br, pen); gr.DrawLine( pen, Hier.Plek, Rest.Hier.Plek );

Methoden van Netwerk class Netwerk { ICollection Steden; Netwerk ( ) { } void Teken (Graphics gr) { } Steden = new LinkedList ( ); foreach ( Stad stad in Steden ) { } stad. Teken (gr, Brushes.Black); foreach ( Weg w in stad.wegen ) w.Teken (gr, Pens.Black, stad) bron

Methoden van RouteZoeker class RouteZoeker { Netwerk netwerk; Stad stad1; Pad pad; init ( ) { } void teken (object o, PaintEventArgs pea) { Graphics gr = pea.Graphics; } netwerk = new Netwerk(); stad1=null; pad=null; netwerk. teken (gr); if (pad != null) pad. teken(gr, Brushes.Red, Pens.Red); if (stad1 != null) stad1. teken(gr, Brushes.Blue);

Opbouw van het Netwerk nLees een file met regels zoals: stad Almelo stad Amersfoort stad Amsterdam stad Apeldoorn stad Arnhem weg Arnhem Zutphen29 weg Zutphen Deventer16 weg Deventer Zwolle31 weg Amsterdam Weesp14 weg Weesp Hilversum15 weg Hilversum Amersfoort 16 commando locatie kosten

Opbouw van het Netwerk void Lees (string filenaam ) { while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty ); if (r[0] == "stad") { } else { new Point( int.Parse(r[2]), int.Parse(r[3]) ) ); this. bouwStad (r[1] this.bouwWeg( r[1], r[2], int.Parse(r[3]) ); } } } if (r.Length==4) StreamReader sr = new StreamReader(filenaam);

Opbouw van het Netwerk void bouwStad (string naam, Point p) { } Stad st = new Stad(naam, p); void bouwWeg (string van, string naar, int kosten) { } Steden. Add (st); Stad st1 = this. vindStad (van); Stad st2 = this. vindStad (naar); st1. BouwWeg (st2, kosten); st2. BouwWeg (st1, kosten); Netwerk’s Stad’s void BouwWeg(Stad doel, int k) { } Wegen. Add ( new Weg(doel, k) ); class Stad {

Opbouw van het Netwerk Stad vindStad (String naam) { } foreach ( Stad st in Steden ) { } if ( st.naam == naam ) return st ; return null ; Stad VindStad (Point p) { foreach ( Stad st in steden ) { } if ( return st ; return null ; p.X-st.Plek.X < 5 && p.Y-st.Plek.Y <5 ) Math.abs( )

Interactie in RouteZoeker class RouteZoeker : Form { Netwerk netwerk; Stad stad1; Pad pad; void klik (..., MouseEventArgs mea) { } mea.Locationnetwerk. VindStad( );Stad s = if (stad1==null) else stad1 = s; pad = netwerk. ZoekPad (stad1, s ); this. Invalidate (); { stad1 = null; } if ( s != null ) { } eerste klik of tweede klik?

Het zoek-algoritme maak een stapel van nog-niet-complete, maar veelbelovende paden Pad ZoekPad (Stad begin, Stad eind) { Stack paden = new Stack ();

Het zoeken begint... Pad pad; pad = new Pad(begin, null, 0); null 0 hij is niet groot... maar wel veelbelovend! paden. push (pad);

Onderzoek paden uit stapel... while ( paden.Count > 0 ) Pad pad = paden. pop(); if (pad.Hier==eind) return pad; beter = new Pad( paden. Push(beter); pad. Hier. Wegenforeach ( Weg weg in weg.Doel, pad, weg.Kosten); return null; { } { } )

Pas op: foreach ( Weg weg in pad.Hier.Wegen ) { } beter = new Pad( paden. Push(beter); weg.Doel, pad, weg.Kosten); één van de wegen kom je net vandaan! if ( ! pad. Bevat (weg.Doel) ) { } niet in een kringetje zoeken!

while (... ) { pad =... if (compleet) return pad; for (...) if ( !kring ) paden.Push(...) } return null; Niet de eerste oplossing, maar de beste zoeken! while (... ) { pad =... if (compleet) return pad; for (...) if ( !kring ) paden.Push(...) } return null; beste = null; return beste; beste=pad;if (beter) beste=pad; && !zinloos)

Uitwerking nWat is “beter” ? nWat is “niet zinloos” ? if ( beste==null || pad.Kosten < beste.Kosten ) beste = pad; if ( beste==null || pad.Kosten + weg.Kosten < beste.Kosten ) paden.Push (new Pad (...) );

wegen = new SortedSet ( ordenen qua afstand tot doel Verbetering van het algoritme nDe meest veelbelovende eerst onderzoeken nDus in volgorde van afstand tot naar pushen class Stad : IComparer { { int Compare( Weg a, Weg b) { return this.afstand(b.doel) – this.afstand(a.doel); } );pad.Hier.Wegen, naar moet een lComparer zijn

Routezoeker compleet!