Hoofdstuk 4: Klassen definiëren

73
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 4: Klassen definiëren

description

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 - PowerPoint PPT Presentation

Transcript of Hoofdstuk 4: Klassen definiëren

Page 1: Hoofdstuk 4:  Klassen definiëren

Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Hoofdstuk 4: Klassen definiëren

Hoofdstuk 4: Klassen definiëren

Page 2: Hoofdstuk 4:  Klassen definiëren

22Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

KlasseKlasse

• Herinner:Gelijksoortige objecten met hetzelfde gedrag en gelijksoortige attributen worden gedefinieerd door een klasseklasse• Toestand: attributen of instantie variabelen• Gedrag: methoden

– Prototype van een methode» Naam methode, beschrijving van de argumenten

en beschrijving van de “return” waarde– Argumenten worden ook wel parameters genoemd

Page 3: Hoofdstuk 4:  Klassen definiëren

33Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Klasse definitieKlasse definitie

class klasse-naam {

instantie variabelen constructor definitiesmethode definities

}

delimiterdelimiter

Voorbeeld

Class Lacher {...}

klasse-naamklasse-naam

GebruikLacher x ;GebruikLacher x ;

x

Page 4: Hoofdstuk 4:  Klassen definiëren

44Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Methode definitieMethode definitie

public return-waarde methode-naam ( parameter-definities)

{ body van de methode }

Voorbeeld

public void lachen ( ) { System.out.println( “haha”); System.out.println( “haha”);}

Return-waarde: geenReturn-waarde: geen

Methode-naamMethode-naam

Parameter-definities: geenParameter-definities: geen

Body van de methodeBody van de methode

Page 5: Hoofdstuk 4:  Klassen definiëren

55Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Methode aanroepMethode aanroep

• Veronderstel een referentie variabele x die verwijst naar een object van de klasse Lacher

...Lacher x ;...x.lachen() ;

x

Lacher objectlachen()

lachen()

Page 6: Hoofdstuk 4:  Klassen definiëren

66Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Methode - uitvoeringMethode - uitvoering

public void lachen ( ) { System.out.println( “haha”); System.out.println( “haha”);}

x

Lacher objectlachen()

• Instructies in de body van de methode worden één voor één uitgevoerd

Page 7: Hoofdstuk 4:  Klassen definiëren

77Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Constructor definitieConstructor definitie

• Zoals methode• Geen return-type • Naam is steeds naam van de klasse

• Herinner: constructor maakt bij aanroep een nieuwe instantie van de klasse

Page 8: Hoofdstuk 4:  Klassen definiëren

88Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Constructor definitie - voorbeeldConstructor definitie - voorbeeld

Voorbeeldclass Lacher {

public Lacher ( ) {

// deze constructor maakt alleen een nieuwe instantie

// van de klasse Lachter, verder doet die niets

}

}

Definitie van een constructorDefinitie van een constructor

Gebruik

Lacher x ;

Gebruik

Lacher x ;

x

x = new Lacher();Lacher object

Page 9: Hoofdstuk 4:  Klassen definiëren

99Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Voorbeeld LacherVoorbeeld Lacher

class Lacher {

public Lacher ( ) {

}

public void lachen ( ) {

System.out.println( “haha”);

System.out.println( “haha”);

}}

De constructorDe constructor

Een methodeEen methode

GebruikLacher x ;x = new Lacher();x.lachen() ;

GebruikLacher x ;x = new Lacher();x.lachen() ;

Page 10: Hoofdstuk 4:  Klassen definiëren

1010Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Voorbeeld Lacher - meerdere instantiesVoorbeeld Lacher - meerdere instanties

class Lacher {public Lacher ( ) {

}public void lachen ( ) {

System.out.println( “haha”); System.out.println( “haha”);}

}GebruikLacher x , y;x = new Lacher();y = new Lacher();

x.lachen() ;y.lachen() ;

GebruikLacher x , y;x = new Lacher();y = new Lacher();

x.lachen() ;y.lachen() ;

y

x

Lacher object

Lacher object

Page 11: Hoofdstuk 4:  Klassen definiëren

1111Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Methode met argumentenMethode met argumenten

• We willen het geluid van de lacher kunnen veranderen.– Via een argument bij de methode

lachenx.lachen ( “hihi”)x.lachen (“hoho”)

– Methode definitie:public void lachen (String geluid )

Definitie van het argument, ook parameter genoemd

Definitie van het argument, ook parameter genoemd

typetype

Naam van de parameterNaam van de parameter

Page 12: Hoofdstuk 4:  Klassen definiëren

1212Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Methode definitie - met parametersMethode definitie - met parameters

Voorbeeld

public void lachen (String geluid ) { System.out.println( geluid ) ; System.out.println( geluid ) ;

}Gebruik van de parameter,zoals een variabeleGebruik van de parameter,zoals een variabele

Page 13: Hoofdstuk 4:  Klassen definiëren

1313Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

ParametersParameters

• 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

Page 14: Hoofdstuk 4:  Klassen definiëren

1414Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Parameters - werkingParameters - werking

public void lachen (String geluid ) {

System.out.println( geluid ) ;

System.out.println( geluid ) ;

}

Werking bij activatiex.lachen(“hihi”) ;

“hihi”

geluid

Page 15: Hoofdstuk 4:  Klassen definiëren

1515Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Parameters - werking (2)Parameters - werking (2)

public void lachen (String geluid ) {

System.out.println( geluid ) ;

System.out.println( geluid ) ;

}

Werking bij activatiex.lachen(“hihi”) ;

x.lachen(“hoho”) ;

“hihi”

geluid

Page 16: Hoofdstuk 4:  Klassen definiëren

1616Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Parameters - werkingParameters - werking

public void lachen (String geluid ) {

System.out.println( geluid ) ;

System.out.println( geluid ) ;

}

Werking bij activatiex.lachen(“hihi”) ;

x.lachen(“hoho”) ;

geluid

“hoho”

Page 17: Hoofdstuk 4:  Klassen definiëren

1717Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Klasse definitie met overloadingKlasse definitie met overloading

class Lacher {

public Lacher ( ) {

}

public void lachen () {

System.out.println( “haha”) ;

}

public void lachen (String geluid ) {

System.out.println( geluid ) ;

}

}

Methode naam is “overladen”Maar verschillende signatuur.

Methode naam is “overladen”Maar verschillende signatuur.

GebruikLacher x ;x = new Lacher ;x.lachen();x.lachen(“hihi”) ;

GebruikLacher x ;x = new Lacher ;x.lachen();x.lachen(“hihi”) ;

Page 18: Hoofdstuk 4:  Klassen definiëren

1818Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Klasse definitie met instantie variabelenKlasse 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

Page 19: Hoofdstuk 4:  Klassen definiëren

1919Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

class Lacher {

private String defaultGeluid ;

public Lacher (String geluid ) {… }

public void lachen () {… }

public void lachen (String geluid) {… }

}

Voorbeeld instantie variabelenVoorbeeld instantie variabelenVoorbeeld: Lacher klasse die toelaat om het default lachgeluid

bij het maken van een object vast te leggen.

Instantie variabeleInstantie variabele

GebruikLacher x ;GebruikLacher x ;

x

defaultGeluid

x = new Lacher( “hihi”);

Page 20: Hoofdstuk 4:  Klassen definiëren

2020Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

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 van instantie variabelenGebruik van instantie variabelen

Instantie variabeleInstantie variabele

Gebruik van de instantie variabeleGebruik van de instantie variabele

GebruikLacher x ;GebruikLacher x ;

x

defaultGeluid

x = new Lacher(‘hihi”);

“hihi”

x .lachen();x .lachen(“haha”);

Page 21: Hoofdstuk 4:  Klassen definiëren

2121Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

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) ;}

}

Meerdere instanties en instantie variabelenMeerdere instanties en instantie variabelen

GebruikLacher x, y ;x = new Lacher(‘hihi”);

GebruikLacher x, y ;x = new Lacher(‘hihi”);

x

defaultGeluid

“hihi”

y

defaultGeluid

“hoho”

y = new Lacher(‘hoho”);

x .lachen();y .lachen();

Page 22: Hoofdstuk 4:  Klassen definiëren

2323Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Variabelen voor methodenVariabelen voor methoden

class Lacher {private String defaultKlank ;

public Lacher (String klank ) {defaultKlank = klank ;

}public void lachen () {

String geluid;geluid = defaultKlank.concat(defaultKlank) ;System.out.println( geluid) ;}

}

Variabele enkel voor de methode lachen() Is een lokale variabele

Variabele enkel voor de methode lachen() Is een lokale variabele

• 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.

Page 23: Hoofdstuk 4:  Klassen definiëren

2424Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Lokale variabelen - werkingLokale variabelen - werking

public void lachen () {String geluid;geluid = defaultKlank.concat(defaultKlank) ;System.out.println( geluid) ;}

Werking bij activatieLacher x;

x = new Lacher(‘hi”);

x.lachen() ;

“hihi”

geluid

“hi”

x

defaultKlank

Page 24: Hoofdstuk 4:  Klassen definiëren

2525Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Meerdere methoden met variabelenMeerdere 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) ;}

}

Variabele enkel voor deze methode lachen()

Variabele enkel voor deze methode lachen()

Variabele enkel voor de methode lachten(String klank)

Variabele enkel voor de methode lachten(String klank)

Page 25: Hoofdstuk 4:  Klassen definiëren

2626Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Een klasse gebruikenEen 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

Page 26: Hoofdstuk 4:  Klassen definiëren

2727Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Voorbeeld - definitie klasseVoorbeeld - definitie klasse• Lacher.java bestandimport java.io.*; //nodig omdat we een PrintStream object gebruikenclass 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) ;}

}

Page 27: Hoofdstuk 4:  Klassen definiëren

2828Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Voorbeeld - gebruik klasseVoorbeeld - 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();

}

}

Page 28: Hoofdstuk 4:  Klassen definiëren

2929Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Klassen ontwerpenKlassen ontwerpen

Methode1. Bepaal het gewenste gedrag

methoden2. Bepaal de interface van de methoden

Prototype van de methoden3. Schrijf een voorbeeld programma die de

klasse gebruiktCheck

4. Maak het skelet van de klasse5. Schrijf de code voor de methoden

(implementeer)

Page 29: Hoofdstuk 4:  Klassen definiëren

3030Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Voorbeeld - klasse ontwerpVoorbeeld - klasse ontwerp

• Ontwerp klasse voor het behandelen van tijdstippen :

class Tijdstip

Page 30: Hoofdstuk 4:  Klassen definiëren

3131Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Bepaal het gedragTijdstip 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

Page 31: Hoofdstuk 4:  Klassen definiëren

3232Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Bepaal de interfaceTijdstip 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( )

Page 32: Hoofdstuk 4:  Klassen definiëren

3333Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Bepaal de interface (vervolg)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)

Page 33: Hoofdstuk 4:  Klassen definiëren

3434Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Bepaal de interface (vervolg)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( )

Page 34: Hoofdstuk 4:  Klassen definiëren

3535Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Een vb-programmaTijdstip vb - Een vb-programmaimport 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();}

}

Page 35: Hoofdstuk 4:  Klassen definiëren

3636Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Klasse skeletTijdstip vb - Klasse skeletclass Tijdstip {

instantie variabelen indien nodig

public Tijdstip() {statements

}// geef waardepublic void zet(int u, int m, int s) {

statements}// geef uur; public int geefUur( ) {

statements}

Page 36: Hoofdstuk 4:  Klassen definiëren

3737Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Klasse skelet (vervolg)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}

Page 37: Hoofdstuk 4:  Klassen definiëren

3838Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Klasse skelet (vervolg)Tijdstip vb - Klasse skelet (vervolg)

// wijzig sec ; public void wijzigSec(int s) {

statements}// druk af op het schermpublic void drukaf ( ) {

statements}

}

Page 38: Hoofdstuk 4:  Klassen definiëren

3939Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - ImplementatieTijdstip 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() {}

Page 39: Hoofdstuk 4:  Klassen definiëren

4040Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Implementatie (2)Tijdstip vb - Implementatie (2)

• Begin bij eender welke methode– Meestal de gemakkelijksteBv. zet

public void zet(int u, int m, int s) {uur = u ;min = m ;sec = s ;

}

Page 40: Hoofdstuk 4:  Klassen definiëren

4141Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Implementatie (3)Tijdstip vb - Implementatie (3)

• De methodes geefUur, geefMin en geefSec

public int geefUur() {return uur ;}

Speciale instructie: “return waarde” ; Speciale instructie: “return waarde” ;

public int geefMin() {return min ;}

public int geefSec() {return sec ;}

Page 41: Hoofdstuk 4:  Klassen definiëren

4242Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Implementatie (4)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 ;}

Page 42: Hoofdstuk 4:  Klassen definiëren

4343Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Tijdstip vb - Implementatie (5)Tijdstip vb - Implementatie (5)

• De methode drukaf

public void drukaf() {String tijdstipAlsString ; // in het formaat uu:mm:sstijdstipAlsString = uur + “:” + min + “:” + sec ;System.out.println( tijdstipAlsString);

}

of nog korterpublic void drukaf() {

System.out.println(uur + “:” + min + “:” + sec );}

Page 43: Hoofdstuk 4:  Klassen definiëren

4444Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Declaratie volgordeDeclaratie volgorde

• De volgorde van variabelen en methoden binnen een klasse is niet van belang.

• Java Conventie:– Constructors– Methoden– Instantie variabelen

Page 44: Hoofdstuk 4:  Klassen definiëren

4545Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Return statementReturn statement

• Uitvoering van een methode stopt indien:1. return-statement wordt uitgevoerd2. Einde ( } ) van methode bereikt wordt bij

void-methode

• Void-methode kan ook return hebbenreturn;

public void drukafVerkeerd() { String st = uur + “:” + min + “:” + sec ; return ; System.out.println (st) ;

}

public void drukaf() { System.out.println(uur + “:”

+ min + “:” + sec );

return ;}

Page 45: Hoofdstuk 4:  Klassen definiëren

4646Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Return waardeReturn waarde

• Methoden kunnen slechts één waarde terug geven– return uur, min, sec kan niet– Oplossing: zie later

Page 46: Hoofdstuk 4:  Klassen definiëren

4747Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

public versus privatepublic 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”

Page 47: Hoofdstuk 4:  Klassen definiëren

4848Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Toegankelijkheid en zichtbaarheidToegankelijkheid 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” ;…

}

Twee verschillende variabelenTwee verschillende variabelen

Draagwijdte (scope) van deze sDraagwijdte (scope) van deze s

Draagwijdte (scope) van deze sDraagwijdte (scope) van deze s

Page 48: Hoofdstuk 4:  Klassen definiëren

4949Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

De levensduur van een objectDe 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

Page 49: Hoofdstuk 4:  Klassen definiëren

5050Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

t

“herfst”“herfst”

String t ;

t = “herfst” ;

Voorbeeld Voorbeeld

String t ;

t = “herfst” ;

t = “winter” ;

t

“herfst”“herfst”

“winter”“winter”

String t ;t

Referentie naar “herfst” is weg! Java zal “herfst” objectvernietigen.

Referentie naar “herfst” is weg! Java zal “herfst” objectvernietigen.

Page 50: Hoofdstuk 4:  Klassen definiëren

5151Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Levensduur van variabelen (1)Levensduur van variabelen (1)

• Instantie variabelen worden samen met het object gecreëerd – De levensduur is dus gelijk aan de

levensduur van het object

ObjectToestand

Kleur: “blauw”Merk: “Opel”Nummerplaat: “ARJ775”

GedragRijdenRemmenToeteren

Instantie variabelenInstantie variabelen

Page 51: Hoofdstuk 4:  Klassen definiëren

5252Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Levenduur van variabelen (2)Levenduur van variabelen (2)

• Parameters en lokale variabelen van een methode worden gecreëerd wanneer de methode aangeroepen wordt

• Ze worden vernietigd als de uitvoering van de methode stopt

tijdActivatiemethode

Eindemethode

Levensduur van s1, s2 en hulp

Public void m(String s1, String s2) { String hulp; ...

Page 52: Hoofdstuk 4:  Klassen definiëren

5353Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

• this ook te gebruiken om een onderscheid te maken tussen instantie variabele en lokale variabele met dezelfde naam class … { public void methode1 {

String s ;…s}

private String s }

thisthis• Een bericht wordt naar een object

gestuurd. • Om binnen een methode naar dit object te

refereren gebruiken we “this”this.doeIets

Lokale variabele sLokale variabele s

Instantie variabele sInstantie variabele s

Welke s? Welke s? - s voor lokale s- this.s voor instantie variabele s

- s voor lokale s- this.s voor instantie variabele s

Page 53: Hoofdstuk 4:  Klassen definiëren

5454Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Voorbeeld 2 - klasse ontwerpVoorbeeld 2 - klasse ontwerp

• Ontwerp een klasse voor het behandelen van namen:

Name

Page 54: Hoofdstuk 4:  Klassen definiëren

5555Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Klasse Name - Bepaal het gedragKlasse Name - Bepaal het gedrag

• We willen het volgende gedrag– Geef de initialen van de naam (als

string)– Voeg een titel (Mr, Mrs, …) toe of

vervang die– Geef de naam in familienaam-

voornaam formaat (als string)– Geef de naam in titel-voornaam-

familienaam formaat (als string)

Page 55: Hoofdstuk 4:  Klassen definiëren

5656Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Name vb - Bepaal de interfaceName vb - Bepaal de interface

– Class name: Name

– Constructor: vb: Name ik = new Name(“Olga”, “De Troyer”);public Name(String first, String last)

– Geef initialen: vb: String inits = ik.getInitials();public String getInitials()

– Geef familienaam, voornaam: vb: String s = ik.getLastFirst();public String getLastFirst()

– Geef titel, voornaam, familienaam: vb: String s = ik.getFirstLast();public String getFirstLast()

– Voeg titel toe: vb: String s = ik.setTitle(“Prof. Dr.”);public void setTitle(String newTitle);

Page 56: Hoofdstuk 4:  Klassen definiëren

5757Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Name vb - Een vb-programmaName vb - Een vb-programmaSchrijf een programma met 3 strings (voornaam, achternaam, titel); hiervan een naam maakt; deze 3 strings op een lijn schrijft gevolgd door de naam in familienaam-voornaam formaat; de initialen; de naam in voornaam- familienaam formaat; telkens op een nieuwe lijn

import java.io.*; class IllustrateName {

public static void main(String[] arg) throws IOException { Name n ;String first, last, title ;first = “Vera”last = “Janssens“;title = “Dr “;

Page 57: Hoofdstuk 4:  Klassen definiëren

5858Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Name vb - Een vb-programma (2)Name vb - Een vb-programma (2)//maak de naamn = new Name(first, last);n.setTitle(title);

//schrijf de 3 strings op een lijnSystem.out.print(first);System.out.print(last);System.out.println(title);

//schrijf familienaam voornaamSystem.out.println(n.getLastFirst());

//schrijf initialen System.out.println(n.getInitials());

//schrijf voornaam familienaamSystem.out.println(n.getFirstLast());}

}

Page 58: Hoofdstuk 4:  Klassen definiëren

5959Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Name vb - Klasse skeletName vb - Klasse skeletclass Name {

instantie variabelen indien nodigpublic Name( String first, String last ) {

statements}//geef initialenpublic String getInitials( ) {

statements}// geef voornaam, familienaaam public String getFirstLast( ) {

statements}// geef familienaam, voornaaam public String getLastFirst( ) {

statements}// voeg titel toe public void setTitle( String newTitle) {

statements}

}

Page 59: Hoofdstuk 4:  Klassen definiëren

6060Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Name vb - ImplementatieName vb - Implementatie

• Hoe de naam bijhouden?– Instantie variabel(en)– 1 of 3 ?

private String firstName;private String lastName;private String title;

• Hoe waarde geven?– Via constructor

public Name( String first, String last) {firstName = first ;lastName = last ;title = ? ;

} title = ” ” ;title = ” ” ;

Page 60: Hoofdstuk 4:  Klassen definiëren

6161Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Name vb - Implementatie (2)Name vb - Implementatie (2)public void setTitle( String newtitle) {

title = newtitle ;}

public String getLastFirst ( ) {return lastName.concat(“, “).concat(firstName);

} public String getFirstLast ( ) {

return title.concat(“ “). concat(firstName).concat(“ “).concat(lastName);

} public String getInitials ( ) {

String s ;s = firstName.substring(0,1) ;s = s.concat(“.”);s = s.concat( lastName.substring(0,1));s = s.concat(“.”);return s ;

}

Page 61: Hoofdstuk 4:  Klassen definiëren

6262Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Name vb - voorbeeld programmaName vb - voorbeeld programmaMaak 2 Name-objecten met voornaam “Olga”, familienaam “De Troyer”, resp. “Dirk”, “De Troyer” en schrijf ze uit in het familienaam-voornaam formaat telkens op een nieuwe lijn.

import java.io.* ;class program4 {

public static void main(String arg [] ) throw IOException {Name n1 , n2 ;n1 = new Name(“Olga”, “De Troyer”);n2 = new Name(“Dirk”, “De Troyer”);System.out.println(n1.getLastFirst());System.out.println(n2.getLastFirst());}

}Twee Name-objecten elk met hun eigen

instantie variabelen (= hun toestand)

Page 62: Hoofdstuk 4:  Klassen definiëren

6363Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Klasse methodenKlasse methoden

• Nieuwe instantie van een klasse maken – Geen object-ontvanger !

• Bericht kan niet naar een object gestuurd worden

• Bericht wordt naar de klasse gestuurd Klasse methode

Page 63: Hoofdstuk 4:  Klassen definiëren

6464Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Klasse methoden (2)Klasse methoden (2)

• Worden gedefinieerd zoals andere methoden maar met het sleutelwoord static voor het return-type– Ook wel statische methoden genoemd

public static int klasseMethode () {

…}

Page 64: Hoofdstuk 4:  Klassen definiëren

6565Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Programma’s en Klasse methoden ...Programma’s en Klasse methoden ...

import java.io.*;class Programma1 {

public static void main (String[] arg) { System.out.println(“Dit is mijn eerste Java programma”);System.out.println(“maar niet mijn laatste.”);

}}

• Een programma is een klasse • Zo een klasse heeft een main-methode• De main-methode is een klasse methode

– Er bestaan immers geen objecten bij aanvang van een programma

Page 65: Hoofdstuk 4:  Klassen definiëren

6666Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Klasse variabelenKlasse variabelen

• Een klasse attribuut of klasse variabele is een attribuut gemeenschappelijk aan alle instanties van een klasse.

• Dus eigenlijk een attribuut van de klasse• Worden aangeduid door het sleutelwoord

static

Page 66: Hoofdstuk 4:  Klassen definiëren

6767Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Klasse variabelen - voorbeeldKlasse variabelen - voorbeeld• Voorbeeld - Name klasse:

Veronderstel een maximale lengte voor de namen

class Name {public Name( String first, String last ) {

... }public String getInitials( ) {

... }public String getFirstLast( ) {

… }public String getLastFirst( ) {

... } public void setTitle( String newTitle) {

... }private String firstName;private String LastName;private String title;

static maxNameLength = 50 ;Klasse variabeleKlasse variabele

Page 67: Hoofdstuk 4:  Klassen definiëren

6868Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Klasse variablen - voorbeeld (2) Klasse variablen - voorbeeld (2)

public boolean testLength( String s ) {if (s.length() <= maxNameLength return true;else return false ;

}

}

Page 68: Hoofdstuk 4:  Klassen definiëren

6969Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Klasse methode- voorbeeldKlasse methode- voorbeeld• Name klasse met maximale lengte voor de

namen.• Klasse methode om deze lengte op te vragen

class Name { static maxNameLength = 50 ;

... public static int getMaxLength( ) {

return maxNameLength}

} Aanroep: i = Name.getMaxLength();

Klasse methodeKlasse methode

Page 69: Hoofdstuk 4:  Klassen definiëren

7070Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

PackagesPackages

• Klassen kan men groeperen in packages– Voorbeeld: io-package

• Packages kunnen andere packages bevatten– Hierarchie van packages

java

awt beans io

Page 70: Hoofdstuk 4:  Klassen definiëren

7171Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Package gebruikenPackage gebruiken

• Via import statementimport package-naam

import java.io.*;class Programma1 {

public static void main (String[] arg) { System.out.println(“Dit is mijn eerste Java programma”);System.out.println(“maar niet mijn laatste.”);

}}

Geeft aan dat men het package java.io wilt gebruiken

• java.io geeft package hierarchie aan• * betekent alle klassen uit het package

Page 71: Hoofdstuk 4:  Klassen definiëren

7272Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Package makenPackage maken

package package-naam

package bank ;

public class Rekening {

…}

Klasse binnen package moet public zijn om ze buiten het package te kunnen gebruiken (via import)

package bank.interest ;public class Interest {

…}Package binnen package

Page 72: Hoofdstuk 4:  Klassen definiëren

7373Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Het AWT packageHet AWT package

• AWT = Abstract Window Toolkit• Klassen om grafische interface te maken

door middel van visuele componenten• Button• TextArea, TextField• Frame• …

– Met methoden zoals• setFont, setSize, remove, setText, ...

Page 73: Hoofdstuk 4:  Klassen definiëren

7474Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer

Het AWT package (2)Het AWT package (2)

• Methoden voor het opvangen van user interactie

• Openen en sluiten van een window• Text invoeren• Button indrukken• …