Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdWouter Molenaar Laatst gewijzigd meer dan 9 jaar geleden
1
Hoofdstuk 8.5 Subklassen
2
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;
3
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
4
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
5
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
6
Over-erving nObjecten van een subklasse erven variabelen en methoden&properties van de superklasse kleiner straal CirkelGroei geërfd zelf gede- clareerd groter
7
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 ); base.teken(g); virtual override
8
Superklassen in libraries nButton : ButtonBase nButtonBase : Control superklasse super- superklasse
9
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
10
Klasse-hiërarchie in Forms PaintEventArgs MouseEventArgs KeyPressEventArgs EventArgs ComponentCommonDialog ControlLabel TrackBar ButtonBase Object String Bitmap Graphics moeder van alle klassen
11
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
12
Hiërarchie-ontwerp nclass Voertuig :Vervoermiddel class Boot :Vervoermiddel “is een” Vervoer middel Voertuig Boot
13
class Snelweg : Form { } Snelweg( ) { Paint += teken; } void teken(O o, PEA pea) { for (...t...) rijbaan[t].Teken( pea.Graphics, t*120, 60) } class MVoertuig { } void Teken(Graphics g) { } class Auto : MVoertuig { } void Teken(Graphics g) { gr.Fill ( ); } MVoertuig [ ] rijbaan = new MVoertuig [15];
14
class Snelweg { } Snelweg( ) { Paint += teken; MVoertuig [ ] rijbaan = new MVoertuig [15]; } for (int t=0; t<rijbaan.Length; t++) rijbaan[t] = new Auto(); rijbaan[t] = new VrachtW(); rijbaan[t] = new Combinat(); if ( t%3 != 0 ) else if ( t%6 == 0 ) else
15
class Snelweg { } Snelweg( ) { Paint += teken; } void teken(O o, PEA pea) { for (...t...) rijbaan[t].Teken( pea.Graphics, t*120, 60) } class MVoertuig { } void Teken(Graphics g) { } class Auto : MVoertuig { } void Teken(Graphics g) { gr.Fill ( ); } MVoertuig [ ] rijbaan = new MVoertuig [15]; class VrachtW : MVoertuig { } void Teken(Graphics g) { gr.Fill ( ); } virtual override rijbaan[2] = new Auto(); override
16
class VrachtW : MVoertuig { } void Teken(Graphics g) { } class Combinat : VrachtW { } void Teken(Graphics g) { } g.FillRect(...); g.FillEllipse(...); g.FillRect(...); g.FillEllipse(...); g.DrawLine(...); g.FillRect(...); g.FillEllipse(...); base. Teken(g); versie-management problematiek
17
class VrachtW : MVoertuig { } void Teken(Graphics g) { } class Combinat : VrachtW { } void Teken(Graphics g) { } g.FillRect(...); g.FillEllipse(...); g.FillRect(...); g.FillEllipse(...); g.DrawLine(...); g.FillRect(...); g.FillEllipse(...); base. Teken(g); aanhang. Teken(g); Aanhanger aanhang;
18
class Aanhanger { } void Teken(Graphics g) { } class Combinat : VrachtW { } void Teken(Graphics g) { } g. DrawLine(...); g.FillRect(...); g.FillEllipse(...); g.FillRect(...); g.FillEllipse(...); g.DrawLine(...); g.FillRect(...); g.FillEllipse(...); base. Teken(g); aanhang. Teken(g); Aanhanger aanhang;
19
MotorVoertuigPersonenAuto VrachtwagenCombinatie class PersonenAuto : MotorVoertuig class VrachtWagen : MotorVoertuig class Combinatie : Vrachtwagen “is een” class Motorvoertuig class Aanhanger Aanhanger : DingOpWielen class DingOpWielen { Aanhanger aanh; } “heeft een” DingOpWielen class Wiel Wiel { Wiel [ ] wielen; }
20
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
21
Publieksvraag: Gelijkheid van Strings static bool Gelijk( string s, string t) { } return s==t; Maar dan zonder de bestaande operator == voor strings te gebruiken == voor char en int mag wel
22
Publieksvraag: Gelijkheid van Strings static bool Gelijk( string s, string t) { } int m = s.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { } char c = s[i]; char d= t[i]; if (c!=d) return false; return m==n;
23
Gelijkheid van Strings static bool Equals( string s, string t) { } int m = s.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { } char c = s[i]; char d= t[i]; if (c!=d) return false; return m==n; class String { } this.Length; this[i];
24
Publieksvraag: Ordenen van Strings bool Equals( string t ) { // true als alle letters hetzelfde zijn } class String { } { } int Compare( string t ) // 0 als this en t hetzelfde zijn // positief als this alfabetisch voor t komt // negatief als this alfabetisch na t komt
25
Gelijkheid van Strings bool Equals ( string t) { } int m = this.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { } char c = this[i]; char d= t[i]; if (c!=d) return false; return m==n; class String { }
26
Ordenen van Strings bool Equals ( string t) { } int m = this.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { } char c = this[i]; char d= t[i]; if (c!=d) return false; return m==n; class String { } Compareint c - d ; m - n ;
27
naamtype void () blok parameters methode member
28
naamtype void operator op () blok parameters methode member
29
Gelijkheid van Strings static Gelijk ( string s, string t) { } return s.Equals(t); operator == class String { }
30
naamtype void operator op () blok parameters methode member
31
naamtype void operator op () blok parameters naam()parameters methode constructor member
32
naamtype void operator op () blok parameters naam()parameters methode constructor naamtype, =initialisatieconst ; veld member
33
naamtype void operator op () blok parameters naam()parameters methode constructor naamtype, =initialisatieconst ; veld naamtype{}blok set get member property
34
naamtype void operator op () blok parameters naam()parameters methode constructor naamtype, =initialisatieconst ; veld naamtype{}blok set get typeparameters[]this indexer member property
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.