Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdCornelis Jacobs Laatst gewijzigd meer dan 9 jaar geleden
1
Over-erving nObjecten van een subklasse erven variabelen en methoden&properties van de superklasse kleiner straal CirkelGroei geërfd zelf gede- clareerd groter
2
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
3
Klasse-hiërarchie in Forms PaintEventArgs MouseEventArgs KeyPressEventArgs EventArgs ComponentCommonDialog ControlLabel TrackBar ButtonBase Object String Bitmap Graphics moeder van alle klassen
4
Hiërarchie-ontwerp nclass Voertuig :Vervoermiddel class Boot :Vervoermiddel “is een” Vervoer middel Voertuig Boot
5
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
6
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
7
class VrachtW : MVoertuig { } void Teken(Graphics g) { } } } g.FillRect(...); g.FillEllipse(...); g.FillRect(...); g.FillEllipse(...); g.DrawLine(...); g.FillRect(...); g.FillEllipse(...); base. Teken(g); aanhang. Teken(g); “is een” “heeft een” class Combinat : VrachtW { void Teken(Graphics g) { Aanhanger aanhang;
8
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
9
Hoofdstuk 10.1 Toepassing: Bitmap-editor
10
nKlik punten op scherm nPlaatje verschuiven left, right, up, down nPlaatje bewerken clear, invert, bold, outline n“Game of life”
11
Opdeling in klassen nHoofdscherm gebruikersinterface, menu’s, akties, files nBitmapControl tekenen van het plaatje op het scherm nBitMap plaatje in geheugen, operaties
12
Member-variabelen nclass Hoofdscherm uBitmapControl viewer; uMenuStrip menuStrip; nclass BitmapControl uBitMap model; nclass BitMap ubool [, ] vakjes; : Form : UserControl zelfgemaakt
13
Methoden Hoofdscherm nclass Hoofdscherm : Form uHoofdscherm uvergroten // eventhandler voor Resize uafsluiten // eventhandler voor "Close"-menu
14
Methoden BitmapControl nclass BitmapControl : UserControl uBitmapControl uteken// eventhandler voor Paint uklik// eventhandler voor MouseClick ustarten, stoppen // voor animatie-menu uuitvoeren // voor andere menu-keuzes
15
Methoden BitMap nclass BitMap uconstructorBitMap, BitMap upropertiesBreedte, Hoogte upunten zettenveranderKleur, vraagKleur uschuivenLeft, Right, Up, Down ubewerkenClear, Invert, Bold, Outline combineer game of lifeLife, buren
16
Methoden BitMap (versie 2) nclass BitMap : System.Drawing.Bitmap uconstructorBitMap, BitMap upropertiesBreedte, Hoogte upunten zettenveranderKleur, vraagKleur uschuivenLeft, Right, Up, Down ubewerkenClear, Invert, Bold, Outline combineer game of lifeLife, buren
17
class Hoofdscherm public Hoofdscherm( ) { } this. Text = "Bitmap Editor"; this. viewer = new BitmapControl(); this. menuStrip = new MenuStrip( ); this. maakMenu(); this. Controls. Add(menuStrip); this. Controls. Add(viewer); this. Resize += this.vergroten; this. vergroten(null, null); // meteen al even
18
class Hoofdscherm private void maakMenu( ) { ToolStripDropDownItem menu; } MenuStrip menuStrip; menu = new ToolStripDropDownItem("File"); menuStrip. Items. Add(menu); menu.DropDownItems.Add("Close", null, this.afsluiten); menu = new ToolStripMenuItem("Move"); menuStrip. Items. Add(menu); menu.DropDownItems.Add("Left", null, viewer.uitvoeren); BitmapControl viewer; menu.DropDownItems.Add("Right",null, viewer.uitvoeren); menu.DropDownItems.Add("Up", null, viewer.uitvoeren); menu.DropDownItems.Add("Down",null, viewer.uitvoeren);
19
class Hoofdscherm void vergroten (object o, EventArgs ea) { viewer.Location = new Point(10,40); viewer.Size = new Size (w, h); } int w = this.ClientSize.Width – 20; int h = this.ClientSize.Height – 50; void afsluiten (object o, EventArgs ea) { this.Close(); }
20
Methoden BitMap nclass BitMap uconstructorBitMap, BitMap upropertiesBreedte, Hoogte upunten zettenveranderKleur, vraagKleur uschuivenLeft, Right, Up, Down ubewerkenClear, Invert, Bold, Outline combineer game of lifeLife, buren
21
class BitMap public BitMap ( int w, int h ) { } vakjes = new bool [w, h]; public BitMap ( BitMap ander) { } public void verander ( int x, int y, bool b ) { } public bool vraag ( int x, int y ) { } vakjes[x, y] = b; return vakjes[x, y] ; vakjes = new bool [ander.Breedte, ander.Hoogte]; this.Kopieer(ander); public int Breedte { } get { return vakjes.GetLength(0); } property
22
class BitMap void combineer ( Bitmap ander { this. verander (x, y, ); for (int x=0; this.Breedte; x++) for (int y=0; y<this.Hoogte; y++) this.vraag(x,y)ander.vraag(x,y)comb (,) comb),Functie } void Clear ( ) { this.combineer(this, (a,b)=>false ); } void Invert ( ) { this.combineer(this, (a,b)=>!a ); } void Kopieer(Bitmap ander) { this.combineer(ander, (a,b)=>b ); } delegate bool Functie (bool, bool) ; nieuwe expressie: naamloze functie nieuwe type-declaratie: het type van een functie
23
class BitMap public void Left ( ) { } this.verander( x-1, y, this.vraag(x,y) ); for (int y=0; y<this.Hoogte; y++) for (int x=0 ; x<this.Breedte; x++) 1 { this.verander( this.Breedte-1, y, false ); }
24
class BitMap public void Right ( ) { } this.verander( x, y, this.vraag(x-1,y) ); for (int y=0; y<Hoogte; y++) for (int x=0 ; x<Breedte; x++) Breedte-1; x>0; x-- ) { this.verander( 0, y, false ); }
25
class BitMap public void Bold ( ) { BitMap ander; ander = new BitMap(this); ander. Left ( ); this. combineer (ander, (a,b)=>a||b ); ander = new BitMap(this); ander. Down ( ); } this. combineer (ander, (a,b)=>a||b );
26
class BitMap public void Outline ( ) { BitMap ander; ander = new BitMap(this); ander. Left ( ); ander. Down ( ); } this. combineer (ander, (a,b) => a != b );
27
class BitMap public void Life ( ) { BitMap oud; oud = new BitMap(this); this. verander (x, y, } int n = oud. buren(x,y); n==3 || n==2 && oud.vraag(x,y) ); for (int y=0; y<Hoogte; y++) for (int x=0; x<Breedte; x++) { }
28
class BitMap public int buren (int x, int y ) { int xl = x-1; int xr = x+1; int yb = y-1; int yo = y+1; return n; int n = 0; if ( this.isZwart(xl,yb) ) n++; if ( this.isZwart(x,yb) ) n++; if ( this.isZwart(xr,yb) ) n++; if ( this.isZwart(xl,y ) ) n++; if ( this.isZwart(xr,y ) ) n++; if ( this.isZwart(xl,yo) ) n++; if ( this.isZwart(x,yo) ) n++; if ( this.isZwart(xr,yo) ) n++; if (xl<0) xl += Breedte; if (xr>=breed) xr -= Breedte; if (yb<0) yb += Hoogte; if (yo>=hoog) yo -= Hoogte; xl xr yb yo
29
Game of Life meer-cellig “wezen” loopt! stabiel patroon
30
Methoden BitmapControl nclass BitmapControl : UserControl uBitmapControl uteken// eventhandler voor Paint uklik// eventhandler voor MouseClick ustarten, stoppen // voor animatie-menu uuitvoeren // voor andere menu-keuzes membervariabele: Bitmap model;
31
class BitmapControl { Bitmap model; public BitmapControl ( ) { } model = new Bitmap(20, 20); this. Paint += teken; this. MouseClick += klik;
32
class BitmapControl void teken ( object o, PEA pea ) { gr. FillRectangle (br, x, y, 1, 1); } Brush br; if (model.vraag(x,y)) br = Brushes.Red; elsebr = Brushes.White; for (int y=0; y<Hoogte; y++) for (int x=0; x<Breedte; x++) { } int d = this. Diameter; x*d, y*d, d, d );x*d+1, y*d+1, d-1, d-1 ); this. lijnen (gr, d); Graphics gr = pea.Graphics;
33
class BitmapControl public int Diameter { Size s = this. ClientSize; s.Width / model.Breedte return s.Height / model.Hoogte Math. min (, ); } get { }
34
class BitmapControl private void lijnen ( Graphics gr, int d) { // horizontale lijnen } // verticale lijnen Pen p = Color.Blue; gr. drawLine ( p, 0, y*d, model.Breedte*d, y*d ); for (int y=0; y <= Hoogte; y++) gr. drawLine ( p, x*d, 0, x*d, model.Hoogte*d ); for (int x=0; x <= Breedte; x++)
35
class BitmapControl void klik ( object o, MouseEventArgs mea ) { } mea. X mea. Y / diam int diam = this. Diameter; model. verander (, ); mea.Button==MouseButtons.Left this. Invalidate ( );
36
class BitmapControl void uivoeren ( object sender, EventArgs ea ) { } this. Invalidate ( ); String keus = sender.ToString(); if (keus=="Clear") this.model.Clear(); if (keus=="Left") this.model.Left(); if (keus=="Right") this.model.Right(); if (keus=="Up") this.model.Up(); if (keus=="Down") this.model.Down(); if (keus=="Step") this.model.Step();
37
class BitmapControl void starten ( object o, EventArgs ea ) { } void stoppen ( object o, EventArgs ea ) { } Thread animatie; animatie = new Thread(animatieFunctie); animatie. Start( ); void animatieFunctie( ) { } this.model.Life( ); this.Invalidate( ); while (true ) { } Thread.Sleep(50); (animatie!=null) { animatie = null;
38
Toepassing: schets-editor SchetsWin Tools Akties Menu MDI- Container SchetsControl
39
Schets: Klasse-ontwerp Control Form UserControl Hoofdscherm SchetsWin SchetsControl Schets ImageBitmap Button Base Button RadioButton SchetsEditor System.Windows.Forms System.Drawing Program Container Control
40
Schets: Klasse-ontwerp Control Form UserControl Hoofdscherm SchetsWin SchetsControl Schets ImageBitmap Button Base Button RadioButton SchetsEditor System.Windows.Forms System.Drawing Program Container Control ISchetsTool TekstTool LijnTool PenTool GumTool RechthTool VolRechthTool TweepuntTool Startpunt Tool
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.