1 / 73

Hoofdstuk 4: Klassen definiëren

Hoofdstuk 4: Klassen definiëren. Klasse. Herinner: Gelijksoortige objecten met hetzelfde gedrag en gelijksoortige attributen worden gedefinieerd door een klasse Toestand: attributen of instantie variabelen Gedrag: methoden Prototype van een methode

holden
Download Presentation

Hoofdstuk 4: Klassen definiëren

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hoofdstuk 4: Klassen definiëren

  2. Klasse • Herinner: Gelijksoortige objecten met hetzelfde gedrag en gelijksoortige attributen worden gedefinieerd door een klasse • Toestand: attributen of instantie variabelen • Gedrag: methoden • Prototype van een methode • Naam methode, beschrijving van de argumentenen beschrijving van de “return” waarde • Argumenten worden ook wel parameters genoemd

  3. delimiter klasse-naam x Klasse definitie class klasse-naam { instantie variabelenconstructor definities methode definities } Gebruik Lacher x ; Voorbeeld Class Lacher { ... }

  4. Return-waarde: geen Parameter-definities: geen Methode-naam Body van de methode Methode definitie public return-waarde methode-naam ( parameter-definities) { body van de methode } Voorbeeld public void lachen ( ) { System.out.println( “haha”); System.out.println( “haha”); }

  5. Lacher object lachen() lachen() x Methode aanroep • Veronderstel een referentie variabele x die verwijst naar een object van de klasse Lacher ... Lacher x ; ... x.lachen() ;

  6. Lacher object lachen() x Methode - uitvoering public void lachen ( ) { System.out.println( “haha”); System.out.println( “haha”); } • Instructies in de body van de methode worden één voor één uitgevoerd

  7. Constructor definitie • Zoals methode • Geen return-type • Naam is steeds naam van de klasse • Herinner: constructor maakt bij aanroep een nieuwe instantie van de klasse

  8. Definitie van een constructor x Lacher object Constructor definitie - voorbeeld Voorbeeld class Lacher { public Lacher ( ) { // deze constructor maakt alleen een nieuwe instantie // van de klasse Lachter, verder doet die niets } } Gebruik Lacher x ; x = new Lacher();

  9. De constructor Een methode Voorbeeld Lacher class Lacher { public Lacher ( ) { } public void lachen ( ) { System.out.println( “haha”); System.out.println( “haha”); } } Gebruik Lacher x ; x = new Lacher(); x.lachen() ;

  10. Lacher object y x Lacher object Voorbeeld Lacher - meerdere instanties class Lacher { public Lacher ( ) { } public void lachen ( ) { System.out.println( “haha”); System.out.println( “haha”); } } Gebruik Lacher x , y; x = new Lacher(); y = new Lacher(); x.lachen() ; y.lachen() ;

  11. type Naam van de parameter Definitie van het argument, ook parameter genoemd Methode met argumenten • We willen het geluid van de lacher kunnen veranderen. • Via een argument bij de methode lachen x.lachen ( “hihi”) x.lachen (“hoho”) • Methode definitie: public void lachen (String geluid )

  12. Gebruik van de parameter, zoals een variabele Methode definitie - met parameters Voorbeeld public void lachen (String geluid ) { System.out.println( geluid ) ; System.out.println( geluid ) ; }

  13. Parameters • Een parameter is zoals een variabele, maar • bestaat maar zolang de methode uitgevoerd wordt • De waarde bij aanvang wordt gegeven bij de aanroep van de methode

  14. geluid “hihi” Parameters - werking public void lachen (String geluid ) { System.out.println( geluid ) ; System.out.println( geluid ) ; } Werking bij activatie x.lachen(“hihi”) ;

  15. geluid “hihi” Parameters - werking (2) public void lachen (String geluid ) { System.out.println( geluid ) ; System.out.println( geluid ) ; } Werking bij activatie x.lachen(“hihi”) ; x.lachen(“hoho”) ;

  16. geluid “hoho” Parameters - werking public void lachen (String geluid ) { System.out.println( geluid ) ; System.out.println( geluid ) ; } Werking bij activatie x.lachen(“hihi”) ; x.lachen(“hoho”) ;

  17. Methode naam is “overladen” Maar verschillende signatuur. Klasse definitie met overloading class Lacher { public Lacher ( ) { } public void lachen () { System.out.println( “haha”) ; } public void lachen (String geluid ) { System.out.println( geluid ) ; } } Gebruik Lacher x ; x = new Lacher ; x.lachen(); x.lachen(“hihi”) ;

  18. Klasse definitie met instantie variabelen • Instantie variabelen dienen om toestand van een object te beschrijven • Zijn variabelen • Zijn toegankelijk vanuit al de methoden gedefinieerd in de klasse • Zijn enkel toegankelijk voor die methoden private type identifier

  19. x Instantie variabele defaultGeluid Voorbeeld instantie variabelen Voorbeeld: Lacher klasse die toelaat om het default lachgeluid bij het maken van een object vast te leggen. class Lacher { private String defaultGeluid ; public Lacher (String geluid ) { … } public void lachen () { … } public void lachen (String geluid) { … } } Gebruik Lacher x ; x = new Lacher( “hihi”);

  20. Gebruik van de instantie variabele x Instantie variabele defaultGeluid “hihi” Gebruik van instantie variabelen class Lacher { private String defaultGeluid ; public Lacher (String default ) { defaultGeluid = default ; } public void lachen () { System.out.println( defaultGeluid) ; } public void lachen (String geluid) { System.out.println( geluid) ; } } Gebruik Lacher x ; x = new Lacher(‘hihi”); x .lachen(); x .lachen(“haha”);

  21. x y defaultGeluid defaultGeluid “hihi” “hoho” Meerdere instanties en instantie variabelen class Lacher { private String defaultGeluid ; public Lacher (String default ) { defaultGeluid = default ; } public void lachen () { System.out.println( defaultGeluid) ; } public void lachen (String geluid) { System.out.println( geluid) ; } } Gebruik Lacher x, y ; x = new Lacher(‘hihi”); y = new Lacher(‘hoho”); x .lachen(); y .lachen();

  22. Variabele enkel voor de methode lachen() Is een lokale variabele Variabelen voor methoden • We wijzigen de klasse en houden in de instantie variabele enkel de klank bij, bv. “ha” of “hi”. Bij de methode lachen wordt het lachgeluid dan samengesteld door concatenatie. class Lacher { private String defaultKlank ; public Lacher (String klank ) { defaultKlank = klank ; } public void lachen () { String geluid; geluid = defaultKlank.concat(defaultKlank) ; System.out.println( geluid) ; } }

  23. geluid “hihi” x defaultKlank “hi” Lokale variabelen - werking public void lachen () { String geluid; geluid = defaultKlank.concat(defaultKlank) ; System.out.println( geluid) ; } Werking bij activatie Lacher x; x = new Lacher(‘hi”); x.lachen() ;

  24. Variabele enkel voor deze methode lachen() Variabele enkel voor de methode lachten(String klank) Meerdere methoden met variabelen class Lacher { Private String defaultKlank ; public Lacher (String klank ) { defaultKlank = klank ; } public void lachen () { String defaultGeluid; defaultGeluid = defaultKlank.concat(defaultKlank) ; System.out.println( defaultGeluid) ; } public void lachen (String klank) { String geluid; geluid = klank.concat(klank) ; System.out.println( geluid) ; } }

  25. Een klasse gebruiken • Stap 1: maak bestand klasse-naam.java met klasse definitie • Stap 2:Compileer dit bestand -> resultaat bestand klasse-naam.class • Stap 3:klasse kan nu gebruikt worden

  26. Voorbeeld - definitie klasse • Lacher.java bestand import java.io.*; //nodig omdat we een PrintStream object gebruiken class Lacher { private String defaultKlank ; public Lacher (String klank ) { defaultKlank = klank ; } public void lachen () { String geluid; geluid = defaultKlank.concat(defaultKlank) ; System.out.println( geluid) ; } public void lachen (String klank) { String geluid; geluid = klank.concat(klank) ; System.out.println( geluid) ; } }

  27. Voorbeeld - gebruik klasse import java.io.*; class ProgrammaLachen { public static void main(String[ ] arg) { System.out.println(“Lekker lachen”); Lacher x, y ; x = new Lacher(“yuk”) ; y = new Lacher(“harr”); x.lachen(); x.lachen(“hee”); y.lachen(); } }

  28. Klassen ontwerpen Methode 1. Bepaal het gewenste gedrag • methoden 2. Bepaal de interface van de methoden • Prototype van de methoden 3. Schrijf een voorbeeld programma die de klasse gebruikt • Check 4. Maak het skelet van de klasse 5. Schrijf de code voor de methoden (implementeer)

  29. Voorbeeld - klasse ontwerp • Ontwerp klasse voor het behandelen van tijdstippen :class Tijdstip

  30. Tijdstip vb - Bepaal het gedrag • We willen het volgende gedrag • Een tijdstip een waarde (uren, min en sec) kunnen geven • Het uur van een tijdstip kunnen opvragen • De minuten van een tijdstip kunnen opvragen • De seconden van een tijdstip kunnen opvragen • Het uur van een tijdstip kunnen wijzigen • De minuten van een tijdstip kunnen wijzigen • De seconden van een tijdstip kunnen wijzigen • Het tijdstip kunnen afdrukken op het scherm

  31. Tijdstip vb - Bepaal de interface • Class name: Tijdstip • Constructor: Tijdstip() • Vb: Tijdstip t1 = new Tijdstip(); • public Tijdstip() • Tijdstip een waarde geven: Vb: t1.zet(23, 40, 15); • public void zet( int u, int m, int s) • Het uur van een tijdstip kunnen opvragen: Vb: int u1 ; u1 = t1.geefUur(); • public int geefUur( )

  32. Tijdstip vb - Bepaal de interface (vervolg) • De minuten van een tijdstip kunnen opvragen: Vb: int m1 ; m1 = t1.geefMin(); • public int geefMin( ) • De sec van een tijdstip kunnen opvragen: Vb: int s1 ; s1 = t1.geefSec(); • public int geefSec( ) • Het uur van een tijdstip kunnen wijzigen: Vb: t1.wijzigUur(11); • public void wijzigUur( int u)

  33. Tijdstip vb - Bepaal de interface (vervolg) • De minuten van een tijdstip kunnen wijzigen: Vb: t1.wijzigMin(44); • public void wijzigMin( int m) • De seconden van een tijdstip kunnen wijzigen: Vb: t1.wijzigSec(20); • public void wijzigSec( int s) • Het tijdstip kunnen afdrukken op het scherm: Vb: t1.drukaf(); • public void drukaf( )

  34. Tijdstip vb - Een vb-programma import java.io.*; class ProbeerTijdstip { public static void main(String[ ] arg) throws IOException { Tijdstip t1 = new Tijdstip (); Tijdstip t2 = new Tijdstip(); t1.zet(10, 15, 30) ; int u, m, s ; u = t1.geefUur (); m = t1.geefMin() ; s = t1.geefSec(); t2.zet(u +1, m, s) ; t1.wijzigMin(30) ; t1.drukaf(); t2.drukaf(); } }

  35. Tijdstip vb - Klasse skelet class Tijdstip { instantie variabelen indien nodig public Tijdstip() { statements } // geef waarde public void zet(int u, int m, int s) { statements } // geef uur; public int geefUur( ) { statements }

  36. Tijdstip vb - Klasse skelet (vervolg) // geef min; public int geefMin( ) { statements } // geef sec; public int geefSec( ) { statements } // wijzig uur ; public void wijzigUur(int u) { statements } // wijzig min ; public void wijzigMin(int m) { statements }

  37. Tijdstip vb - Klasse skelet (vervolg) // wijzig sec ; public void wijzigSec(int s) { statements } // druk af op het scherm public void drukaf ( ) { statements } }

  38. Tijdstip vb - Implementatie • Welke instantie variabelen nodig? • Bijhouden uur, minuten, seconden • 3 integer variabelen: uur, min en sec int uur, min, sec ; • De constructor Tijdstip() public Tijdstip() { }

  39. Tijdstip vb - Implementatie (2) • Begin bij eender welke methode • Meestal de gemakkelijkste Bv. zet public void zet(int u, int m, int s) { uur = u ; min = m ; sec = s ; }

  40. Speciale instructie: “return waarde” ; Tijdstip vb - Implementatie (3) • De methodes geefUur, geefMin en geefSec public int geefUur() { return uur ; } public int geefMin() { return min ; } public int geefSec() { return sec ; }

  41. Tijdstip vb - Implementatie (4) • De methodes wijzigUur, wijzigMin en wijzigSec public void wijzigUur(int u) { uur = u ; } public void wijzigMin(int m) { min = m ; } public void wijzigSec(int s) { sec = s ; }

  42. Tijdstip vb - Implementatie (5) • De methode drukaf public void drukaf() { String tijdstipAlsString ; // in het formaat uu:mm:ss tijdstipAlsString = uur + “:” + min + “:” + sec ; System.out.println( tijdstipAlsString); } of nog korter public void drukaf() { System.out.println(uur + “:” + min + “:” + sec ); }

  43. Declaratie volgorde • De volgorde van variabelen en methoden binnen een klasse is niet van belang. • Java Conventie: • Constructors • Methoden • Instantie variabelen

  44. Return statement • Uitvoering van een methode stopt indien: 1. return-statement wordt uitgevoerd 2. Einde ( } ) van methode bereikt wordt bij void-methode • Void-methode kan ook return hebben return; public void drukaf() { System.out.println(uur + “:” + min + “:” + sec ); return ; } public void drukafVerkeerd() { String st = uur + “:” + min + “:” + sec ; return ; System.out.println (st) ; }

  45. Return waarde • Methoden kunnen slechts één waarde terug geven • return uur, min, seckan niet • Oplossing: zie later

  46. public versus private • privateverhindert dat de methode of variabele buiten de klasse kan worden gebruikt • publiclaat gebruik van de methode of variabele buiten de klasse toe • In ‘t algemeen: • Methoden uit de interface zijn “public” • Hulp-methoden zijn “private” • Instantie variabelen zijn “private”

  47. Draagwijdte (scope) van deze s Twee verschillende variabelen Draagwijdte (scope) van deze s Toegankelijkheid en zichtbaarheid • Lokale variabelen zijn niet toegankelijk buiten de methode • Ze zijn ook niet zichtbaar buiten de methode public void methode1() { String s = “test1” ; ... } public void methode2 () { String s = “test2” ; … }

  48. De levensduur van een object • Het “leven” van een object begint bij de creatie van het object • door de new operator • Een object blijft “leven” zolang er ten minste één referentie variabele naar verwijst. • Java vernietigt automatische alle objecten waarnaar niet meer gerefereerd wordt

  49. Referentie naar “herfst” is weg! Java zal “herfst” object vernietigen. t t t String t ; t = “herfst” ; String t ; String t ; t = “herfst” ; t = “winter” ; “herfst” “herfst” “winter” Voorbeeld

  50. Object Toestand Kleur: “blauw” Merk: “Opel” Nummerplaat: “ARJ775” Gedrag Rijden Remmen Toeteren Levensduur van variabelen (1) • Instantie variabelen worden samen met het object gecreëerd • De levensduur is dus gelijk aan de levensduur van het object Instantie variabelen

More Related