De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.

Verwante presentaties


Presentatie over: "Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud."— Transcript van de presentatie:

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


Download ppt "Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud."

Verwante presentaties


Ads door Google