130 likes | 253 Views
Hoofdstuk 8.5. Subklassen. Voortborduren op eerder gedaan werk. Eerste poging: “knip&plak”. class Twee { int x, y; int oud ( ) { return x+y; }. Drie. class Twee { int x, y; int oud ( ) { return x+y; }. int z;. +1;. }. int nieuw ( )
E N D
Hoofdstuk 8.5 Subklassen
Voortborduren opeerder gedaan werk • Eerste poging: “knip&plak” class Twee { int x, y; int oud ( ) { return x+y; } Drie class Twee { int x, y; int oud ( ) { return x+y; } int z; +1; } int nieuw ( ) { return x+y+z; } versie-management problematiek }
Voortborduren opeerder gedaan werk veel gedoe • Tweede poging: “doorverwijzen” class Twee { Twee t; int oud ( ) { return t.oud(); } Drie class Twee { int x, y; int oud ( ) { return x+y; } int z; } int nieuw ( ) { return t.x+t.y+z; } raar asymmetrisch }
Voortborduren opeerder gedaan werk • Derde poging: “subklassen” class Twee : Twee { Drie class Twee { int x, y; int oud ( ) { return x+y; } 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 subklasseerven variabelen en methoden&propertiesvan de superklasse CirkelGroei geërfd kleiner straal zelf gede-clareerd groter
Klasse en subklasse class Bolletje { class KleurBol : Bolletje { int x, y, diam; Color kleur; void verf(Color k){ this.kleur = k; } void plaats(int x0, int y0){ this.x = x0; this.y = y0; } 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 );
Virtual - Override A a = new B (); a . m( ); dit mag, alsclass B : A deze methodekomt uit klasse: • B als m virtual in A en override in B • A anders
Superklassen in libraries • Button : ButtonBase • ButtonBase : Control super- superklasse superklasse
Klasse-hiërarchie in Forms CommonDialog Component FileDialog ColorDialog Control Label TrackBar property vanContainerControl ButtonBase Button CheckBox f = new Form(); RadioButton b = new Button(); TextBoxBase TextBox t = new TextBox(); RichTextBox ScrollableControl ContainerControl f . Controls . Add(b); Form f . Controls . Add(t); UserControl Panel heeft eenControlparameter ListView TreeView
Klasse-hiërarchie in Forms Object String Bitmap Graphics moeder vanalle klassen EventArgs PaintEventArgs MouseEventArgs KeyPressEventArgs Component CommonDialog Control Label TrackBar ButtonBase
Voertuig Motor Voertuig Auto Vracht Wagen Motor Fiets Fiets Vliegtuig Boot Motor Boot Stoom Boot Zeil Boot Hiërarchie-ontwerp Vervoer middel ontwerpkeuze: motorfiets is meer motor dan fiets ontwerpkeuze: ondergrond gaatvoor motorisatie
Hiërarchie-ontwerp Voertuig Vervoer middel • class Voertuig : Vervoermiddelclass Boot : Vervoermiddel Boot “is een”