Over-erving nObjecten van een subklasse erven variabelen en methoden&properties van de superklasse kleiner straal CirkelGroei geërfd zelf gede- clareerd.

Slides:



Advertisements
Verwante presentaties
KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Advertisements

Hoofdstuk 2 Hallo, C# !.
Hoofdstuk 10 Overerving.
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 8 Objecten en klassen.
Hoofdstuk 10.1 Toepassing: Bitmap-editor. nKlik punten op scherm nPlaatje verschuiven left, right, up, down nPlaatje bewerken clear, invert, bold, outline.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Hoorcollege 14 Vijanden, excepties. Overzicht programmaconstructies Opdrachten Toekenning Aanroep void-methode return-opdracht while-opdracht for(each)-opdracht.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk.
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Polymorphisme en Interfaces: inleiding
Hoofdstuk 3 Methoden om te tekenen.
Hoofdstuk 3 Tekenen en rekenen.
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
2e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nOmcirkeld: tentamen2 Achter pijltje: gemiddelde tot nu toe nNeem het.
Reader en Writer Stream FileStream MemoryStream NetworkStream BufferedStream GZipStream CryptoStream TextWriter StreamWriter StringWriter BinaryWriter.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Hoofdstuk 2 Hallo, C# !. Opbouw broncode nOpdrachten om het geheugen te veranderen nOpdrachten zijn gegroepeerd in methoden nMethoden zijn gegroepeerd.
Gelijkheid van Strings static bool Gelijk( string s, string t) { } int m = s.Length; int n = t.Length; for (i=0; i
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Klasse uit library Android.App Activity Bij het starten van een app: nOperating system maakt een Activity -object aan… n…en neemt dat onderhanden met de.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Eerste deeltentamen nNagekeken werk ligt voor in de zaal nNeem je eigen werk mee: in het college wordt het besproken nVragen over de beoordeling: in de.
1e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nNeem het even mee, de uitwerking wordt in het college besproken nDiscussies.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 2 inleveropdrachten) college Tent. 1 Tent. 2 college prakt. 1 prakt. 2 prakt.
Resources. Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView :
Windows-applicatie class HalloWin1 { static void Main ( ) { } Form scherm; scherm = new Form( ); Application.Run(scherm); using System.Windows.Forms; scherm.Text.
Opbouw van het Netwerk void Lees (string filenaam ) { while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty.
Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Syntax van opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += returnexpressie; if)(expressieopdrachtblok.
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Activity Bij het starten van een app:
Aanroep van een methode voert opdrachten uit in de body daarvan
Lezen en schrijven van tekst
2e Deeltentamen Nagekeken werk ligt voor in de zaal (alfabetisch op achternaam) Neem het even mee, de uitwerking wordt in het college besproken Discussies.
Voortborduren op eerder gedaan werk
ISensorEventListener
1e Deeltentamen Nagekeken werk ligt voor in de zaal (alfabetisch op achternaam) Neem het even mee, de uitwerking wordt in het college besproken Discussies.
Gameprogrammeren: Objecten en geheugen
Reader en Writer leest en schrijft bytes leest string en char
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Overerving
string versus char string char klasse primitief type
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Methoden
vandaag èn vrijdag deadline maandag 12 dec.
Publieksvraag // schrijf een static methode die telt hoe // vaak een symbool voorkomt in een string // voorbeeld-aanroep: int n; n = Demo . Freq(’e’,
Gameprogrammeren: Overerving in Painter
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Voorbeeld: Simulatie van bewegende deeltjes
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Voortborduren op eerder gedaan werk
Practicum: schets-editor
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Gameprogrammeren: Abstracte klassen
Aanroep van een methode voert opdrachten uit in de body daarvan
Gameprogrammeren: Klassen en objecten
Arjan Egges & Paul Bergervoet
Exceptions Exception:
Eerste deeltentamen Nagekeken werk ligt voor in de zaal
Transcript van de presentatie:

Over-erving nObjecten van een subklasse erven variabelen en methoden&properties van de superklasse kleiner straal CirkelGroei geërfd zelf gede- clareerd groter

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

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

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

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

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

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;

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

Hoofdstuk 10.1 Toepassing: Bitmap-editor

nKlik punten op scherm nPlaatje verschuiven left, right, up, down nPlaatje bewerken clear, invert, bold, outline n“Game of life”

Opdeling in klassen nHoofdscherm gebruikersinterface, menu’s, akties, files nBitmapControl tekenen van het plaatje op het scherm nBitMap plaatje in geheugen, operaties

Member-variabelen nclass Hoofdscherm uBitmapControl viewer; uMenuStrip menuStrip; nclass BitmapControl uBitMap model; nclass BitMap ubool [, ] vakjes; : Form : UserControl zelfgemaakt

Methoden Hoofdscherm nclass Hoofdscherm : Form uHoofdscherm uvergroten // eventhandler voor Resize uafsluiten // eventhandler voor "Close"-menu

Methoden BitmapControl nclass BitmapControl : UserControl uBitmapControl uteken// eventhandler voor Paint uklik// eventhandler voor MouseClick ustarten, stoppen // voor animatie-menu uuitvoeren // voor andere menu-keuzes

Methoden BitMap nclass BitMap uconstructorBitMap, BitMap upropertiesBreedte, Hoogte upunten zettenveranderKleur, vraagKleur uschuivenLeft, Right, Up, Down ubewerkenClear, Invert, Bold, Outline combineer game of lifeLife, buren

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

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

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

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(); }

Methoden BitMap nclass BitMap uconstructorBitMap, BitMap upropertiesBreedte, Hoogte upunten zettenveranderKleur, vraagKleur uschuivenLeft, Right, Up, Down ubewerkenClear, Invert, Bold, Outline combineer game of lifeLife, buren

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

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

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

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

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

class BitMap public void Outline ( ) { BitMap ander; ander = new BitMap(this); ander. Left ( ); ander. Down ( ); } this. combineer (ander, (a,b) => a != b );

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++) { }

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

Game of Life meer-cellig “wezen” loopt! stabiel patroon

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;

class BitmapControl { Bitmap model; public BitmapControl ( ) { } model = new Bitmap(20, 20); this. Paint += teken; this. MouseClick += klik;

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;

class BitmapControl public int Diameter { Size s = this. ClientSize; s.Width / model.Breedte return s.Height / model.Hoogte Math. min (, ); } get { }

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

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 ( );

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();

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;

Toepassing: schets-editor SchetsWin Tools Akties Menu MDI- Container SchetsControl

Schets: Klasse-ontwerp Control Form UserControl Hoofdscherm SchetsWin SchetsControl Schets ImageBitmap Button Base Button RadioButton SchetsEditor System.Windows.Forms System.Drawing Program Container Control

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