Hoofdstuk 9 Objecten en klassen
Programma en Geheugen opdrachten variabelen methoden objecten klasse veranderen zijn gegroepeerd in zijn gegroepeerd in methoden objecten bewerken zijn gegroepeerd in hebben als type klasse klasse klasse
Klasse-definitie Opsomming van methoden ieder bestaand uit opdrachten class Teller ... { Button b; int t; Opsomming van methoden ieder bestaand uit opdrachten ... init() { } b = new Button(); t = 0; ... bewerken ... paint(...) { } g.drawString(t...); Beschrijving van objecten door declaraties van variabelen ... actionPerformed(...) { } t = t+1; this.repaint(); }
Declaratie Declaratie reserveert geheugenruimte Voor een primitieve waarde zoals be- schreven in klasse Scrollbar int x; x 5 x = 5; Voor een object-verwijzing Scrollbar s; s s = new Scrollbar(...);
Creatie van nieuwe objecten Objecten met als type een library-klasse type van het gewenste object Scrollbar s; s = new Scrollbar(...); Objecten met als type een zelfgemaakte klasse Thermo t; t = new Thermo( ); dit doet de browser t . init ( ); t . paint (...);
Creatie van objecten Opbouw van object is gespecificeerd in de klasse browser’s current applet class Thermo { } extends Applet Thermo Scrollbar meter; int min, max; // methoden... geërfd meter min max zelf gede- clareerd
Aanroep van init public void init ( ) { Button reset; } min = 0; max = 0; meter = new Scrollbar(...); reset = new Button(...); Button reset meter min max Thermo browser’s current applet this Scrollbar
Aanroep van init } reset = new Button(...); this . add(meter); this . add(reset); reset . addActionListener(this); meter . addAdjListener(this); meter min max Thermo browser’s current applet reset this Scrollbar Button actListener added adjListener value
Na afloop van Aanroep van init Button actListener meter min max Thermo browser’s current applet added Scrollbar adjListener value
Klassen en objecten Klasse-definitie in programma Object-creatie door browser Thermo Klasse-definitie in library Object-creatie met new Scrollbar Klasse-definitie in programma Object-creatie met new Ruimte
Voorbeeld: Simulatie van bewegende deeltjes Simulatie - object Ruimte - objecten Deeltje - objecten Button - objecten
De klasse Simulatie public class Simulatie extends Applet { Button stap, auto; Ruimte r1, r2, r3; public void init ( ) { stap = new Button (“stap”); auto = new Button (“start”); r1 = new Ruimte(...); r2 = new Ruimte(...); r3 = new Ruimte(...); ... } Klasse Ruimte gaan we zelf maken!
heeft drie eigen Deeltje - objecten De klasse Ruimte Ruimte is een uitbreiding van een bestaand interactie-object private class Ruimte { } extends Canvas Deeltje d1, d2, d3; ieder Ruimte -object heeft drie eigen Deeltje - objecten // methoden nog toevoegen
De klasse Deeltje Deeltje is helemaal zelfgemaakt private class Deeltje { } positie van het Deeltje int x, y; int dx, dy; snelheid van het Deeltje Color kleur; // methoden nog toevoegen
Samenhang van objecten Simulatie Samenhang van objecten Button geërfd van Applet zelf gedeclareerd r1 r2 r3 stap auto browser’s current applet Button d1 d2 d3 Ruimte d1 d2 d3 Ruimte d1 d2 d3 Ruimte geërfd van Canvas x y dx dy kleur Deeltje x y dx dy kleur Deeltje x y dx dy kleur Deeltje
Constructie van nieuw object new-expressie doet twee dingen: r1 = new Ruimte ( ... ) ; r1 Geheugenruimte klaarzetten d1 d2 d3 Ruimte 100 196 Constructormethode aanroepen waarde is pijl naar het nieuwe object die je kunt opslaan
naam is hetzelfde als van de klasse Constructormethode naam is hetzelfde als van de klasse private class Ruimte { Deeltje d1, d2, d3; } private Ruimte ( ) { } int breed, int hoog this . setSize (breed,hoog); geen resultaat- type! this . setBackground (Color.YELLOW); d1 = new Deeltje (...); d2 = new Deeltje (...); d3 = new Deeltje (...); geërfd van Canvas
De klasse Deeltje private class Deeltje { } int x, y, dx, dy; Color kleur; public Deeltje (...) {...} public void doeStap (...) {...} public void teken (Graphics g ) {...}
Methoden van klasse Deeltje private class Deeltje { } int x, y, dx, dy; Color kleur; public void teken ( Graphics gr) { gr . setColor (kleur); gr . fillOval( x-3, y-3, 7, 7 ); }
Methoden van klasse Deeltje private class Deeltje { } int x, y, dx, dy; Color kleur; public void doeStap ( ... ) { x += dx; y += dy; if (x<0) { } x = -x; dx = -dx; if (y<0) { ... } if (x>maxX) { ... } if (y>maxY) { ... }
Overzicht van klassen class Simulatie extends Applet impl ActList init actionPerformed class Ruimte extends Canvas Ruimte paint class Deeltje Deeltje doeStap, teken
Methoden van klasse Simulatie public class Simulatie extends Applet impl ActionListener { } Button stap, auto; Ruimte r1, r2, r3; public void init ( ) { stap = new Button (“stap”); auto = new Button (“start”); r1 = new Ruimte (100, 196); r2 = new Ruimte (196, 150); r3 = new Ruimte ( 60, 75); } this.add(stap); this.add(auto); this.add(r1); this.add(r2); this.add(r3); stap.addActionListener(this); auto.addActionListener(this);
Methoden van klasse Simulatie public class Simulatie extends Applet impl ActionListener { } Button stap, auto; Ruimte r1, r2, r3; public void actionPerformed (ActionEvent e ) { if (e.getSource() == stap) this.doeStap( ); else ... } private void doeStap ( ) { } r1.doeStap(); r2.doeStap(); r3.doeStap(); r1.repaint (); r2.repaint (); r3.repaint ();
Methoden van klasse Ruimte private class Ruimte extends Canvas { } Deeltje d1, d2, d3; public Ruimte (int breed, int hoog) { this.setSize (breed, hoog); this.setBackground (Color.gray); d1 = new Deeltje(Color.RED, 30, 40, 10, 10); d2 = new Deeltje(Color.GREEN, 100, 80, 5, -10); d3 = new Deeltje(Color.BLUE, 200, 60, 8, 2); }
Methoden van klasse Ruimte private class Ruimte extends Canvas { } Deeltje d1, d2, d3; public void doeStap ( ) { d1 . doeStap (this.getSize()); d2 . doeStap (this.getSize()); d3 . doeStap (this.getSize()); } public void paint (Graphics gr) { d1 . teken (gr); d2 . teken (gr); d3 . teken (gr); }
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
Maak een animatie Thread animatie; animatie = new Thread ( this ); animatie . start ( ); this . run ( ); roept run aan van object dat bij constructor is meegegeven en keert dan direct terug (terwijl run nog bezig is)
De methode run class Simulatie extends Applet { } implements Runnable oneindige herhaling! public void run ( ) { } while (true) Thread . sleep (50); milliseconden milliseconden { } this . doeStap ( ); try { Thread . sleep (50); } catch (Exception e) { }
Starten van de animatie public void actionPerformed (ActionEvent e) { } if (e.getSource ( )==auto) { } if (beweging) { auto . setLabel (“Start”); beweging = false; } else { animatie = new Thread(this); animatie . start ( ); auto . setLabel (“Stop”); beweging = true; else this . doeStap ( );
De methode run nogmaals class Simulatie extends Applet { } implements Runnable oneindige herhaling! while (true) eindige herhaling. public void run ( ) { } while (beweging) { } this . doeStap ( ); try { Thread . sleep (50); } catch (Exception e) { }
Handiger Starten van de animatie public void actionPerformed (ActionEvent e) { } if (e.getSource ( )==auto) { } if (beweging) { auto . setLabel (“Start”); beweging = false; } else { (animatie != null ) animatie = null; animatie = new Thread(this); animatie . start ( ); auto . setLabel (“Stop”); beweging = true; else this . doeStap ( );
De waarde null null : verwijzing naar niks x null : verwijzing naar niks x = null; null is een geldige waarde voor elk object-verwijzings-type
Samenvatting Button actListener meter min max Thermo browser’s current applet added Scrollbar adjListener value
Samenvatting Maak objecten van een zelfbedachte klasse variabelen: wat is het object methoden: wat kan het object
Simulatie Button geërfd van Applet zelf gedeclareerd r1 r2 r3 stap auto browser’s current applet Button d1 d2 d3 Ruimte d1 d2 d3 Ruimte d1 d2 d3 Ruimte geërfd van Canvas x y dx dy kleur Deeltje x y dx dy kleur Deeltje x y dx dy kleur Deeltje