Voorbeeld: Simulatie van bewegende deeltjes

Slides:



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

Hoofdstuk 6: Controle structuren
Hoofdstuk 2 Hallo, C# !.
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoofdstuk Strings en arrays. Primitieve types nint gehele getallen-17, -5, 0, 3, 178 ndouble reëele getallen3.141, 2.0, -1.5E8 nbool waarheidswaarden.
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.
Consoletoepassing Variabelen Klassen
Algoritmiek Object-georiënteerd Programmeren
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Hoofdstuk 9 Objecten en klassen.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Hoorcollege 4 Objecten en methoden. Eigen methode toevoegen class Painter : Game { public void HandleInput() { … } protected override void Update(GameTime.
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.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
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.
Hoofdstuk 3 Methoden om te tekenen.
Hoofdstuk 11 Strings en arrays. TextArea en String class LetterTeller extends Applet { void init ( ) { invoer = new TextArea (5, 40); uitvoer = new TextField(40);
Hoofdstuk 4 Nieuwe methoden. Tekenen g.drawRect(20,60,40,40); g.drawLine(20,60,40,40); g.drawLine(40,40,60,60); g.drawRect(70,60,40,40); g.drawLine(70,60,90,40);
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Studiehouding Ergens verstand van krijgen kost tijd… Uren die je alleen in je boeken doorbrengt maken het verschil. Er is niets mis met onafhankelijkheid.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
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.
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.
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 :
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Windows-applicatie class HalloWin1 { static void Main ( ) { } Form scherm; scherm = new Form( ); Application.Run(scherm); using System.Windows.Forms; scherm.Text.
Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen.
Meer constructormethodes in klasse Kleur { class Kleur } public byte Rood, Groen, Blauw; public Kleur( byte r, byte g, byte b ) { } Rood=r; Groen=g; Blauw=b;
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Aanroep van een methode voert opdrachten uit in de body daarvan
ISensorEventListener
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Char en String
string versus char string char klasse primitief type
Letterfrequentie turven
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Arjan Egges & Paul Bergervoet
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’,
Basis Gameprogrammeren
Gameprogrammeren: Herhalingen
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Arjan Egges & Paul Bergervoet
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Voortborduren op eerder gedaan werk
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
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
Software Development fundamentals
Gameprogrammeren: Arrays
Transcript van de presentatie:

Voorbeeld: Simulatie van bewegende deeltjes Simulatie - object Ruimte - objecten Deeltje - objecten Button - objecten

Samenhang van objecten Simulatie Samenhang van objecten Button geërfd van Form zelf gedeclareerd r1 r2 r3 stap auto sim Button d1 d2 d3 Ruimte d1 d2 d3 Ruimte d1 d2 d3 Ruimte geërfd van UserControl x y dx dy brush Deeltje x y dx dy brush Deeltje x y dx dy brush Deeltje

Overzicht van methoden class Simulatie : Form { class Ruimte: UserControl { class Deeltje { Button stap, auto; Ruimte r1, r2, r3; Deeltje d1, d2, d3; int x, y, dx, dy; Brush brush; Ruimte() { d1 = new Deeltje(); Paint += TekenRuimte; } Simulatie() { stap = new Button(); r1 = new Ruimte(); stap.Click += stap_click; } void TekenDeeltje ( Graphics gr) { gr . FillEllipse ( this.brush , this.x – 4, this.y – 4 , 9 , 9 ); } void TekenRuimte (object o, PaintEventArgs pea ) { Graphics gr = pea.Graphics; d1.TekenDeeltje(gr); d2.TekenDeeltje(gr); d3.TekenDeeltje(gr); } void DoeStap ( ... ) { this.x += this.dx; this.y += this.dy; if (this.x<0) { this.x = - this.x; this.dx = - this.dx; } void stap_click (object o, EventArgs ea) { r1.DoeStap( ); r2.DoeStap( ); r3.DoeStap( ); } void DoeStap( ) { d1.DoeStap(this.Size); d2.DoeStap(this.Size); d3.DoeStap(this.Size); this.Invalidate(); } } } }

Methoden van klasse Deeltje class 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) { ... }

zich zelfstandig ontwikkelende lijn van gebeurtenissen Animatie Animatie: “tekenfilm” programma toont automatisch veranderende beelden Gemakkelijk te programmeren met gebruik van de klasse “draadje” Thread zich zelfstandig ontwikkelende lijn van gebeurtenissen

en keert dan direct terug Maak een animatie Thread animatie; animatie = new Thread ( this.run ); animatie . Start ( ); this . run ( ); roept de methode aan die bij constructor is meegegeven en keert dan direct terug (terwijl de methode nog bezig is)

De methode run class Simulatie : Form { oneindige herhaling! } oneindige herhaling! void run ( ) { while (true) { } this . stap_Click (this, null ); Thread . Sleep (50); milliseconden }

Starten van de animatie class Simulatie : Form { } Thread animatie; bool beweegt; 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; }

De methode run nogmaals class Simulatie : Form { } oneindige herhaling! eindige herhaling. void run ( ) { while (true) ( this.beweegt ) { } this . stap_Click (this, null ); Thread . Sleep (50); milliseconden }

Handiger Starten van de animatie class Simulatie : Form { } Thread animatie; bool beweegt; void auto_Click(object o, EventArgs ea ) { if (beweegt) { auto.Text = "Start"; beweegt = false; } else { (animatie != null ) animatie = null; animatie = new Thread( this.run ); animatie . Start ( ); auto.Text = "Stop"; beweegt = true; }

De waarde null null : verwijzing naar niks x null : verwijzing naar niks x = null; null is een geldige waarde voor elk object-verwijzings-type

Hoofdstuk 9.3-4 Strings en arrays

Primitieve types int gehele getallen -17, -5, 0, 3, 178 double reëele getallen 3.141, 2.0, -1.5E8 bool waarheidswaarden false, true char losse symbolen ’A’, ’B’, ’Z’, ’a’, ’4’, ’#’, ’:’

string versus char string char klasse primitief type object-verwijzing directe waarde nul, een of meer… precies één symbool "" "A" "hello" ’A’ operatoren, methoden properties, indexer operatoren == , + == , + , <= Substring, ToUpper Length s[i]

String-methodes int Length bool Equals (string s) string Concat (string s) string Substring (int start) string Substring (int start, int aantal) string ToUpper ( ) string ToLower ( )

concat en substring String s, t, u, v, w; s = "ham"; t = "burger"; hamburger burger burg s = "ham"; t = "burger"; u = s.Concat(t); s + t ; v = u.Substring(3); w = u.Substring(3, 4); 012345678 vanaf aantal hamburger

Publieksvraag Schrijf een methode Beginstuk met twee string-parameters x en y die bepaalt of x het beginstuk van y is Schrijf een methode Onderdeel met twee string-parameters x en y die bepaalt of x ergens als substring van y voorkomt

Methode Beginstuk kort lang public static bool Beginstuk (string x, string y) { } return x == y . Substring ( 0, x.Length ) ;

Methode Onderdeel public static bool Onderdeel (string x, string y) { } int t; for (t=0; t<y.Length; t++) if ( ) return true; Beginstuk(x, ) y . Substring(t) return false;

Meer string-methodes bool StartsWith (string s) bool EndsWith (string s) int IndexOf (string s) public static bool Onderdeel(string x, string y) { return y.IndexOf(x) >= 0 ; }

string versus array Klasse Type met speciale syntax Indexer -notatie string s = new string(); char[] a = new char[10]; Indexer -notatie Speciale index-notatie c = s[2]; s[3] = c; c = a[2]; a[3] = c; Speciale quote-notatie s = "hallo"; Property s.Length Property a.Length Methoden s.IndexOf(t); s.Substring(3,2);

Publieksvraag // schrijf een static methode die telt hoe // vaak een symbool voorkomt in een string // voorbeeld-aanroep: int n; n = Demo . Freq(’e’, "some text" ); // hint: gebruik een for opdracht

Tel symbool-frequentie public static int Freq(char x, string s) { int aantal; aantal = 0; for (int t=0; t<s.Length; t++) if ( ) aantal++; s[t]==x return aantal; }

Geschiedenis van char 1970s: 6 bits = 64 symbols 26 letters, 10 digits, 28 leestekens 1980s: 7 bits = 128 symbols +26 lowercase, +5 leestekens, 33 control 1990s: 8 bits = 256 symbols +letters met accenten 2000s: 16 bits = 65536 symbols +Grieks, Cyrillisch, Japans, Devangari, ... ASCII IBM/DOS ANSI/ISO Unicode

Character coding code 0 code 32 code 48 code 65 code 97 code 127

char bijzonderheden alfabetisch geordend char c; if ( ’A’<=c && c<=’Z’ ) … converteerbaar naar int int n; n = c + 32; en terug c = (char) n;

Conversies Conversie naar “kleinere” waarde is gevaarlijk Conversie naar “grotere” waarde kan altijd double d; int n; d = n; int n; char c; n = c; Control x; Button b; x = b; Conversie naar “kleinere” waarde is gevaarlijk n = (int) d; c = (char) n; b = (Button) x;

Speciale char-waarden Letterlijk symbool ’A’ ’&’ Speciaal symbool ’\n’ ’\t’ Het quote-symbool ’\’’ ’\”’ Het backslash-symbool ’\\’ twee tekens in de broncode, toch één character!