Hoofdstuk 2 Hallo, C# !
Opbouw broncode nOpdrachten om het geheugen te veranderen nOpdrachten zijn gegroepeerd in methoden nMethoden zijn gegroepeerd in klassen
en dat kunnen zelf ook weer aanroepen zijn van weer andere methodes... dus de “waar was ik gebleven” administratie is best ingewikkeld! Soorten opdrachten nToekennings -opdracht: verander het geheugen nAanroep van een andere methode: voer eerst de opdrachten in die methode uit, en ga daarna verder waar je gebleven was
Voorbeeld C#-programma één klasse...met één methode...met twee opdrachten accolades begrenzen klasse, resp. methode using System; class Hallo { static void Main ( ) { Console.WriteLine("Hallo!"); Console.ReadLine( ); }
Syntax en semantiek nSyntax: de vorm van het programma compilatie eenheid using; klasse declaratie library naam nSemantiek: wat het programma betekent
Syntax van opdracht opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam +=
Syntax van opdracht opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam +=
Console-applicatie using System; class Hallo2 { static void Main ( ) { string naam; Console.WriteLine("Wat is je naam?"); naam = Console.ReadLine( ); Console.WriteLine("Hallo, " + naam + "!"); Console.WriteLine("met " + naam.Length + " letters."); } Property van een object
Syntax van opdracht opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += toekenning
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
Syntax van opdracht opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam +=
Syntax van opdracht opdracht (), ;expressie klasse naam object expressie. methode naam =expressie; += property naam variabele
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);
Syntax van opdracht opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam +=
Syntax van opdracht opdracht klasse naam object expressie. methode naam property naam scherm. Size groet. Text naam. Length property naam object expressie methode naam this.Controls. Add ( = klasse naam Color. Yellow Console. WriteLine Application. Run static
Static gewone methodenstatic methoden static Bewerken een objectBewerken geen object Aanroep: object. methode (…) Aanroep: klasse. methode (…) In de body van de definitie: this is dat object In de body van de definitie: this bestaat niet Voorbeeld: Controls.Add(groet);Application.Run(scherm); Mainis altijd static Constructormethoden zijn nooit static
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)
Hoofdstuk 3 Methoden om te tekenen
Methode-aanroep methode uit de klasse Graphics andere methoden uit 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 ); }
Methoden uit Graphics nDrawString nFillRectangle nFillEllipse nDrawImage hallo x y nDrawLine nDrawRectangle nDrawEllipse
Methoden uit Graphics nDrawString nFillRectangle nFillEllipse nDrawImage hallo x y nDrawLine nDrawRectangle nDrawEllipse Pen parameter voor de kleur Brush parameter voor de kleur
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
Tekenen gr.FillRectangle( Brushes.Black, 10, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 50, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 90, 0, 10, 100 ); gr.DrawRectangle( Pens.Black, 0, 0, 200, 100 ); gr.FillRectangle( Brushes.Black, 0, 40, 200, 10 ); gr.FillRectangle( Brushes.Black, 0, 70, 200, 10 ); gr.FillRectangle( Brushes.Blue, 0, 50, 10, 20 ); gr.FillRectangle( Brushes.Red, 100, 0, 100, 40 ); compositie met blauw en rood (vrij naar Piet Mondriaan)
Tekening aanpassen nAanpassen van de dikte van de balken nAanpassen van de hoogte van het plaatje nAanpassen van de breedte van het plaatje gr.FillRectangle( Brushes.Black, 10, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 50, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 90, 0, 10, 100 ); gr.DrawRectangle( Pens.Black, 0, 0, 200, 100 ); gr.FillRectangle( Brushes.Black, 0, 40, 200, 10 ); gr.FillRectangle( Brushes.Black, 0, 70, 200, 10 ); gr.FillRectangle( Brushes.Red, 100, 0, 100, 40 ); gr.FillRectangle( Brushes.Blue, 0, 50, 10, 20 ); erg veel werk...
Variabelen gr.FillRectangle( Brushes.Black, 10, 0, balk, hoogte ); gr.FillRectangle( Brushes.Black, 50, 0, balk, hoogte ); gr.FillRectangle( Brushes.Black, 90, 0, balk, hoogte ); gr.FillRectangle( Brushes.Black, 0, 40, breedte, balk ); gr.FillRectangle( Brushes.Black, 0, 70, breedte, balk ); balk = 10; breedte = 200; hoogte = 100; int balk, breedte, hoogte; gebruik van variabelen toekennings- opdrachten: variabelen krijgen een waarde declaratie: aankondigen van variabelen en hun type type int: geheel getal
Variabelen groet = "Hallo " + naam + "!"; Console.WriteLine(groet); naam = Console.ReadLine(); string naam, groet; gebruik van variabelen toekennings- opdrachten: variabelen krijgen een waarde declaratie: aankondigen van variabelen en hun type type string: tekst
Variabelen groet. Text = "Hallo"; this.Controls. Add (groet); groet = new Label (); Label groet; gebruik van variabelen toekennings- opdrachten: variabelen krijgen een waarde declaratie: aankondigen van variabelen en hun type type Label: opschrift
Syntax van opdracht opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam +=
Syntax van declaratie type klasse naam int string declaratie naamtype, =expressieconst ; var
Plaats van een declaratie blok declaratie opdracht {}
Variabelen gr.FillRectangle( Brushes.Black, 10, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 50, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 90, 0, 10, 100 ); int balk, breed, hoog; balk=10; breed=200; hoog=100; gr.FillRectangle( Brushes.Black, 0, 40, 200, 10 ); gr.FillRectangle( Brushes.Black, 0, 70, 200, 10 ); gr.FillRectangle( Brushes.Blue, 0, 50, 10, 20 ); gr.FillRectangle( Brushes.Red, 100, 0, 100, 40 );
Variabelen gr.FillRectangle( Brushes.Black, 10, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, 50, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, 90, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, 0, 40, breed, balk ); gr.FillRectangle( Brushes.Black, 0, 70, breed, balk ); gr.FillRectangle( Brushes.Blue, 0, 50, 10, 20 ); gr.FillRectangle( Brushes.Red, 100, 0, 100, 40 ); int balk, breed, hoog; balk=10; breed=200; hoog=100; x1x2x3 y1 y2 int x1, x2, x3, y1, y2; x1=10; x2=50; x3=90; y1=40; y2=70;
Variabelen gr.FillRectangle( Brushes.Black, x1, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, x2, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, x3, 0, balk, hoog ); int balk, breed, hoog; balk=10; breed=200; hoog=100; x1x2x3 y1 y2 int x1, x2, x3, y1, y2; x1=10; x2=50; x3=90; y1=40; y2=70; gr.FillRectangle( Brushes.Black, 0, y1, breed, balk ); gr.FillRectangle( Brushes.Black, 0, y2, breed, balk ); gr.FillRectangle( Brushes.Blue, 0, 50, 10, 20 ); gr.FillRectangle( Brushes.Red, 100, 0, 100, 40 );
Variabelen gr.FillRectangle( Brushes.Black, x1, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, x2, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, x3, 0, balk, hoog ); int balk, breed, hoog; balk=10; breed=200; hoog=100; x1x2x3 y1 y2 int x1, x2, x3, y1, y2; x1=10; x2=50; x3=90; y1=40; y2=70; gr.FillRectangle( Brushes.Black, 0, y1, breed, balk ); gr.FillRectangle( Brushes.Black, 0, y2, breed, balk ); gr.FillRectangle( Brushes.Blue, 0, y1+balk, x1, y2-y1-balk ); gr.FillRectangle( Brushes.Red, x3+balk, 0, br-(x3+balk), y1 );
nExpressie: stukje programma met een waarde nGebruik van expressies: uRechterkant van een toekennings-opdracht uParameter van een methode Expressies x3 = x2+40 ; gr.FillRectangle(Brushes.Blue, 0, y1+balk, x1, y2-(y1+balk) ) ;
expressie Opbouw van expressies nconstante nvariabele n... operator... n(... ) 5 hoogte x + y (y + 1) + 1 x - expressie
Operatoren n+optellen n-aftrekken n*vermenigvuldigen n/delen n%rest bij deling bij deling van int-waarden: cijfers achter de komma worden afgekapt! 14 / 3 geeft 4 want 14 is 4* % 3 geeft 2
Prioriteit van operatoren nVermenigvuldigen gaat voor optellen nBij gelijke prioriteit: van links naar rechts nWil je ’t anders: zet haakjes * 3 geeft 7 en delen en aftrekken geeft 3 (1+2) * 3 geeft 9
Syntax van expressies expressie getal expressie operator expressie() variabele ”” symbool
Gebruik van expressies in opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam +=
Gebruik van expressies in opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam +=
Gebruik van expressies in opdrachten en expressies opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += expressie constante expressie operator expressie() variabele
Het type van een expressie n98765 n"Hallo" nbreedte n n"Hallo " + naam nnaam.Length n"Hallo " + naam.Length nBrushes.Black int string Brush int string int string type klasse naam int string
Het type van een expressie nBrushes.Black Brush Pen Form Font nPens.Blue nnew Form() nnew Font("Arial",10) Pen nnew Pen(Brushes.Red, 5) Brush nnew HatchBrush(HatchStyle.ZigZag, Color.Blue, Color.Red) Color nnew Color(255, 128, 0) Color.FromArgb
Kleuren (255,0,0) (0,255,0) (255,255,0) (0,0,255) (0,255,255) (255,0,255) (255,255,255) (0,0,0) Color. FromArgb(...)
Mengkleuren nColor.FromArgb(255, 0, 0) nColor.FromArgb(255, 255, 0) nColor.FromArgb(255, 64, 0) nColor.FromArgb(255, 128, 0) nColor.FromArgb(255, 192, 0)
-syntax expressie getal expressie operator expressie() variabele ”” symbool object expressie (), new klasse naam property naam this klasse naam methode naam.
Programma nasd using System.Windows.Forms; using System.Drawing; class Mondriaan : Form { Mondriaan() { this.Text = "Mondriaan"; this.BackColor = Color.White; this.ClientSize = new Size(200, 100); this.Paint += this.tekenScherm; } void tekenScherm(object obj, PaintEventArgs pea) { int breedte, hoogte, balk, x1, x2, x3, y1, y2; breedte = pea.ClipRectangle.Width; hoogte = pea.ClipRectangle.Height; x1 = 10; x2 = 50; x3 = 90; y1 = 40; y2 = 70; balk = 10; Graphics gr = pea.Graphics; gr.FillRectangle(Brushes.Black, x1, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, x2, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, x3, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, 0, y1, breedte,balk); gr.FillRectangle(Brushes.Black, 0, y2, breedte,balk); gr.FillRectangle(Brushes.Blue, 0, y1 + balk, x1, y2 - (y1 + balk)); gr.FillRectangle(Brushes.Red, x3+balk, 0, breedte-(x3+balk), y1); } static void Main() { Application.Run( new Mondriaan()); }
Programma nasd using System.Windows.Forms; using System.Drawing; class Mondriaan : Form { Mondriaan() { this.Text = "Mondriaan"; this.BackColor = Color.White; this.ClientSize = new Size(200, 100); this.Paint += this.tekenScherm; } void tekenScherm(object obj, PaintEventArgs pea) { int breedte, hoogte, balk, x1, x2, x3, y1, y2; breedte = pea.ClipRectangle.Width; hoogte = pea.ClipRectangle.Height; x1 = 10; x2 = 50; x3 = 90; y1 = 40; y2 = 70; balk = 10; Graphics gr = pea.Graphics; gr.FillRectangle(Brushes.Black, x1, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, x2, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, x3, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, 0, y1, breedte,balk); gr.FillRectangle(Brushes.Black, 0, y2, breedte,balk); gr.FillRectangle(Brushes.Blue, 0, y1 + balk, x1, y2 - (y1 + balk)); gr.FillRectangle(Brushes.Red, x3+balk, 0, breedte-(x3+balk), y1); } static void Main() { Application.Run( new Mondriaan()); } /* Dit programma tekent een Mondriaan-like "compositie met rood en blauw” */ // posities van de lijnen // zwarte balken // gekleurde vakken met commentaar
Commentaar nTekst voor de menselijke lezer, genegeerd door de compiler nTwee vormen: uvan /* tot */ uvan // tot einde regel
Hoofdstuk 3.6 Methode- declaraties
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 (…); }
Parameters …. DrawRectangle (…); …. DrawLine (…); …. DrawLine (…); } public void TekenScherm (object o, PaintEventArgs pea) { …. tekenHuis (…); …. tekenHuis (…); …. tekenHuis (…); } private void tekenHuis (…) { gr (Graphics gr, … ) parameter declareren (pea.Graphics, …); en bij aanroep meegeven
Het object this gr. DrawRectangle (…);gr. DrawLine (…); } …. tekenHuis (pea.Graphics, …); …. tekenHuis (pea.Graphics, …); …. tekenHuis (pea.Graphics, …); } private void tekenHuis (Graphics gr, …) { this this this this: het object dat TekenScherm ook al onder handen heeft class Huizen : Form { } public void TekenScherm (object o, PaintEventArgs pea) {
Meer parameters this. tekenHuis (pea.Graphics, …); this. tekenHuis (pea.Graphics, …); this. tekenHuis (pea.Graphics, …); } public void TekenScherm (object o, PaintEventArgs pea) { teken driemaal een net iets ander huis 20, 100, 40); 70, 100, 40); 120, 100, 60); nog meer parameters!
Meer 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);
Huizen... int afdak = breedte / 6; Pen pen = new Pen(Color.DarkRed, 3); Brush br = new HatchBrush(HatchStyle.HorizontalBrick, Color.Silver, Color.Red );
Flexibiliteit nHoe meer parameters, des te flexibeler de methode (x,y) br h dakh private void tekenHuis (Graphics gr, int x, int y, int br, int h, int dakh, Brush kl, Brush dakKl, … ) { en des te lastiger aan te roepen...
Flexibiliteit Veel parameters: nNu lastig om te programmeren nIn de toekomst gemakkelijk uit te breiden Weinig parameters: n Nu gemakkelijk om te programmeren n In de toekomst lastig te onderhouden
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: Prakticum BBG 115 – 001 – 201 – 175 – 112 – 103 nWoensdag: werkcoll, hoorcoll, prakt S/T/UV/W