Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen.

Slides:



Advertisements
Verwante presentaties
Hoofdstuk 2 Hallo, C# !.
Advertisements

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.
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 2 Basis gameprogrammeren. Soorten programma’s Console- applicatie.
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.
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.
Over-erving nObjecten van een subklasse erven variabelen en methoden&properties van de superklasse kleiner straal CirkelGroei geërfd zelf gede- clareerd.
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.
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.
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 :
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.
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;
Activity Bij het starten van een app:
Aanroep van een methode voert opdrachten uit in de body daarvan
Voortborduren op eerder gedaan werk
ISensorEventListener
Gameprogrammeren: Objecten en geheugen
Reader en Writer leest en schrijft bytes leest string en char
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
string versus char string char klasse primitief type
Letterfrequentie turven
Gameprogrammeren: Variabelen, declaraties en toekenningen
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’,
Gameprogrammeren: Overerving in Painter
Basis Gameprogrammeren
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
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
Arjan Egges & Paul Bergervoet
Object Communication (Jewel Jam)
Exceptions Exception:
Eerste deeltentamen Nagekeken werk ligt voor in de zaal
Software Development fundamentals
Gameprogrammeren: Arrays
Transcript van de presentatie:

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

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

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

Exception types nNumberFormatException als je iets niet-numerieks probeert te Parsen nNullPointerExcpetion als je een member opvraagt n…

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

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

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;

Hoofdstuk 8.5 Subklassen

versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud ( ) { return x+y; } } class Twee { int x, y; int oud ( ) { return x+y; } } int z; int nieuw ( ) { return x+y+z; } Drie +1;

raar asymmetrisch veel gedoe Voortborduren op eerder gedaan werk nTweede poging: “doorverwijzen” class Twee { int x, y; int oud ( ) { return x+y; } } class Twee { Twee t; int oud ( ) { return t.oud(); } } int z; int nieuw ( ) { return t.x+t.y+z; } Drie

Voortborduren op eerder gedaan werk nDerde poging: “subklassen” class Twee { int x, y; int oud ( ) { return x+y; } } class Twee : Twee { } int z; int nieuw ( ) { return x+y+z; } Drie

Subklassen nclass Ruimte : UserControl nRuimte is een subklasse van UserControl nUserControl is de superklasse van Ruimte nElk Ruimte-object is tevens UserControl-object nEen Ruimte-object is een bijzonder geval van een UserControl-object

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

Klasse en subklasse class Bolletje { } int x, y, diam; void plaats(int x0, int y0) { this.x = x0; this.y = y0; } void groei( ) { this.diam++; } void teken(Graphics g) { g.DrawEllipse( Pens.Black, x, y, diam, diam ); } class KleurBol : Bolletje { } Color kleur; void verf(Color k) { this.kleur = k; } void teken(Graphics g) { g.FillEllipse( new Brush(kleur), x, y, diam, diam ); } g.DrawEllipse( Pens.Black, x, y, diam, diam ); Bolletje b = new Bolletje(); b.plaats(10,20); b.teken(gr); KleurBol k = new KleurBol(); k.plaats(10,20 ); k.teken(gr); b.verf( Color.Red ); b.groei ( ); k.verf( Color.Green ); b.teken(gr); b = k; k = b; base.teken(g); virtual override

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

Superklassen in libraries nButton : ButtonBase nButtonBase : Control superklasse super- superklasse

property van ContainerControl 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 b = new Button(); f = new Form(); f. Controls. Add(b); t = new TextBox(); f. Controls. Add(t); heeft een Control parameter

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

Hiërarchie-ontwerp ontwerpkeuze: ondergrond gaat voor motorisatie ontwerpkeuze: motorfiets is meer motor dan fiets Vervoer middel Auto Motor Fiets Voertuig Boot Vliegtuig Vracht Wagen Stoom Boot Motor Voertuig Fiets Motor Boot Zeil Boot

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

Hoofdstuk 9 Arrays

CirkelKlikker void klik(object o, MouseEA mea) { } void teken(object o, PaintEA pea) { } this.x = mea.X; this.y = mea.Y; this.Invalidate(); gr.FillEllipse(Brushes.Black, this.x, this.y, 15, 15 ); int x, y; (poging 1) Graphics gr = pea.Graphics; tekent alleen laatste cirkel

CirkelKlikker void klik(object o, MouseEA mea) { } gr.FillEllipse(Brushes.Black, mea.x, mea.y, 15, 15 ); (poging 2) Graphics gr = this.CreateGraphics(); hertekent het window niet wanneer nodig

CirkelKlikker void klik(object o, MouseEA mea) { } void teken(object o, PaintEA pea) { } this.x = mea.X; this.y = mea.Y; this.Invalidate(); gr.FillEllipse(Brushes.Black, this.x, this.y, 15, 15 ); int x, y; (final version) Graphics gr = pea.Graphics; ARRAY for (int t=0; t<n; t++) [t] [n] int n=0; [ ] n++;

Arrays nArray: rij genummerde variabelen tabel length5 int [ ] tabel; new int [5];tabel = declaratie van een array creëren van het eigenlijke array-object

Gebruik van een array n’t zijn echte variabelen: tabel length5 tabel [2] = 37; tabel[4] = tabel [2] + 5; if (tabel.Length<10)... tabel.Length = 10; Length is een read-only property

Gebruik van een array nvariabele als index in de array tabel length5 tabel [0] = 42; tabel [1] = 42; tabel [2] = 42; tabel [3] = 42; tabel [4] = 42; 42 tabel [t] = 42; for (t=0; t<5; t++)

Exception types nNumberFormatException als je iets niet-numerieks probeert te Parsen nNullPointerExcpetion als je een member opvraagt nArrayBoundEception als je een array-waarde buiten de grenzen opvraagt

Array als parameter tabel length int Kleinste ( int [ ] tabel ) { } int resultaat; return resultaat; if (tabel [t] < resultaat) resultaat = tabel [t]; for (t=0; t<tabel.Length; t++) int t; resultaat =tabel [0];

Deel van de array doorzoeken tabel length int Kleinste ( int [ ] tabel ) { } int resultaat; return resultaat; if (tabel [t] < resultaat) resultaat = tabel [t]; for (t=0; t<tabel.Length; t++) int t; resultaat =tabel [0]; aantal, int aantal) static

CirkelKlikker void teken(object o, PaintEA pea) { } gr.FillEllipse(Brushes.Black, this.x[t], this.y[t], 15, 15) ; int [ ] x, y; int n; (final version) Graphics gr = pea.Graphics; ARRAY for (int t=0; t<n; t++) int minX = Bieb.Kleinste(x,n)–r; int r=7; int maxX = Bieb.Grootste(x,n)+r; int minY = Bieb.Kleinste(y,n)–r; int maxY = Bieb.Grootste(y,n)+r; gr.DrawRectangle(Brushes.Blue, minX, minY, maxX-minX, maxY-minY ) ;

Syntax van array-type type int short sbyte long decimal double float char bool uint ushort byte ulong struct naam class naam object string waarde verwijzing [], array

Array van getallen tabel int [ ] tabel; new int [5];tabel = length5

Array van struct-objecten tabel Point [ ] tabel; new Point[5]; tabel = length5

Array van class-objecten tabel Button [ ] tabel; new Button[5]; tabel = length5 for (int t=0; t<5; t++) tabel[t] = new Button();

Twee-dimensionale array tabel int [, ] tabel; new int [5,3]; tabel = length tabel.GetLength(0) tabel.GetLength(1)

Array van arrays tabel int [ ] [ ] tabel; new int[5][]; tabel = length5 for (int t=0; t<5; t++) tabel[t] = new int[t];

Drie-dimensionale array tabel int [,, ] tabel; new int [5,3,2]; tabel = length

Declaratie declaratie naamtype, =initialisatieconst ; var met intitialisatie initialisatie expressie initialisatie}{, string [ ] woorden = { "aap", "noot", "mies" }; int [ ] maand = { 31,28,31,30,31,30,31,31,30,31,30,31 }; int [, ] demo = { {1,2,3,4}, {5,6,7,8} };