2e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nOmcirkeld: tentamen2 Achter pijltje: gemiddelde tot nu toe nNeem het.

Slides:



Advertisements
Verwante presentaties
Het type int Tekenen met Java operatoren
Advertisements

Hoofdstuk 2 Hallo, C# !.
Inleidend probleem Data structuur (hiërarchie van classes)
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.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
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.
Over-erving nObjecten van een subklasse erven variabelen en methoden&properties van de superklasse kleiner straal CirkelGroei geërfd zelf gede- clareerd.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Reader en Writer Stream FileStream MemoryStream NetworkStream BufferedStream GZipStream CryptoStream TextWriter StreamWriter StringWriter BinaryWriter.
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
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
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.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 2 inleveropdrachten) college Tent. 1 Tent. 2 college prakt. 1 prakt. 2 prakt.
Resources. Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView :
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Windows-applicatie class HalloWin1 { static void Main ( ) { } Form scherm; scherm = new Form( ); Application.Run(scherm); using System.Windows.Forms; scherm.Text.
Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Meer constructormethodes in klasse Kleur { class Kleur } public byte Rood, Groen, Blauw; public Kleur( byte r, byte g, byte b ) { } Rood=r; Groen=g; Blauw=b;
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.
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
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Char en String
string versus char string char klasse primitief type
Letterfrequentie turven
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Windows-applicatie using System.Windows.Forms; using System.Drawing;
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’,
Gameprogrammeren: Overerving in Painter
Lezen en schrijven van tekst
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Arjan Egges & Paul Bergervoet
Voorbeeld: Simulatie van bewegende deeltjes
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Voortborduren op eerder gedaan werk
Practicum: schets-editor
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Gameprogrammeren: Interfaces
Aanroep van een methode voert opdrachten uit in de body daarvan
Gameprogrammeren: Klassen en objecten
Arjan Egges & Paul Bergervoet
Exceptions Exception:
Eerste deeltentamen Nagekeken werk ligt voor in de zaal
Gameprogrammeren: Arrays
Transcript van de presentatie:

2e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nOmcirkeld: tentamen2 Achter pijltje: gemiddelde tot nu toe nNeem het even mee, de uitwerking wordt in het college besproken nDiscussies over de antwoorden: in de pauze nJe mag het werk behouden

1. Static methode nNiet buiten eigen klasse aanroepen nMag klasse-variabelen niet gebruiken nKan geen nieuwe objecten maken nLevert geen resultaat op ACBBAB BADDCA CBACBD DDCADC

2. Class A : B { C D; } nA is een B nB heeft een C nD heeft een C nC is een A ACBBAB BADDCA CBACBD DDCADC

3. Virtual methode nZonder return-opdracht nZonder body nLege body nHerdefinieerbaar in subklase ACBBAB BADDCA CBACBD DDCADC

4. Wat is expressie base in de body van method M in klasse K nSuperklasse van K nMethode M in superklasse van K nthis, met superklasse van K als type nConstructor van superklasse van K ACBBAB BADDCA CBACBD DDCADC

5. Array-elementen opsommen tussen accolades mag… nWel in member, niet lokaal nWel in declaratie, niet in toekenning nWel 1D, niet 2D nWel getallen, niet objecten ACBBAB BADDCA CBACBD DDCADC

6. A b = new C() mag… nAls constructor A virtual is nAls constructor C gecast naar A nAls constructor C gedefinieerd in A nAls C subklasse van A ACBBAB BADDCA CBACBD DDCADC

7. Uitkomst van '2' + 3 n53 n5 n'5' n"23" ACBBAB BADDCA CBACBD DDCADC

8. Aantal variabelen array nVastgelegd bij declaratie nVastgelegd als array gecreëerd nGroeit door toekenning a[t]=… nGroeit door opdracht a++ ACBBAB BADDCA CBACBD DDCADC

9. Wat fout in nQuotes ontbreken in a[t]=='x' nArray a niet new aangemaakt nelse moet weg nVervang if/else door return a[t]==x; ACBBAB BADDCA CBACBD DDCADC bool Bevat( char[] a, char x) { for (int t=0; y<a.Length; t++) if (a[t]==x) return true; else return false }

10. Twee buttons met één event-handler Onderscheiden door… nKan niet nProperty van EventArgs-parameter nObject-parameter nProperty van de button ACBBAB BADDCA CBACBD DDCADC

11. Syntax/semantiek van try-catch nSyntax: nSemantiek: Voer opdrachten in blok1 uit Als er daarbij een exception optreedt van type zoals gedeclareerd, voer bijbehorend blok2 uit tryblok1catch(blok2)declaratie

12. Aanroepen van get/set minimethoden van property nGet: gebruik de property in een expressie nSet: gebruik property links van een toekenning nValue: heft de waarde van de rechterkant van die toekenning

13. String is immutable nInhoud van het object verandert niet meer nadat het is gecreëerd met new (niet: nadat het is gedeclareerd) nIndexer-property van string heeft wel een get, maar geen set (niet: is private)

14. Exceptions nNull pointer exception: als je van een objectverwijzing die niet naar een object wijst, toch een membervariabele gebruikt nArray bound exception: Als je een array gebruikt met een index die >=Length of <0

15. Aangeklikte punten tekenen vauit muisklik nGeen goed idee, want punten verdwijnen als window hertekend wordt (bijvoorbeeld na geminimaliseerd te zijn) nZet alle punten in een array, teken ze allemaal in Paint-eventhandler, doe Invalidate in MouseClick-eventhandler

16. Animatie nThread t = new Thread(run); nt.Start(); nvoid Run() { while(true) { pos.X ++; this.Invalidate(); Thread.Sleep(50); } }

17. String. Substring/Contains class String { } string Substring(int start, int lengte) { } return res; string res; res += this[start+t]; for (int t=0; t<lengte ; t++) && start+t<this.Length bool Contains(string s) { } for (int t=0; t<this.Length; t++) if (this.Substring(t, s.Length) == s) return true; return false;

18. Turven int [ ] turf = new int [11]; for (int t=0; t<cijfers.Length; t++) cijfers [t]turf [] for (int t=0; t<turf.Length; t++) pea.Graphics.FillRectangle ( Brushes.Black, 50, 20 *t, 10 * turf[t], 18 ); (int)++;

Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a; a = new List(); …a.Get(5)… a.Set(5,…); …a.Count… array: oject dat een rij waarden bevat, met speciale notaties List: array “ingepakt” in een klasse, met standaard notaties nInvoegen nAchtervoegen a.Insert(5,…); List a; a = new List (); a.Add(…); uitgebreide ……a[5]…… a[5] = ……;

Voorbeeld: array class Voorbeeld : Form { } Voorbeeld ( ) { } void klik(object o, AE ae) { } TextBox in; Button b; void teken(object o, PEA pea) { } in = new TextBox(); b = new Button(); b.Click += klik; this.Paint += teken; String s = in.Text; alles[n] = s; n++; this.Invalidate(); String [] alles; int n; alles = new String[100]; n = 0; for (int t=0; t<n; t++) { pea.Graphics.DrawString( alles[t],......, y ); y+=20; } int y = 50; if (n<100) { }

Voorbeeld: array class Voorbeeld : Form { } Voorbeeld ( ) { } void klik(object o, AE ae) { } TextBox in; Button b; void teken(object o, PEA pea) { } in = new TextBox(); b = new Button(); b.Click += klik; this.Paint += teken; String s = in.Text; alles[n] = s; n++; this.Invalidate(); String [] alles; int n; alles = new String[100]; n = 0; for (int t=0; t<n; t++) { pea.Graphics.DrawString( alles[t],......, y ); y+=20; } int y = 50; if (n<100) { } List List alles; alles = new List ( ); alles.Add(s); alles[t] alles.Count;t++)

Hoe is List gemaakt? class List { } Elem [] elems; int n; © List () { elems = new Elem[10]; n = 0; } Elem Get (int p) { return elems[p]; } int Count { get { return n; } } void Add(Elem e) { } elems[n]=e; n++; if (n>=elems.Length) vergroot(); private void vergroot() { } Elem [] kopie; kopie= new Elem[2*n]; for (int t=0; t<n; t++) kopie[t] = elems[t] elems = kopie; this [int p] get { }

Kan het ook anders? class List { } Elem [] elems; int n; © List () { elems = new Elem[10]; n = 0; } Elem Get (int p) { return elems[p]; } int Count { get { return n; } } void Add(Elem e) { } elems[n]=e; n++; if (n>=elems.Length) vergroot(); private void vergroot() { } Elem [] kopie; kopie= new Elem[2*n]; for (int t=0; t<n; t++) kopie[t] = elems[t] elems = kopie; n*=2; this [int p] get { }

Ja: je kunt een List maken zonder dat een array nodig is class AndereList { } …… © AndereList () { …… } Elem this[int p] { …… } int Count { …… } void Add(Elem e) { …… } null 3

Ja: je kunt een List maken zonder dat een array nodig is class AndereList { } …… © AndereList () { …… } Elem this[int p] { …… } int Count { …… } void Add(Elem e) { …… } null 3

Ja: je kunt een List maken zonder dat een array nodig is class AndereList { } …… interface IList { } int Count { get; } ; void Clear(); void Add(Elem e) ; Elem this [int p] { get; set; }; void Insert (int p, Elem e); © AndereList () { …… } Elem this[int p] { …… } int Count { …… } void Add(Elem e) { …… }

Namespace System.Collections.Generic List Andere List IList interfacediverse implementaties

Voorbeeld: List class Voorbeeld : Form { } Voorbeeld ( ) { } void klik(object o, AE ae) { } TextBox in; Button b; void teken(object o, PEA pea) { } in = new TextBox(); b = new Button(); b.Click += klik; this.Paint += teken; String s = in.Text; alles[n] = s; n++; this.Invalidate(); alles = new String[100]; n = 0; for (int t=0; t<n; t++) { pea.Graphics.DrawString( alles[t],......, y ); y+=20; } int y = 50; List alles; alles = new List ( ); alles.Add(s); alles[t] alles.Count;t++) IList alles; AndereList

Varianten van List ICollectionIList ISet interface ICollection { void Add(Elem x); bool Remove(Elem x); bool Contains(Elem x); int Count { get; }; void Clear(); } interface IList : ICollection { Elem this[int n] { get; set; } ; int IndexOf(Elem x); void Insert(int n, Elem x); void RemoveAt(int n); } genummerd zonder dubbele

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

Voorbeeld: Collection class Voorbeeld : Form { } Voorbeeld ( ) { } void klik(object o, AE ae) { } TextBox in; Button b; void teken(object o, PEA pea) { } in = new TextBox(); b = new Button(); b.Click += klik; this.Paint += teken; String s = in.Text; alles[n] = s; n++; this.Invalidate(); alles = new String[100]; n = 0; for (int t=0; t<n; t++) { pea.Graphics.DrawString( alles[t],......, y ); y+=20; } int y = 50; List alles; alles = new List ( ); alles.Add(s); alles[t] alles.Count;t++) IList alles; ICollection alles; LinkedList

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 ;; Speciale syntax voor specifieke situatie met bepaalde klasse typeexprinnaamforeach()opdracht

Implementaties van Collections IEnumerable IEnumerator IComparator LinkedList Queue Stack List HashSet SortedSet SortedList Sorted Dictionary IList ISet IDictionary ICollection

Toepassing: schets-editor SchetsWin Tools Akties Menu MDI- Container SchetsControl

Schets: Klasse-ontwerp Control Form UserControl Hoofdscherm SchetsWin SchetsControl Schets ImageBitmap Button Base Button RadioButton SchetsEditor System.Windows.Forms System.Drawing Program Container Control

Schets: Klasse-ontwerp Control Form UserControl Hoofdscherm SchetsWin SchetsControl Schets ImageBitmap Button Base Button RadioButton SchetsEditor System.Windows.Forms System.Drawing Program Container Control ISchetsTool TekstTool LijnTool PenTool GumTool RechthTool VolRechthTool TweepuntTool Startpunt Tool

Member-variabelen class SchetsWinclass SchetsControlclass Schets : Form: UserControl { } { } { } MenuStrip strip; SchetsControl sc; ISchetsTool huidig; Schets schets; Color kleur; Bitmap bm;

Schoonmaakwerk doen class SchetsWinclass SchetsControlclass Schets : Form: UserControl { } { } { } MenuStrip strip; SchetsControl sc; ISchetsTool huidig; Schets schets; Color kleur; Bitmap bm; void teken(...PEA p) { } schets.Teken (p.Graphics); void Teken (Graphics g) { } gr.DrawImage (bm, 0, 0); void Schoon(...AE a) { } schets.Schoon(); void Schoon( ) { } this.Invalidate(); Graphics. FromImage(bm); Graphics g = g.FillRectangle (White,0,0,w,h); SchetsWin() { } sc = new SchetsControl(); this.maakAkties(); void maakAkties() { } Button b b.Text = "Clear"; b.Click += sc.Schoon; = new Button();

Tool kiezen class SchetsWin : Form { } MenuStrip strip; SchetsControl sc; ISchetsTool huidig; void klikTool ( object obj, AE ae ) { } huidig = obj. Tag(Button)() (ISchetsTool) void maakTools( { } ICollection tools) foreach (ISchetsTool tool in tools) { } RadioButton r = new RadioButton(); r.Text = tool.ToString(); r.Click += this.klikTool; r.Tag = tool;

Tool gebruiken class SchetsWin : Form { } MenuStrip strip; SchetsControl sc; ISchetsTool huidig; SchetsWin ( ) { } sc.MousePress += void klikTool ( object obj, AE ae ) { } huidig = obj. Tag(Button)() (ISchetsTool) sc = new SchetsControl ( ); this.muis; void muis ( object o, MEA mea) { } huidig.MuisVast( interface ISchetsTool { } void MuisVast( mea.Location) Point p); sc, SchetsControl s,

Tool gebruiken class SchetsWin : Form { } MenuStrip strip; SchetsControl sc; ISchetsTool huidig; SchetsWin ( ) { sc.MousePress += void klikTool ( object obj, AE ae ) { } huidig = obj. Tag(Button)() (ISchetsTool) sc = new SchetsControl ( ); ( object o, MEA mea) { } huidig.MuisVast( sc, mea.Location); interface ISchetsTool { } void MuisVast( Point p); SchetsControl s, } => anonieme methode

Schets-tools (1) ISchetsTool interface ISchetsTool { } void muisVast ( SchetsControl s, Point p) ; void muisLos ( SchetsControl s, Point p) ; void muisDrag ( Schetscontrol s, Point p ) ; void Letter ( SchetsControl s, char k) ;

Schets-tools (2) ISchetsTool Startpunt Tool abstract class StartpuntTool : ISchetsTool { } virtual void MuisVast ( SchetsControl s, Point p) {startpunt = p; } Point startpunt ; abstract void MuisDrag ( SchetsControl s, Point p) ; abstract void Letter ( SchetsControl s, Point p) ; virtual void MuisLos ( SchetsControl s, Point p) {kwast = new SolidBrush( s.Penkleur ); } Brush kwast ;

Schets-tools (3) ISchetsTool TekstTool Startpunt Tool class TekstTool : StartpuntTool { } override void Letter ( SchetsControl s, char c) { } Graphics g = s. MaakBitmapGraphics(); g. DrawString( c, kwast,..., startpunt ); startpunt.x += ……c….Width; override void MuisDrag ( SchetsControl s, Point p) { } override void MuisLos ( SchetsControl s, Point p) { }

Schets-tools (4) ISchetsTool TekstTool Tweepunt Tool Startpunt Tool abstract class TweepuntTool : StartpuntTool { } override void MuisDrag ( SchetsControl s, Point p) { } Graphics g = s. CreateGraphics(); this. Bezig (g, startpunt, p); abstract void Bezig (Graphics g, Point p1, Point p2) ; override void MuisLos ( SchetsControl s, Point p) { Graphics g = s. MaakBitmapGraphics(); this. Compleet (g, startpunt, p); } virtual void Compleet (Graphics g, Point p1, Point p2) { this. Bezig (g, p1, p2); }

Schets-tools (5) Tool Rechthoek Tool TekstTool Tweepunt Tool Startpunt Tool class RechthoekTool : TweepuntTool { } override void Bezig ( Graphics g, Point p1, Point p2 ) g. DrawRectangle(kwast, Punten2Rechthoek(p1,p2) ); { } static Rectangle Punten2Rechthoek(Point p1, Point p2) { } return new Rectangle( new Point( Math.Min(p1.X,p2.X), Math.Min(p1.Y,p2.Y)) new Size ( Math.Abs(p1.X-p2.X), Math.Abs(p1.Y-p2.Y)) );

Schets-tools (6) Tool TekstTool Tweepunt Tool Startpunt Tool class VolRechthoekTool : RechthoekTool { } override void Compleet ( Graphics g, Point p1, Point p2 ) { } Rechthoek Tool VolRechth Tool g. FillRectangle(kwast, Punten2Rechthoek(p1,p2) );

Schets-tools (7) Tool LijnToolTekstTool Tweepunt Tool Startpunt Tool class LijnTool : TweepuntTool { } override void Bezig ( Graphics g, Point p1, Point p2 ) { } g. DrawLine( MaakPen(kwast,3), p1, p2 ); Rechthoek Tool VolRechth Tool

Schets-tools (8) Tool LijnToolPenToolTekstTool Tweepunt Tool Startpunt Tool class PenTool : LijnTool { } override void MuisDrag ( SchetsControl s, Point p ) { } this. MuisLos (s, p); this. MuisVast (s, p); Rechthoek Tool VolRechth Tool

Schets-tools (9) Tool LijnTool PenToolGumTool TekstTool Tweepunt Tool Startpunt Tool class GumTool : PenTool { } override void Bezig ( Graphics g, Point p1, Point p2 ) { } Rechthoek Tool VolRechth Tool g. DrawLine( MaakPen(Brushes.White,7), p1, p2 );