Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen throw catch
Voorbeeld van Exception s = invoer. Text; n = int. Parse (s); uitvoer. Text = ( "kwadraat is " + n*n ); try { } catch ( Exception e ) { uitvoer. Text = ( s + " is geen getal" ); } kan een Exception opwerpen opvangen van het probleem
x Declaratie Declaratie reserveert geheugenruimte nVoor een object-verwijzing int x; x = 5; 5 b zoals be- schreven in klasse Button nVoor een object-waarde Button b; b = new Button(); Size s; s = new Size(10,20); h0 w zoals be- schreven in struct Size nVoor een primitieve waarde s
De waarde null nnull : verwijzing naar niks x = null; x nnull is een geldige waarde voor elk object-verwijzings-type
Exception types nNumberFormatException als je iets niet-numerieks probeert te Parsen nNullPointerExcpetion als je een member opvraagt n…
sim Samenhang van objecten Simulatie r1r2r3 stap auto d1d2d3 Ruimte d1d2d3 Ruimte x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje d1d2d3 Ruimte Button x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje geërfd van Form zelf gedeclareerd geërfd van UserControl
Overzicht van klassen nclass Simulatie : Form uSimulatie( ) ustap_Click, auto_Click(object o, EventArgs ea) nclass Ruimte : UserControl uRuimte( ) uTekenRuimte( object o, PaintEventArgs pea ) uDoeStap( ) nclass Deeltje uDeeltje(... ) uTekenDeeltje( Graphics g ) uDoeStap( Size s )
class Simulatie : Form { Overzicht van methoden } class Ruimte: UserControl { } class Deeltje { } void TekenRuimte (object o, PaintEventArgs pea ) { Graphics gr = pea.Graphics; d1.TekenDeeltje(gr); d2.TekenDeeltje(gr); d3.TekenDeeltje(gr); } void DoeStap( ) { d1.DoeStap(this.Size); d2.DoeStap(this.Size); d3.DoeStap(this.Size); this.Invalidate(); } void stap_click (object o, EventArgs ea) { r1.DoeStap( ); r2.DoeStap( ); r3.DoeStap( ); } int x, y, dx, dy; Brush brush; Deeltje d1, d2, d3; Button stap, auto; Ruimte r1, r2, r3; void DoeStap (... ) { this.x += this.dx; this.y += this.dy; if (this.x<0) { this.x = - this.x; this.dx = - this.dx; } void TekenDeeltje ( Graphics gr) { gr. FillEllipse ( this.brush, this.x – 4, this.y – 4, 9, 9 ); } Simulatie() { stap = new Button(); r1 = new Ruimte(); stap.Click += stap_click; } Ruimte() { d1 = new Deeltje(); Paint += TekenRuimte; }
Maak een animatie animatie. Start ( );this. run ( ); roept de methode aan die bij constructor is meegegeven Thread animatie; animatie = new Thread ( this.run ); en keert dan direct terug (terwijl de methode nog bezig is)
De methode run class Simulatie : Form { } void run ( ) { while (true) this. stap_Click (this, null ); {}{} oneindige herhaling! Thread. Sleep (50); milliseconden }
Starten van de animatie class Simulatie : Form { } void auto_Click(object o, EventArgs ea ) { } if (beweegt) { auto.Text = "Start"; beweegt = false; } else { } animatie = new Thread( this.run ); animatie. Start ( ); auto.Text = "Stop"; beweegt = true; Thread animatie; bool beweegt;
De methode run nogmaals class Simulatie : Form { } void run ( ) { while (true) this. stap_Click (this, null ); {}{} oneindige herhaling! Thread. Sleep (50); milliseconden } ( this.beweegt ) eindige herhaling.
Handiger Starten van de animatie class Simulatie : Form { } void auto_Click(object o, EventArgs ea ) { } if (beweegt) { auto.Text = "Start"; beweegt = false; } else { } animatie = new Thread( this.run ); animatie. Start ( ); auto.Text = "Stop"; beweegt = true; Thread animatie; bool beweegt; (animatie != null ) animatie = null;
Hoofdstuk 8.5 Subklassen
versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud ( ) { return x+y; } } class Twee { int x, y; int oud ( ) { return x+y; } } int z; int nieuw ( ) { return x+y+z; } Drie +1;
raar asymmetrisch veel gedoe Voortborduren op eerder gedaan werk nTweede poging: “doorverwijzen” class Twee { int x, y; int oud ( ) { return x+y; } } class Twee { Twee t; int oud ( ) { return t.oud(); } } int z; int nieuw ( ) { return t.x+t.y+z; } Drie
Voortborduren op eerder gedaan werk nDerde poging: “subklassen” class Twee { int x, y; int oud ( ) { return x+y; } } class Twee : Twee { } int z; int nieuw ( ) { return x+y+z; } Drie
Subklassen nclass Ruimte : UserControl nRuimte is een subklasse van UserControl nUserControl is de superklasse van Ruimte nElk Ruimte-object is tevens UserControl-object nEen Ruimte-object is een bijzonder geval van een UserControl-object
Over-erving nObjecten van een subklasse erven variabelen en methoden&properties van de superklasse kleiner straal CirkelGroei geërfd zelf gede- clareerd groter
Klasse en subklasse class Bolletje { } int x, y, diam; void plaats(int x0, int y0) { this.x = x0; this.y = y0; } void groei( ) { this.diam++; } void teken(Graphics g) { g.DrawEllipse( Pens.Black, x, y, diam, diam ); } class KleurBol : Bolletje { } Color kleur; void verf(Color k) { this.kleur = k; } void teken(Graphics g) { g.FillEllipse( new Brush(kleur), x, y, diam, diam ); } g.DrawEllipse( Pens.Black, x, y, diam, diam ); Bolletje b = new Bolletje(); b.plaats(10,20); b.teken(gr); KleurBol k = new KleurBol(); k.plaats(10,20 ); k.teken(gr); b.verf( Color.Red ); b.groei ( ); k.verf( Color.Green ); b.teken(gr); b = k; k = b; base.teken(g); virtual override
Virtual - Override A a = new B (); dit mag, als class B : A a. m( ); deze methode komt uit klasse: nB als m virtual in A en override in B nA anders
Superklassen in libraries nButton : ButtonBase nButtonBase : Control superklasse super- superklasse
property van ContainerControl Klasse-hiërarchie in Forms ButtonBaseButton CheckBox RadioButton TextBox RichTextBox TextBoxBase Container Control Form UserControl Panel Label TrackBar Scrollable Control ListView TreeView FileDialog ColorDialog Component Control Common Dialog b = new Button(); f = new Form(); f. Controls. Add(b); t = new TextBox(); f. Controls. Add(t); heeft een Control parameter
Klasse-hiërarchie in Forms PaintEventArgs MouseEventArgs KeyPressEventArgs EventArgs ComponentCommonDialog ControlLabel TrackBar ButtonBase Object String Bitmap Graphics moeder van alle klassen
Hiërarchie-ontwerp ontwerpkeuze: ondergrond gaat voor motorisatie ontwerpkeuze: motorfiets is meer motor dan fiets Vervoer middel Auto Motor Fiets Voertuig Boot Vliegtuig Vracht Wagen Stoom Boot Motor Voertuig Fiets Motor Boot Zeil Boot
Hiërarchie-ontwerp nclass Voertuig :Vervoermiddel class Boot :Vervoermiddel “is een” Vervoer middel Voertuig Boot
Hoofdstuk 9 Arrays
CirkelKlikker void klik(object o, MouseEA mea) { } void teken(object o, PaintEA pea) { } this.x = mea.X; this.y = mea.Y; this.Invalidate(); gr.FillEllipse(Brushes.Black, this.x, this.y, 15, 15 ); int x, y; (poging 1) Graphics gr = pea.Graphics; tekent alleen laatste cirkel
CirkelKlikker void klik(object o, MouseEA mea) { } gr.FillEllipse(Brushes.Black, mea.x, mea.y, 15, 15 ); (poging 2) Graphics gr = this.CreateGraphics(); hertekent het window niet wanneer nodig
CirkelKlikker void klik(object o, MouseEA mea) { } void teken(object o, PaintEA pea) { } this.x = mea.X; this.y = mea.Y; this.Invalidate(); gr.FillEllipse(Brushes.Black, this.x, this.y, 15, 15 ); int x, y; (final version) Graphics gr = pea.Graphics; ARRAY for (int t=0; t<n; t++) [t] [n] int n=0; [ ] n++;
Arrays nArray: rij genummerde variabelen tabel length5 int [ ] tabel; new int [5];tabel = declaratie van een array creëren van het eigenlijke array-object
Gebruik van een array n’t zijn echte variabelen: tabel length5 tabel [2] = 37; tabel[4] = tabel [2] + 5; if (tabel.Length<10)... tabel.Length = 10; Length is een read-only property
Gebruik van een array nvariabele als index in de array tabel length5 tabel [0] = 42; tabel [1] = 42; tabel [2] = 42; tabel [3] = 42; tabel [4] = 42; 42 tabel [t] = 42; for (t=0; t<5; t++)
Exception types nNumberFormatException als je iets niet-numerieks probeert te Parsen nNullPointerExcpetion als je een member opvraagt nArrayBoundEception als je een array-waarde buiten de grenzen opvraagt
Array als parameter tabel length int Kleinste ( int [ ] tabel ) { } int resultaat; return resultaat; if (tabel [t] < resultaat) resultaat = tabel [t]; for (t=0; t<tabel.Length; t++) int t; resultaat =tabel [0];
Deel van de array doorzoeken tabel length int Kleinste ( int [ ] tabel ) { } int resultaat; return resultaat; if (tabel [t] < resultaat) resultaat = tabel [t]; for (t=0; t<tabel.Length; t++) int t; resultaat =tabel [0]; aantal, int aantal) static
CirkelKlikker void teken(object o, PaintEA pea) { } gr.FillEllipse(Brushes.Black, this.x[t], this.y[t], 15, 15) ; int [ ] x, y; int n; (final version) Graphics gr = pea.Graphics; ARRAY for (int t=0; t<n; t++) int minX = Bieb.Kleinste(x,n)–r; int r=7; int maxX = Bieb.Grootste(x,n)+r; int minY = Bieb.Kleinste(y,n)–r; int maxY = Bieb.Grootste(y,n)+r; gr.DrawRectangle(Brushes.Blue, minX, minY, maxX-minX, maxY-minY ) ;
Syntax van array-type type int short sbyte long decimal double float char bool uint ushort byte ulong struct naam class naam object string waarde verwijzing [], array
Array van getallen tabel int [ ] tabel; new int [5];tabel = length5
Array van struct-objecten tabel Point [ ] tabel; new Point[5]; tabel = length5
Array van class-objecten tabel Button [ ] tabel; new Button[5]; tabel = length5 for (int t=0; t<5; t++) tabel[t] = new Button();
Twee-dimensionale array tabel int [, ] tabel; new int [5,3]; tabel = length tabel.GetLength(0) tabel.GetLength(1)
Array van arrays tabel int [ ] [ ] tabel; new int[5][]; tabel = length5 for (int t=0; t<5; t++) tabel[t] = new int[t];
Drie-dimensionale array tabel int [,, ] tabel; new int [5,3,2]; tabel = length
Declaratie declaratie naamtype, =initialisatieconst ; var met intitialisatie initialisatie expressie initialisatie}{, string [ ] woorden = { "aap", "noot", "mies" }; int [ ] maand = { 31,28,31,30,31,30,31,31,30,31,30,31 }; int [, ] demo = { {1,2,3,4}, {5,6,7,8} };