Exceptions Exception: Uitzonderlijke toestand die door een methode wordt opgeworpen De situatie moet door de aanroeper van de methode worden opgevangen throw catch
Voorbeeld van Exception kan een Exception opwerpen try { } s = invoer . Text; n = int . Parse (s); uitvoer . Text = ( "kwadraat is " + n*n ); catch ( Exception e ) { uitvoer . Text = ( s + " is geen getal" ); } opvangen van het probleem
Declaratie Declaratie reserveert geheugenruimte Voor een primitieve waarde zoals be- schreven in struct Size int x; x 5 x = 5; zoals be- schreven in klasse Button Voor een object-waarde s Size s; w 10 s = new Size(10,20); h 20 Voor een object-verwijzing Button b; b b = new Button();
De waarde null null : verwijzing naar niks x null : verwijzing naar niks x = null; null is een geldige waarde voor elk object-verwijzings-type
Exception types NumberFormatException als je iets niet-numerieks probeert te Parsen NullPointerExcpetion als je een member opvraagt van een null object-verwijzing ArithmeticException als je deelt door 0 ...
Voorbeeld: Simulatie van bewegende deeltjes Simulatie - object Ruimte - objecten Deeltje - objecten Button - objecten
Samenhang van objecten Simulatie Samenhang van objecten Button geërfd van Form zelf gedeclareerd r1 r2 r3 stap auto sim Button d1 d2 d3 Ruimte d1 d2 d3 Ruimte d1 d2 d3 Ruimte geërfd van UserControl x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje
Constructie van nieuw object new-expressie doet twee dingen: r1 = new Ruimte ( ) ; r1 Geheugenruimte klaarzetten d1 d2 d3 Ruimte 100 200 Constructormethode aanroepen waarde is pijl naar het nieuwe object die je kunt opslaan
naam is hetzelfde als van de klasse Constructormethode naam is hetzelfde als van de klasse class Ruimte : UserControl { Deeltje d1, d2, d3; Ruimte ( ) { } geen resultaat- type! this . BackColor = Color.LightYellow; this . Paint += this.tekenRuimte; d1 = new Deeltje (...); d2 = new Deeltje (...); d3 = new Deeltje (...); geërfd van UserControl
De klasse Deeltje class Deeltje { int x, y, dx, dy; Brush brush; } int x, y, dx, dy; Brush brush; public Deeltje (...) {...} public void DoeStap (...) {...} public void TekenDeeltje(Graphics g ) {...}
Methoden van klasse Deeltje class Deeltje { } int x, y, dx, dy; Brush brush; public void TekenDeeltje ( Graphics gr) { gr . FillEllipse( this.brush , this.x – 4, this.y – 4 , 9 , 9 ); }
Methoden van klasse Deeltje class Deeltje { } int x, y, dx, dy; Brush brush; public void DoeStap ( ... ) { this.x += this.dx; this.y += this.dy; if (this.x<0) { } this.x = – this.x; this.dx = – this.dx; if (this.y<0) { ... } if (this.x>maxX) { ... } if (this.y>maxY) { ... }
Overzicht van methoden class Simulatie : Form { class Ruimte: UserControl { class Deeltje { Button stap, auto; Ruimte r1, r2, r3; Deeltje d1, d2, d3; int x, y, dx, dy; Brush brush; Ruimte() { d1 = new Deeltje(); Paint += TekenRuimte; } Simulatie() { stap = new Button(); r1 = new Ruimte(); stap.Click += stap_click; } void TekenDeeltje ( Graphics gr) { gr . FillEllipse ( this.brush , this.x – 4, this.y – 4 , 9 , 9 ); } void TekenRuimte (object o, PaintEventArgs pea ) { Graphics gr = pea.Graphics; d1.TekenDeeltje(gr); d2.TekenDeeltje(gr); d3.TekenDeeltje(gr); } void DoeStap ( ... ) { this.x += this.dx; this.y += this.dy; if (this.x<0) { this.x = - this.x; this.dx = - this.dx; } void stap_click (object o, EventArgs ea) { r1.DoeStap( ); r2.DoeStap( ); r3.DoeStap( ); } void DoeStap( ) { d1.DoeStap(this.Size); d2.DoeStap(this.Size); d3.DoeStap(this.Size); this.Invalidate(); } } } }
Hoofdstuk 8.5 Subklassen
Voortborduren op eerder gedaan werk Eerste poging: “knip&plak” class Twee { int x, y; int oud ( ) { return x+y; } class Twee { int x, y; int oud ( ) { return x+y; } Drie int z; +1; } int nieuw ( ) { return x+y+z; } versie-management problematiek }
Voortborduren op eerder gedaan werk veel gedoe Tweede poging: “doorverwijzen” class Twee { int x, y; int oud ( ) { return x+y; } class Twee { Twee t; int oud ( ) { return t.oud(); } Drie int z; } int nieuw ( ) { return t.x+t.y+z; } raar asymmetrisch }
Voortborduren op eerder gedaan werk Derde poging: “subklassen” class Twee { int x, y; int oud ( ) { return x+y; } class Twee : Twee { Drie int z; } int nieuw ( ) { return x+y+z; } }
Subklassen class Ruimte : UserControl Ruimte is een subklasse van UserControl UserControl is de superklasse van Ruimte Elk Ruimte-object is tevens UserControl-object Een Ruimte-object is een bijzonder geval van een UserControl-object
Over-erving Objecten van een subklasse erven variabelen en methoden&properties van de superklasse CirkelGroei geërfd straal kleiner zelf gede- clareerd groter
Klasse en subklasse class Bolletje { class KleurBol : Bolletje { int x, y, diam; Color kleur; void plaats(int x0, int y0) { this.x = x0; this.y = y0; } void verf(Color k) { this.kleur = k; } override void groei( ) { this.diam++; } void teken(Graphics g) { g.FillEllipse( new Brush(kleur) , x, y, diam, diam ); } virtual void teken(Graphics g) { g.DrawEllipse( Pens.Black , x, y, diam, diam ); } g.DrawEllipse( Pens.Black , x, y, diam, diam ); base.teken(g); } } Bolletje b = new Bolletje(); KleurBol k = new KleurBol(); b = k; b.plaats(10,20); k.plaats(10,20 ); b.teken(gr); b.groei ( ); k.verf( Color.Green ); b.teken(gr); k.teken(gr); k = b; b.verf( Color.Red );
deze methode komt uit klasse: Virtual - Override A a = new B (); a . m( ); dit mag, als class B : A deze methode komt uit klasse: B als m virtual in A en override in B A als m new in B
Superklassen in libraries Button : ButtonBase ButtonBase : Control super- superklasse superklasse
Klasse-hiërarchie in Forms Common Dialog Component FileDialog ColorDialog Control Label TrackBar property van ContainerControl ButtonBase Button CheckBox f = new Form(); RadioButton b = new Button(); TextBoxBase TextBox t = new TextBox(); RichTextBox Scrollable Control Container Control f . Controls . Add(b); Form f . Controls . Add(t); UserControl Panel heeft een Control parameter ListView TreeView
Klasse-hiërarchie in Forms Object String Bitmap Graphics moeder van alle klassen EventArgs PaintEventArgs MouseEventArgs KeyPressEventArgs Component CommonDialog Control Label TrackBar ButtonBase
ondergrond gaat voor motorisatie Hiërarchie-ontwerp Vervoer middel Voertuig Boot Motor Voertuig Fiets Boot Zeil Vracht Wagen Stoom Boot Auto Motor Fiets ontwerpkeuze: motorfiets is meer motor dan fiets Vliegtuig ontwerpkeuze: ondergrond gaat voor motorisatie
Hiërarchie-ontwerp “is een” Voertuig Vervoer middel Boot class Voertuig : Vervoermiddel class Boot : Vervoermiddel “is een”
Arrays Array: rij genummerde variabelen declaratie van een array tabel 1 2 3 4 length 5 int [ ] tabel; tabel = new int [5]; creëren van het eigenlijke array-object
(final version) CirkelKlikker ARRAY int x, y; [ ] int n=0; void klik(object o, MouseEA mea) { } this.x = mea.X; this.y = mea.Y; this.Invalidate(); [n] [n] n++; void teken(object o, PaintEA pea) { } Graphics gr = pea.Graphics; ARRAY for (int t=0; t<n; t++) gr.FillEllipse(Brushes.Black, this.x , this.y , 15, 15 ); [t] [t]
Array als parameter int Kleinste ( int [ ] tabel ) { int resultaat; } tabel 1 2 3 4 length 5 12 95 11 23 15 int resultaat; resultaat =tabel [0]; for (int t=0; t<tabel.Length; t++) if (tabel [t] < resultaat) resultaat = tabel [t]; return resultaat;
Twee-dimensionale array blad 5 3 length int [ , ] blad; 1 2 blad = new int [5,3]; 3 88 4 blad[3,1] = 88; 1 2
Hoofdstuk 9.3-4 Strings en arrays
Primitieve types int gehele getallen -17, -5, 0, 3, 178 double reëele getallen 3.141, 2.0, -1.5E8 bool waarheidswaarden false, true char losse symbolen ’A’, ’B’, ’Z’, ’a’, ’4’, ’#’, ’:’
string versus char string char klasse primitief type object-verwijzing directe waarde nul, een of meer… precies één symbool "" "A" "hello" ’A’ operatoren, methoden properties, indexer operatoren == , + == , + , <= Substring, ToUpper Length s[i]
String-methodes int Length bool Equals (string s) string Concat (string s) string Substring (int start) string Substring (int start, int aantal) string ToUpper ( ) string ToLower ( )
concat en substring String s, t, u, v, w; s = "ham"; t = "burger"; hamburger burger burg s = "ham"; t = "burger"; u = s.Concat(t); s + t ; v = u.Substring(3); w = u.Substring(3, 4); 012345678 vanaf aantal hamburger