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