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 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

4 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

5 Klasse-hiërarchie in Forms PaintEventArgs MouseEventArgs KeyPressEventArgs EventArgs ComponentCommonDialog ControlLabel TrackBar ButtonBase Object String Bitmap Graphics moeder van alle klassen

6 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

7 Hiërarchie-ontwerp nclass Voertuig :Vervoermiddel class Boot :Vervoermiddel “is een” Vervoer middel Voertuig Boot

8 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];

9 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

10 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

11 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

12 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;

13 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;

14 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; }

15 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

16 Arrays nArray: rij genummerde variabelen tabel 0 1 2 3 4 length5 int [ ] tabel; new int [5];tabel = declaratie van een array creëren van het eigenlijke array-object

17 CirkelKlikker void klik(object o, MouseEA mea) { } void teken(object o, PaintEA pea) { } this.x = mea.X; this.y = mea.Y; this.Invalidate(); gr.FillEllipse(Brushes.Black, this.x, this.y, 15, 15 ); int x, y; (final version) Graphics gr = pea.Graphics; ARRAY for (int t=0; t<n; t++) [t] [n] int n=0; [ ] n++;

18 Array als parameter tabel 0 1 2 3 4 length5 12 95 11 23 15 int Kleinste ( int [ ] tabel ) { } int resultaat; return resultaat; if (tabel [t] < resultaat) resultaat = tabel [t]; for (t=0; t<tabel.Length; t++) int t; resultaat =tabel [0];

19 Hoofdstuk 9.3-4 Strings en arrays

20 Primitieve types nint gehele getallen-17, -5, 0, 3, 178 ndouble reëele getallen3.141, 2.0, -1.5E8 nbool waarheidswaarden false, true nchar losse symbolen’A’, ’B’, ’Z’, ’a’, ’4’, ’#’, ’:’

21 string versus char nstringchar nklasseprimitief type nobject-verwijzingdirecte waarde nnul, een of meer…precies één symbool n"" "A" "hello" ’A’ noperatoren, methoden properties, indexeroperatoren u==, +==, +, <= uSubstring, ToUpper uLength us[i]

22 String-methodes nint Length nboolEquals(string s) nstringConcat(string s) nstringSubstring(int start) nstringSubstring(int start, int aantal) nstringToUpper( ) nstringToLower( )

23 concat en substring nString s, t, u, v, w; ns = “ham”; nt = “burger”; nu = s.Concat(t); nv = u.Substring(3); nw = u.Substring(3, 4); s t u v w hamburger hamburger burger burg hamburger 012345678 s + t ; vanaf aantal

24 Publieksvraag nSchrijf een methode Beginstuk met twee string-parameters x en y die bepaalt of x het beginstuk van y is nSchrijf een methode Onderdeel met twee string-parameters x en y die bepaalt of x ergens als substring van y voorkomt

25 Methode Beginstuk (string x, string y)boolpublic static kortlang {}{} y. Substring( 0, x.Length ) x == return ; Beginstuk

26 Methode Onderdeel (string x, string y)boolpublic static {}{} Onderdeel y. Substring(t) Beginstuk(x, ) if ( ) return true; for (t=0; t<y.Length; t++) return false; int t;

27 Meer string-methodes nboolStartsWith(string s) nboolEndsWith(string s) nintindexOf(string s) public static bool Onderdeel(string x, string y) { return y.IndexOf(x)>=0 ; }

28 string versus array nKlassen Type met speciale syntax nSpeciale index-notatie string s = new string();char[] a = new char[10]; c = a[2];a[3] = c; nSpeciale quote-notatie s = "hallo"; nProperty a.Length nProperty s.Length nMethoden s.Substring(3,2); s.IndexOf(t); nIndexer -notatie c = s[2];s[3] = c;

29 Publieksvraag n//schrijf een static methode die telt hoe // vaak een symbool voorkomt in een string n//voorbeeld-aanroep: int n; n = Demo. Freq(’e’, "some text" ); n// hint: gebruik een for opdracht

30 Tel symbool-frequentie public static int Freq(char x, string s) { s[t]==x for (int t=0; t<s.Length; t++) if ( ) aantal++; int aantal; aantal = 0; return aantal; }

31 IBM/DOS Geschiedenis van char n1970s:6 bits = 64 symbols 26 letters, 10 digits, 28 leestekens n1980s: 7 bits = 128 symbols +26 lowercase, +5 leestekens, 33 control n1990s: 8 bits = 256 symbols +letters met accenten n2000s: 16 bits = 65536 symbols +Grieks, Cyrillisch, Japans, Devangari,... ASCII ANSI/ISO Unicode

32 Character coding code 0 code 127 code 48 code 32 code 65 code 97

33 char bijzonderheden nalfabetisch geordend char c; if ( ’A’<=c && c<=’Z’ ) … nconverteerbaar naar int int n; n = c + 32; nen terug c = (char) n;

34 Conversies nConversie naar “grotere” waarde kan altijd double d; int n; d = n; int n; char c; n = c; Control x; Button b; x = b; nConversie naar “kleinere” waarde is gevaarlijk n = (int) d;c = (char) n;b = (Button) x;

35 twee tekens in de broncode, toch één character! Speciale char-waarden nLetterlijk symbool nSpeciaal symbool nHet quote-symbool nHet backslash-symbool ’A’ ’\n’ ’\’’ ’\\’ ’&’ ’\t’ ’\”’

36 LetterTeller TextBox invoer Label uitvoer StaafDiagram diagram class LetterTeller : Form class StaafDiagram : UserControl class TurfTab

37 Letterteller hoofdklasse class LetterTeller : Form { } TextBox invoer; Label uitvoer; StaafDiag diagram; LetterTeller() { invoer = new TextBox(); invoer.MultiLine = true; uitvoer = new Label(); diagram = new StaafDiag(); } invoer. TextChanged += this.Bereken; void Bereken(object o, EventArgs ea) { } TurfTab tabel = new TurfTab(); invoer.Text tabel.Turf ( ); tabel.ToString() uitvoer.Text = ; tabel.Waardesdiagram.Waardes =;

38 De klasse TurfTab public class TurfTab { private int [ ] tellers; private int totaal; public TurfTab ( ){... } public void Turf (string s){... } override public string ToString ( ) {... } private void turf (char c){... } } klasse-ontwerp: wat is... & wat kan... & hoe? public int Totaal {... } public int[] Waardes{... }

39 De klasse TurfTab public class TurfTab { private int [ ] tellers; private int totaal; public TurfTab ( ) { } tellers = new int [26]; } public void Turf (string s) { } this.turf ( s[t] ); for (t=0; t<s.Length; t++) int t;

40 public class TurfTab { private int [ ] tellers; private int totaal; De klasse TurfTab private void turf (char c) { } tellers [ ] ++; totaal++; } if (c>='A' && c<='Z') { } c - 'A' if (c>='a' && c<='z') { tellers [ c - 'a' ] ++; totaal++; }

41 public class TurfTab { private int [ ] tellers; private int totaal; t + ":" + tellers[t] + "keer\n" ; De klasse TurfTab override public string ToString( ) { } } string result; return result; result = ""; result += for (t=0; t<26; t++) int t; result += "totaal:" + totaal; ( + 'A')(char)

42 public class TurfTab { private int [ ] tellers; private int totaal; De klasse TurfTab } public int Totaal { } een eigen property! get { } set { } return totaal; totaal = value; "mini- methodes"

43 public class TurfTab { private int [ ] tellers; private int totaal; De klasse TurfTab } public int Totaal { } een eigen property! get { } set { } return totaal; totaal = value; "mini- methodes" geen set-minimethode: read-only property

44 public class TurfTab { private int [ ] tellers; private int totaal; De klasse TurfTab } public float Gemiddelde { } get { } return (float)totaal / tellers.Length; get mag ook nog rekenwerk doen public int[] Waardes { } get { } return tellers.Clone(); geef een kopie van de private array

45 alleen set-minimethode: write-only property public class StaafDiag : UserControl { De klasse StaafDiag } public StaafDiag() { this.Paint += this.teken; } private void teken(object o, PEA pea) { } //...FillRectangle...waardes... private int[] waardes; public int[] Waardes { } set { } this.waardes = value; this.Invalidate(); wie de property verandert, forceert een Paint

46 public class StaafDiag : UserControl { De klasse StaafDiag } private void teken(object o, PEA pea) { private int[] waardes; } pea.Graphics.FillRectangle( for (int t=0; t<waardes.Length; t++) Brushes.Blue, 0, t * balkH, balkU * this.waardes[t], balkH-1 ); float balkH = this.Height / waardes.Length; float balkU = this.Width / max; int max= Bieb.Grootste(max); if (max<10) max = 10;

47 naamtype void () blok parameters methode member

48 naamtype void operator op () blok parameters methode member

49 naamtype void operator op () blok parameters naam()parameters methode constructor member

50 naamtype void operator op () blok parameters naam()parameters methode constructor naamtype, =initialisatieconst ; veld member

51 naamtype void operator op () blok parameters naam()parameters methode constructor naamtype, =initialisatieconst ; veld naamtype{}blok set get member property

52 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