Windows-applicatie class HalloWin1 { static void Main ( ) { } Form scherm; scherm = new Form( ); Application.Run(scherm); using System.Windows.Forms; scherm.Text = "Hallo"; scherm.BackColor = Color.Yellow; scherm.Size = new Size(200,100); using System.Drawing; declaratie en toekenning van een variabele met type Form gebruik van de variabele bij aanroep van Run aanpassen van properties
Windows-applicatie class HalloWin2 { static void Main ( ) { } class HalloForm { } Form scherm; scherm = new Form( ); Application.Run(scherm); HalloForm scherm; scherm = new HalloForm( ); Application.Run(scherm); : Form subklasse is een gespecialiseerde versie aanroep van de constructor methode public HalloForm( ) { } definitie van de constructor methode this.Text = "Hallo"; this.BackColor = Color.Yellow; this.Size = new Size(200,100);
Windows-applicatie class HalloForm { } : Form public HalloForm( ) { } this.Text = "Hallo"; this.BackColor = Color.Yellow; this.Size = new Size(200,100); Label groet; groet = new Label( ); this.Controls.Add(groet); groet.Text = "Hallo allemaal"; groet.Location = new Point(30,20);
Windows-applicatie class HalloForm { } : Form public HalloForm( ) { } this.Text = "Hallo"; this.BackColor = Color.Yellow; this.Size = new Size(200,100); this.Paint += this.teken; “Event”-property Methode-naam, maar geen aanroep!
Windows-applicatie class HalloForm { } : Form public HalloForm( ) { } this.Text = "Hallo"; this.BackColor = Color.Yellow; this.Size = new Size(200,100); this.Paint += this.teken; } void teken( { Object o, PaintEventArgs pea ) pea.Graphics. DrawString( ); "Hallo!", 10, 10, Brushes.Blue, new Font("Tahoma", 30)
Methode-aanroep methoden uit de klasse Graphics void TekenScherm(object o, PaintEventArgs pea) { Graphics gr; gr = pea.Graphics; gr. DrawString ("Hallo!", new Font("Tahoma", 30), Brushes.Blue, 10, 20 ); gr. FillRectangle (Brushes.Red, 10,20, 50,60 ); gr. DrawLine (Pens.Black, 70,30, 20,20 ); }
Klassen en objecten nKlasse beschrijft mogelijkheden van object umethoden uproperties methode uit de klasse Graphics van object gr Graphics gr; gr = pea.Graphics; gr. DrawLine ( Pens.Red, 10,10, 20,20); string s; s = Console.ReadLine();... s. Length... property uit de klasse string van object s nObjecten ukunnen dingen doen uhebben geheugen
-syntax expressie getal expressie operator expressie() variabele ”” symbool object expressie (), new klasse naam property naam this klasse naam methode naam.
Nieuwe methoden nMethode: groepje opdrachten met een naam Aanroep van een methode voert opdrachten uit in de body daarvan private void tekenHuis(…) { …. DrawRectangle (…); …. DrawLine (…); …. DrawLine (…); } public void TekenScherm (object o, PaintEventArgs pea) { …. tekenHuis (…); …. tekenHuis (…); …. tekenHuis (…); }
Methode met parameters gr.DrawRect (pen,… ); gr.DrawLine (pen,… ); gr.DrawLine (pen,… ); } x, y-br,br, br int tx, ty; tx = x + br/2; ty = y – br – br/2; x, y-br, tx, ty tx, ty, x+br, y-br private void tekenHuis (Graphics gr, … ) { int x, int y, int br) this. tekenHuis (pea.Graphics, …); this. tekenHuis (pea.Graphics, …); this. tekenHuis (pea.Graphics, …); } public void TekenScherm (object o, PaintEventArgs pea) { (x,y)br (tx,ty) 20, 100, 40); 70, 100, 40); 120, 100, 60);
Publieksvraag nSchrijf een methode tekenCirkel die je zo kunt aanroepen: public void TekenScherm (object o, PEA pea) { } this.tekenCirkel(pea.Graphics, Brushes.Black, 150, 100, 50); midden straal private void tekenCirkel { } gr. FillEllipse(br, cx–r, cy–r, 2*r, 2*r ); (Graphics g, Brush br, int cx, int cy, int r)
Hoofdstuk 4 Objecten en methoden
Variabelen nVariabele: geheugenplaats met een naam int x, y; nDeclaratie: aangifte van het type van de variabele nToekenningsopdracht: variabele krijgt waarde x = 20; x y 20
Toekenningsopdrachten y = x + 5 ; nExpressie aan de rechterkant mag andere variabelen gebruiken nVorige waarde gaat verloren x = y * 2 ; x y 20 int x, y; x = 20 ; y = y + 1 ;
Declaratie en toekenningen nEén keer declarareren nMogelijk meerdere toekenningen int x; x = 100; x = 250; x = x + 1; x = 2 * x; int x = 100; x = 100; Declaratie en eerste toekenning
x Type van variabelen x = 10 ; d = ; nint geheel getal ndouble benadering van reëel getal d = 10 ; d int x; double d; x = x / 3 ; d = d / 3 ;
Const declaratie double pi= ; void PrintOppervlak ( double r ) { Console.WriteLine( Pi * r * r ); } const double Pi= ; Pi = 4.0; Latere toekenningen verboden
Standaardtypes sbyte short int long float double decimal byte ushort uint ulong ± 2 miljard ± ± ± miljard 7 cijfers, afgerond, ≤ cijfers, afgerond, ≤ cijfers, exact, ≤10 28 ngehele getallen nmet een decimale punt 1 byte 2 bytes 4 bytes 8 bytes 4 bytes 8 bytes 16 bytes
Constanten ngeheel getal (kleinst passende) nmet een decimale punt nstring 0137–25 0.5– E231E3 "Hallo!""A""A""""een \"citaat\"""\n""\\" 0x1A0xFF 3E– hexadecimaal
Typering van operatoren nBeide argumenten geheel resultaatwaarde geheel * 4 5 / * 7 10 / * 2.5 nMinstens één floating resultaatwaarde floating “in” + “fo” “€” + bedrag nbij + operator ook: Minstens één string resultaatwaarde string
Objecten nObject: groepje variabelen dat bij elkaar hoort 255 r g 0 b 100 w 20 h 3 aantal prijs h allo!
Objecten nOm een object te gebruiken, hoef je niet te weten uit welke variabelen het object bestaat nJe hoeft alleen te weten uwelke methoden er zijn uwelke properties er zijn "vraag niet hoe het kan... " "maar profiteer ervan! "
Methoden bewerken een object gr. DrawLine ( pen, 10, 10, 30, 30) ; scherm.Controls. Add ( new Label() ); methode gebruikt het object methode verandert het object blijvend Console. WriteLine( "Hallo",... ); static methode heeft geen object onderhanden
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken
Objecten kunnen veranderen Rectangle r; r = new Rectangle(10,5,10,20); gr.FillRectangle(Brushes.Blue, r); r.Offset(0,30); r.Inflate(5,0); gr.FillRectangle(Brushes.Red, r);
Immutable objecten nIn sommige klassen is er geen enkele methode die objecten kan veranderen stringColor nEenmaal gemaakt, blijft de inhoud van het object hetzelfde
Objecten kopiëren Rectangle r; r.Inflate(5,0); y x h w r r.Offset(0,30); r = new Rectangle(10,5,10,20); gr.FillRectangle(Brushes.Blue, r); y x h w r y x h w r gr.FillRectangle(Brushes.Red, r); y x h w r Rectangle a; a = r; y x h w a y x h w a a.Offset(0,100); y x h w a
Grote objecten kopiëren? Bitmap b; b = new Bitmap("t.jpg"); Bitmap c; c = b; 104 h wb 4 h wc zonde van de ruimte!
Object-verwijzingen Bitmap b; Bitmap c; c = b; 104 h w b new Bitmap("t.jpg");b = c
Values versus References Rectangle r; r = new Rectangle(1,2,3,4); y x h w r 104 h w b Bitmap b; b = new Bitmap("t.jpg"); class Bitmap struct Rectangle
References naar mutable objecten bc h w pixels Bitmap b, c; b = new Bitmap("t.jpg"); c = b; gr.DrawImage(b, 10, 10); gr.DrawImage(c, 220,10); c.Rotate(...);
References naar mutable objecten Bitmap b, c; b = new Bitmap("t.jpg"); c = b; gr.DrawImage(b, 10, 10); gr.DrawImage(c, 220,10); c.Rotate(...); bc h w pixels
Type-controle nCompiler controleert type van toe te kennen waardes int x, y ; double d; Color c; x = 3; x = y; d = 3.14; c = Color.Red; x = 3.14; x = “hoi”; d = c; c = 3;
Type-conversie getallen int x, y ; double c, d; x = 5; d = 3.14; d = 7; c = x; x = (int) d; y = (int) (c/2); ntype klopt nint-waarde past ook in een double-variabele ndouble past afgekapt in int, mits programmeur accoord
Type-controle parameters nCompiler controleert of parameters van methoden het goede type hebben g.DrawString ( ”hallo”, br, ft, 10, 20 ); x = 100; y = 10; waarde = 37; g.DrawString ( waarde, br, ft, 0.3 * x, y ); ”” + (int)( ) String int Brush Font
Hoofdstuk 5 Interactie
Controls Form Label Button Label TextBox
Windows-applicatie class HalloWin2 { static void Main ( ) { } class HalloForm { } Form scherm; scherm = new Form( ); Application.Run(scherm); HalloForm scherm; scherm = new HalloForm( ); Application.Run(scherm); : Form public HalloForm( ) { } this.Text = "Hallo"; this.BackColor = Color.Yellow; this.Size = new Size(200,100);
CirkelCalc class Program { static void Main ( ) { } class Scherm { } Form scherm; scherm = new Form( ); Application.Run(scherm);Application.Run(new Scherm()); : Form public Scherm( ) { } this.Text = "CirkelCalc"; this.ClientSize = new Size(240, 60); zonder rand en titelbalk
CirkelCalc constructor class Scherm : Form { public Scherm( ) { this.Text = "CirkelCalc"; this.ClientSize = new Size(240, 60); } } Label tekst, uitvoer; Button knop; TextBox invoer; tekst = new Label(); knop = new Button(); invoer=new Label(); uitvoer = new TextBox(); this.Controls. Add(tekst); tekst.Location = new Point(65,10); tekst.Size = new Size(35,20); tekst.Text = "straal: "; // enzovoorts... knop.Click += this.bereken; // enzovoorts... Event-propertyafhandelingsmethode
CirkelCalc klik-afhandeling class Scherm : Form { public void bereken(object o, EventArgs ea) { } } invoer.Textdouble.Parse()double straal =; double opp = this.oppervlakte(straal); uitvoer.Text = opp.ToString(); methode met een resultaat private double oppervlakte(double x) { } return Math.PI * x * x; type van het resultaat waarde van het resultaat "leeg" resultaat
CirkelCalc class Scherm : Form { } public Scherm( ) { private double oppervlakte(...) { } } } Button knop; TextBox invoer; Label tekst, uitvoer;...new...Size...Add... knop.Click = this.bereken;...Parse(invoer.Text); uitvoer.Text =......this.oppervlakte(...)... return... gedeclareerd in een andere methode! public void bereken(...) {
CirkelCalc class Scherm : Form { } private double oppervlakte(...) { } }...Parse(invoer.Text); uitvoer.Text = this.oppervlakte(...)... return... gedeclareerd los in de klasse public void bereken(...) { TextBox invoer; Label uitvoer; public Scherm( ) { Button knop; TextBox invoer; Label tekst, uitvoer;...new...Size...Add... knop.Click = this.bereken; } mag je gebruiken in alle methodes heeft de variabelen niet nodig static Scherm
Communicatie met methoden nParameters : aanroeper geeft waarde door aan de methode nMethode-resultaat : methode geeft waarde terug aan de aanroeper net zoals een wiskundige functie
Methoden met een resultaat private double kwadraat (double x) { return x*x ; } type van het resultaat waarde van het resultaat in speciale return-opdracht
Publieksvraag nSchrijf een methode driewerf met een String-parameter, die 3 herhalingen ervan oplevert this.driewerf("Hoera!")"Hoera!Hoera!Hoera!" private string driewerf (string x) { } return x+x+x;
nAanroep van void-methode geldt als opdracht Aanroep van methoden g.DrawLine(pen, 10,10, 20,20) ; a = this.kwadraat (5) ; g.DrawLine(pen, this.kwadraat (5), 10, 25, 50); zonder resultaat nAanroep van methode met resultaat geldt als expressie … this.kwadraat (5) + 1 …
Return is laatste opdracht Parameters krijgen hun waarde bij de aanroep private double gemiddelde (double a, double b, double c) { } double totaal; totaal = a + b + c ; return totaal / 3; Lokale variabele krijgen hun waarde in een toekenning
Methodes die elkaar aanroepen private double kwadraat (double x) { return x*x ; } private double oppervlak (double r) { return Math.PI * this.kwadraat(r); } public void bereken (...) { uitvoer.Text = this.oppervlak(25).ToString(); } class CirkelCalc : Form { }
Grafische User Interface (GUI) n8 declaraties n8 keer new... n8 keer this.Controls.Add(...) n42 property-toekenningen TrackBar Button Label Panel n8 declaraties n8 keer new... n8 keer this.Controls.Add(...) n42 property-toekenningen
Visual Studio Design Mode
Code gegenereerd door Visual Studio Designer namespace Mixer { static class Program { static void Main() { Application.Run (new Mixer()); } namespace Mixer { partial class Mixer : Form { // constructor Mixer() { this.InitializeComponent(); } // event-handlers void klik(object o, EventArgs ea) { } namespace Mixer { partial class Mixer { #region generated code void InitializeComponent() { this.b = new Button(); b.Text = " zwart " ; b.Click += this.klik; this.Controls.Add(this.b); } #endregion private Button b; } Program.csMixer.csMixer.Designer.cs
-syntax expressie getal expressie operator expressie() variabele ”” symbool object expressie (), new klasse naam property naam this klasse naam methode naam.
Syntax van opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += returnexpressie;
Wat gaan we doen? college Tent. 1 Tent. 2 Tent. 3 college prakt. 1 prakt. 2 prakt. 3 prakt. 1 prakt. prakt. 1 prakt. prakt. 2 prakt wo 15-17vr 13-15< werkcoll nNu: Practicum BBG 106 – 103 – 115 – 175 – 112 – 109 nVrijdag: college in Ruppert-blauw S/T/UV/W