Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.

Slides:



Advertisements
Verwante presentaties
Van domeinklasse tot implementatie
Advertisements

Hoofdstuk 10.2 Rekenmachine-casus.
Het type int Tekenen met Java operatoren
Hoofdstuk 2 Hallo, C# !.
Klassen schrijven Hoofdstuk 10. Visual Basic.NET voor studenten2 In dit hoofdstuk … Hoe schrijf je een klasse Constructormethodes Public methoden Variabelen.
Overerving Hoofdstuk 11 Hoofdstuk 11.
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.
Oefeningen Hoofdstuk 3.
JAVA1 H 9. OBJECTGEORIENTEERD PROGRAMMEREN: OVERERVING 1. INLEIDING Wat is overerving (inheritance)? Overerving is een mechanisme waarbij software opnieuw.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
Java GUI nJava is platform-onafhankelijk nLook&feel past zich aan aan het platform new FileDialog(……).show();
Hoofdstuk 10.1 Toepassing: Bitmap-editor. nKlik punten op scherm nPlaatje verschuiven left, right, up, down nPlaatje bewerken clear, invert, bold, outline.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Overerving: It’s a kind of magic…. Principes van OO: 1) Overerving 2) Encapsulatie 3) Polymorphisme = (deel van het) OO. paradigma.
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 14.1 Algoritmen: Zoeken in een netwerk.
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Polymorphisme en Interfaces: inleiding
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.
Opgave 1a ncompiler: vertaalt broncode naar machine-uitvoerbare code ninterpreter: voert broncode direct uit.
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.
Gelijkheid van Strings static bool Gelijk( string s, string t) { } int m = s.Length; int n = t.Length; for (i=0; i
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.
Resources. Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView :
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.
Syntax van opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += returnexpressie; if)(expressieopdrachtblok.
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Aanroep van een methode voert opdrachten uit in de body daarvan
Lezen en schrijven van tekst
Voortborduren op eerder gedaan werk
Reader en Writer leest en schrijft bytes leest string en char
Gameprogrammeren: Overerving
string versus char string char klasse primitief type
Letterfrequentie turven
Windows-applicatie using System.Windows.Forms; using System.Drawing;
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
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Gameprogrammeren: Game Basics
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Voorbeeld: Simulatie van bewegende deeltjes
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
Gameprogrammeren: Klassen en objecten
Arjan Egges & Paul Bergervoet
Object Communication (Jewel Jam)
Exceptions Exception:
Eerste deeltentamen Nagekeken werk ligt voor in de zaal
Transcript van de presentatie:

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 ); base.teken(g); virtual override

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

class Snelweg : Form { } Snelweg( ) { Paint += teken; } void teken(O o, PEA pea) { for (...t...) rijbaan[t].Teken( pea.Graphics, t*120, 60) } class MVoertuig { } void Teken(Graphics g) { } class Auto : MVoertuig { } void Teken(Graphics g) { gr.Fill ( ); } MVoertuig [ ] rijbaan = new MVoertuig [15];

class Snelweg { } Snelweg( ) { Paint += teken; MVoertuig [ ] rijbaan = new MVoertuig [15]; } for (int t=0; t<rijbaan.Length; t++) rijbaan[t] = new Auto(); rijbaan[t] = new VrachtW(); rijbaan[t] = new Combinat(); if ( t%3 != 0 ) else if ( t%6 == 0 ) else

class Snelweg { } Snelweg( ) { Paint += teken; } void teken(O o, PEA pea) { for (...t...) rijbaan[t].Teken( pea.Graphics, t*120, 60) } class MVoertuig { } void Teken(Graphics g) { } class Auto : MVoertuig { } void Teken(Graphics g) { gr.Fill ( ); } MVoertuig [ ] rijbaan = new MVoertuig [15]; class VrachtW : MVoertuig { } void Teken(Graphics g) { gr.Fill ( ); } virtual override rijbaan[2] = new Auto(); override

class VrachtW : MVoertuig { } void Teken(Graphics g) { } class Combinat : VrachtW { } void Teken(Graphics g) { } g.FillRect(...); g.FillEllipse(...); g.FillRect(...); g.FillEllipse(...); g.DrawLine(...); g.FillRect(...); g.FillEllipse(...); base. Teken(g); versie-management problematiek

class VrachtW : MVoertuig { } void Teken(Graphics g) { } class Combinat : VrachtW { } void Teken(Graphics g) { } g.FillRect(...); g.FillEllipse(...); g.FillRect(...); g.FillEllipse(...); g.DrawLine(...); g.FillRect(...); g.FillEllipse(...); base. Teken(g); aanhang. Teken(g); Aanhanger aanhang;

class Aanhanger { } void Teken(Graphics g) { } class Combinat : VrachtW { } void Teken(Graphics g) { } g. DrawLine(...); g.FillRect(...); g.FillEllipse(...); g.FillRect(...); g.FillEllipse(...); g.DrawLine(...); g.FillRect(...); g.FillEllipse(...); base. Teken(g); aanhang. Teken(g); Aanhanger aanhang;

MotorVoertuigPersonenAuto VrachtwagenCombinatie class PersonenAuto : MotorVoertuig class VrachtWagen : MotorVoertuig class Combinatie : Vrachtwagen “is een” class Motorvoertuig class Aanhanger Aanhanger : DingOpWielen class DingOpWielen { Aanhanger aanh; } “heeft een” DingOpWielen class Wiel Wiel { Wiel [ ] wielen; }

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

Publieksvraag: Gelijkheid van Strings static bool Gelijk( string s, string t) { } return s==t; Maar dan zonder de bestaande operator == voor strings te gebruiken == voor char en int mag wel

Publieksvraag: Gelijkheid van Strings static bool Gelijk( string s, string t) { } int m = s.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { } char c = s[i]; char d= t[i]; if (c!=d) return false; return m==n;

Gelijkheid van Strings static bool Equals( string s, string t) { } int m = s.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { } char c = s[i]; char d= t[i]; if (c!=d) return false; return m==n; class String { } this.Length; this[i];

Publieksvraag: Ordenen van Strings bool Equals( string t ) { // true als alle letters hetzelfde zijn } class String { } { } int Compare( string t ) // 0 als this en t hetzelfde zijn // positief als this alfabetisch voor t komt // negatief als this alfabetisch na t komt

Gelijkheid van Strings bool Equals ( string t) { } int m = this.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { } char c = this[i]; char d= t[i]; if (c!=d) return false; return m==n; class String { }

Ordenen van Strings bool Equals ( string t) { } int m = this.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { } char c = this[i]; char d= t[i]; if (c!=d) return false; return m==n; class String { } Compareint c - d ; m - n ;

naamtype void () blok parameters methode member

naamtype void operator op () blok parameters methode member

Gelijkheid van Strings static Gelijk ( string s, string t) { } return s.Equals(t); operator == class String { }

naamtype void operator op () blok parameters methode member

naamtype void operator op () blok parameters naam()parameters methode constructor member

naamtype void operator op () blok parameters naam()parameters methode constructor naamtype, =initialisatieconst ; veld member

naamtype void operator op () blok parameters naam()parameters methode constructor naamtype, =initialisatieconst ; veld naamtype{}blok set get member property

naamtype void operator op () blok parameters naam()parameters methode constructor naamtype, =initialisatieconst ; veld naamtype{}blok set get typeparameters[]this indexer member property