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 pauze
Opgave 1a: Hoe ziet een parameter er uit? nIn de header: nIn de aanroep: nVoid-methode heeft geen resultaatwaarde void meth(string s, int x) this.meth( "hallo", 3+5*a); type en naam expressie declaratie zonder ; Een voorbeeld in geen beschrijving!
nSyntax nSemantiek Opgave 1b: Toekenningsopdracht =expressie;variabele De waarde van de expressie wordt opgeslagen in de variabele
Opgave 1c: zinvol in plaats van int: nlong nshort ndouble Als de waarde >2miljard (31 bits) kan worden Als de waarde <32000 (15 bits) zal blijven, en je er heel veel nodig hebt …decimalen…achter de komma… …nauwkeurig…significante cijfers…
Opgave 1d: waarom mogen methoden variabelen van de klasse gebruiken? nObject is groepje variabelen met een klasse als type. nHet bestaat uit de variabelen die in de klasse zijn gedeclareerd. nMethode heeft object onder handen met als type de klasse waar hij in staat nIn dat object zijn dus de variabelen beschikbaar. nUitzondering: static methoden
Opgave 1e: Operatoren nEffect van nWaarde van x /= 5; ! p x += 1; Waarde van x wordt éénvijfde van wat hij was p is een Boolean variabele Als p true is: waarde !p is false Als p false is: waarde !p is true x = x+1;x = x/5;
byte this var ; void v (bool b) b = true; true != b bool b = ! true Pen p; Pen p( ) (Pen p) (Pen) p 0xEC return void; while (x!=0) x *= 0; object Type / Expr / Opdr / Decl / Head / X Methode
byte this var ; void v (bool b) b = true; true != b bool b = ! true Pen p; Pen p( ) (Pen p) (Pen) p 0xEC return void; while (x!=0) x *= 0; object Type / Expr / Opdr / Decl / Head / X Methode
byte this var ; void v (bool b) b = true; true != b bool b = ! true Pen p; Pen p( ) (Pen p) (Pen) p 0xEC return void; while (x!=0) x *= 0; object Type / Expr / Opdr / Decl / Head / X Methode
byte this var ; void v (bool b) b = true; true != b bool b = ! true Pen p; Pen p( ) (Pen p) (Pen) p 0xEC return void; while (x!=0) x *= 0; object Type / Expr / Opdr / Decl / Head / X Methode
byte this var ; void v (bool b) b = true; true != b bool b = ! true Pen p; Pen p( ) (Pen p) (Pen) p 0xEC return void; while (x!=0) x *= 0; object Type / Expr / Opdr / Decl / Head / X Methode
byte this var ; void v (bool b) b = true; true != b bool b = ! true Pen p; Pen p( ) (Pen p) (Pen) p 0xEC return void; while (x!=0) x *= 0; object Type / Expr / Opdr / Decl / Head / X Methode
byte this var ; void v (bool b) b = true; true != b bool b = ! true Pen p; Pen p( ) (Pen p) (Pen) p 0xEC return void; while (x!=0) x *= 0; object Type / Expr / Opdr / Decl / Head / X Methode
byte this var ; void v (bool b) b = true; true != b bool b = ! true Pen p; Pen p( ) (Pen p) (Pen) p 0xEC return void; while (x!=0) x *= 0; object Type / Expr / Opdr / Decl / Head / X Methode T E X O H O E D D H X E E X O T
T E X O H O E D D H X E E X O T ,51011
Opgave 3: Kopieer & Druiven o-o-o-o-o.o-o-o-o...o-o-o.....o-o o....
Opgave 3: Kopieer static string Kopieer (int n, string x) { } return res; static string Druiven (int n) } & Druiven string res = “”; res += x; int t; for (t=0; t<n; t++) { return res; string res = “”; for (int t=0; t<n; t++) { } res += regel + “\n”; regel = pt + os + “o” + pt; pt = Kopieer(t, “.”); os = Kopieer(n-1-t, “o-”); string pt, os, regel; o-o-o-o-o.o-o-o-o...o-o-o.....o-o o.... o-o-o-o-o.o-o-o-o...o-o-o.....o-o o....
Opgave 4: Roos
Roos ( ) { class Roos { } int x, y; void verplaats (obj o, MEA mea) { void meer (obj o, EA ea) { void teken (obj o, PEA pea) { } } } int n=1; } this.Paint += teken; this.MouseClick += verplaats; b. Click += meer; this.x = mea.X; this.y = mea.Y; this.Invalidate(); this.n ++; this.Invalidate(); Graphics g = pea.Graphics; g.FillEllipse( Brushes.Black, this.x-r, this.y-r, 2*r, 2*r); for (int t=0; t<this.n; t++) : Form int r = *t; } { Button b; b = new Button(); b.Text = “Meer”; b.Location=new Point(10,10); b.Size = new Size(60,30); this.Controls.Add(b); this.x = this.Width/2; this.y = this.Height/2;
Opgave 4: Roos (punten) Roos ( ) { class Roos { } int x, y; void verplaats (obj o, MEA mea) { void meer (obj o, EA ea) { void teken (obj o, PEA pea) { } } } int n=1; } this.Paint += teken; this.MouseClick += verplaats; b. Click += meer; this.x = mea.X; this.y = mea.Y; this.Invalidate(); this.n ++; this.Invalidate(); Graphics g = pea.Graphics; g.FillEllipse( Brushes.Black, this.x-r, this.y-r, 2*r, 2*r); for (int t=0; t<this.n; t++) : Form int r = *t; } { Button b; b = new Button(); b.Text = “Meer”; b.Location=new Point(10,10); b.Size = new Size(60,30); this.Controls.Add(b); this.x = this.Width/2; this.y = this.Height/2;
If-opdracht opdracht wordt alleen uitgevoerd als voorwaarde niet geldt if (temperatuur<0) uitvoer.Text = "Het vriest!”; else uitvoer.Text = "Het dooit."; opdracht wordt alleen uitgevoerd als voorwaarde geldt
CirkelGroei class Cirkel : Form { } void teken(object o, PEA pea) { } Button kleiner, groter; int straal = 100; void klik(object obj, EA ea) { } pea.Graphics.FillEllipse(, Brushes.Green, 150–this.straal, 150–this.straal, 2*this.straal, 2*this.straal ); this.straal –= 10; this.Invalidate(); if (obj==kleiner) this.straal += 10; if (obj==groter) && straal>10) && straal<150)
Thermometer class Thermo : Form { } Thermo() { } TrackBar min, temp, max; Button reset; void temp_Scroll(object o, EA ea) { this.InitializeComponent(); temp.Scroll += temp_Scroll; reset.Click += reset_Click; } int x = this.temp.Value; if (x < this.min.Value) this.min.Value = x; void reset_Click(object o, EA ea) { } this.min.Value = this.temp.Value; partial
Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen throw catch
Voorbeeld van Exception s = invoer. Text; n = int. Parse (s); uitvoer. Text = ( "kwadraat is " + n*n ); try { } catch ( Exception e ) { uitvoer. Text = ( s + " is geen getal" ); } kan een Exception opwerpen opvangen van het probleem
Hoofdstuk 8 Objecten en klassen
Klasse-definitie nOpsomming van methoden ieder bestaand uit opdrachten nBeschrijving van objecten door declaraties van variabelen bewerken class Teller : Form {... klik(...) { } } Teller() { }... teken(...) { } int t; Paint += teken; MouseClick+=klik; g.DrawString(t...); t = t+1; this.Invalidate(); t = 0;...
x Declaratie Declaratie reserveert geheugenruimte nVoor een object-verwijzing int x; x = 5; 5 b zoals be- schreven in klasse Button nVoor een object-waarde Button b; b = new Button(); Size s; s = new Size(10,20); h0 w zoals be- schreven in struct Size nVoor een primitieve waarde s
Creatie van nieuwe objecten nObjecten met als type een library-klasse Button b; b = new Button( ); type van het gewenste object nObjecten met als type een zelfgemaakte klasse CirkelGroei cg; cg = new CirkelGroei( );
Creatie van objecten nOpbouw van object is gespecificeerd in de klasse class CirkelGroei { int straal; Button kleiner, groter; // methoden... : Form clientsize text paint controls kleinergroterstraal } zelf gedeclareerd geërfd cg
0 null 0 clientsize text paint null controls 0 null kleiner null groterstraal this CirkelGroei( ) { } Constructor // roept automatisch // constructor van // Form aan
500 clientsize text paint controls 0 null kleiner null groterstraal this CirkelGroei( ) { } Constructor // roept automatisch // constructor van // Form aan this.straal = 100; 100 this.ClientSize = new Size(300,300); 300
500 clientsize text paint controls 0 null kleiner null groterstraal this CirkelGroei( ) { } Constructor … this.Text = "CirkelGroei";
500 clientsize text paint controls 0 null kleiner null groterstraal this CirkelGroei( ) { } Constructor … this.Text = "CirkelGroei"; CirkelGroei this.Paint += this.teken; teken() {…}...new Button() location text click
500 clientsize text paint controls 0 kleiner null groterstraal this CirkelGroei( ) { } Constructor … CirkelGroei teken() {…} this.kleiner = new Button(); 0 0 location text click this.groter = new Button();
500 clientsize text paint controls 0 kleinergroterstraal this CirkelGroei( ) { } Constructor … CirkelGroei teken() {…} this.kleiner = new Button(); 0 0 location text click this.groter = new Button(); 0 0 location text click
500 clientsize text paint controls 0 kleinergroterstraal this CirkelGroei( ) { } Constructor … CirkelGroei teken() {…} this.kleiner.Text = "Kleiner"; 0 0 location text click 0 0 location text click Kleiner this.groter.Text = "Groter"; Groter
500 clientsize text paint controls 0 kleinergroterstraal this CirkelGroei( ) { } Constructor … CirkelGroei teken() {…} this.kleiner.Location = new Point(30,20); 0 0 location text click 0 0 location text click KleinerGroter this.groter.Location = new Point(200,20);
500 clientsize text paint controls 0 kleinergroterstraal this CirkelGroei( ) { } Constructor … CirkelGroei teken() {…} this.kleiner.Click = this.klik; 0 0 location text click 0 0 location text click KleinerGroter this.groter.Click = this.klik; klik() {…}
500 clientsize text paint controls 0 kleinergroterstraal this CirkelGroei( ) { } Constructor … CirkelGroei teken() {…} this.Controls.Add (this.groter); 0 0 location text click 0 0 location text click KleinerGroter klik() {…} this.Controls.Add (this.kleiner);
Klassen en objecten nKlasse-definitie in programma Object-creatie in Main nKlasse-definitie in library Object-creatie in constructor nKlasse-definitie in programma Object-creatie in constructor Button CirkelGroei Ruimte
Voorbeeld: Simulatie van bewegende deeltjes Simulatie - object Button - objecten Ruimte - objecten Deeltje - objecten
De klasse Simulatie class Simulatie : Form { Button stap, auto; Ruimte r1, r2, r3; Simulatie( ) { stap = new Button(); stap.Text = "stap"; auto = new Button(); auto.Text ="start"; r1 = new Ruimte(); r2 = new Ruimte(); r3 = new Ruimte();... } Klasse Ruimte gaan we zelf maken!
De klasse Ruimte class Ruimte { } Ruimte is een uitbreiding van een bestaande Control : UserControl Deeltje d1, d2, d3; // methoden nog toevoegen ieder Ruimte -object heeft drie eigen Deeltje - objecten
De klasse Deeltje class Deeltje { } Deeltje is helemaal zelfgemaakt int x, y; // methoden nog toevoegen positie van het Deeltje int dx, dy; Brush brush; snelheid van het Deeltje om het deeltje te tekenen
sim Samenhang van objecten Simulatie r1r2r3 stap auto d1d2d3 Ruimte d1d2d3 Ruimte x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje d1d2d3 Ruimte Button x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje geërfd van Form zelf gedeclareerd geërfd van UserControl
Constructie van nieuw object nGeheugenruimte klaarzetten nConstructormethode aanroepen new-expressie doet twee dingen: waarde is pijl naar het nieuwe object r1 d1d2d3 Ruimte die je kunt opslaan r1 = new Ruimte ( ) ;
Ruimte ( ) { } Constructormethode class Ruimte : UserControl { Deeltje d1, d2, d3; naam is hetzelfde als van de klasse geen resultaat- type! geërfd van Canvas this. BackColor = Color.LightYellow; this. Paint += this.tekenRuimte; d1 = new Deeltje (...); d2 = new Deeltje (...); d3 = new Deeltje (...);
class Deeltje { } De klasse Deeltje int x, y, dx, dy; Brush brush; public Deeltje (...) {...} public void DoeStap (...) {...} public void TekenDeeltje(Graphics g ) {...}
class Deeltje { } Methoden van klasse Deeltje int x, y, dx, dy; Brush brush; public void TekenDeeltje ( Graphics gr) { gr. FillEllipse( this.brush, this.x – 4, this.y – 4, 9, 9 ); }
class Deeltje { } Methoden van klasse Deeltje int x, y, dx, dy; Brush brush; public void DoeStap (... ) { this.x += this.dx; this.y += this.dy; if (this.x<0) { } this.x = – this.x; this.dx = – this.dx; if (this.y<0) {... } if (this.x>maxX) {... } if (this.y>maxY) {... }
Overzicht van klassen nclass Simulatie : Form uSimulatie( ) ustap_Click, auto_Click(object o, EventArgs ea) nclass Ruimte : UserControl uRuimte( ) uTekenRuimte( object o, PaintEventArgs pea ) uDoeStap( ) nclass Deeltje uDeeltje(... ) uTekenDeeltje( Graphics g ) uDoeStap( Size s )
class Simulatie : Applet { } Methoden van klasse Simulatie Button stap, auto; Ruimte r1, r2, r3; void stap_Click(object o, EventArgs ea ) { r1. DoeStap( ); r2. DoeStap( ); r3. DoeStap( ); }
class Ruimte : UserControl { } Methoden van klasse Ruimte Deeltje d1, d2, d3; void TekenRuimte(object o, PaintEventArgs pea ) { Graphics gr = pea.Graphics; d1.TekenDeeltje(gr); d2.TekenDeeltje(gr); d3.TekenDeeltje(gr); } void DoeStap( ) { d1.DoeStap(this.Size); d2.DoeStap(this.Size); d3.DoeStap(this.Size); this.Invalidate(); }
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje” zich zelfstandig ontwikkelende lijn van gebeurtenissen
Maak een animatie animatie. Start ( );this. run ( ); roept de methode aan die bij constructor is meegegeven Thread animatie; animatie = new Thread ( this.run ); en keert dan direct terug (terwijl de methode nog bezig is)
De methode run class Simulatie : Form { } void run ( ) { while (true) this. stap_Click (this, null ); {}{} oneindige herhaling! Thread. Sleep (50); milliseconden }
Starten van de animatie class Simulatie : Form { } void auto_Click(object o, EventArgs ea ) { } if (beweegt) { auto.Text = "Start"; beweegt = false; } else { } animatie = new Thread( this.run ); animatie. Start ( ); auto.Text = "Stop"; beweegt = true; Thread animatie; bool beweegt;
De methode run nogmaals class Simulatie : Form { } void run ( ) { while (true) this. stap_Click (this, null ); {}{} oneindige herhaling! Thread. Sleep (50); milliseconden } ( this.beweegt ) eindige herhaling.
Handiger Starten van de animatie class Simulatie : Form { } void auto_Click(object o, EventArgs ea ) { } if (beweegt) { auto.Text = "Start"; beweegt = false; } else { } animatie = new Thread( this.run ); animatie. Start ( ); auto.Text = "Stop"; beweegt = true; Thread animatie; bool beweegt; (animatie != null ) animatie = null;
De waarde null nnull : verwijzing naar niks x = null; x nnull is een geldige waarde voor elk object-verwijzings-type