Title: Hoofdstuk 4: Klassen defini
1Hoofdstuk 4 Klassen definiëren
2Klasse
- 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 argumenten en
beschrijving van de return waarde - Argumenten worden ook wel parameters genoemd
3Klasse definitie
- class klasse-naam
- instantie variabelen constructor definities
- methode definities
-
Gebruik Lacher x
Voorbeeld Class Lacher ...
4Methode definitie
- public return-waarde methode-naam (
parameter-definities) - body van de methode
Voorbeeld public void lachen ( )
System.out.println( haha)
System.out.println( haha)
5Methode aanroep
- Veronderstel een referentie variabele x die
verwijst naar een object van de klasse Lacher
... Lacher x ... x.lachen()
6Methode - uitvoering
public void lachen ( ) System.out.println(
haha) System.out.println( haha)
- Instructies in de body van de methode worden één
voor één uitgevoerd
7Constructor definitie
- Zoals methode
- Geen return-type
- Naam is steeds naam van de klasse
- Herinner constructor maakt bij aanroep een
nieuwe instantie van de klasse
8Constructor 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()
9Voorbeeld Lacher
- class Lacher
- public Lacher ( )
-
- public void lachen ( )
- System.out.println( haha)
- System.out.println( haha)
-
-
Gebruik Lacher x x new Lacher() x.lachen()
10Voorbeeld 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()
11Methode 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 )
12Methode definitie - met parameters
Voorbeeld public void lachen (String geluid )
System.out.println( geluid )
System.out.println( geluid )
13Parameters
- 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
14Parameters - werking
- public void lachen (String geluid )
- System.out.println( geluid )
- System.out.println( geluid )
-
- Werking bij activatie
- x.lachen(hihi)
15Parameters - werking (2)
- public void lachen (String geluid )
- System.out.println( geluid )
- System.out.println( geluid )
-
- Werking bij activatie
- x.lachen(hihi)
- x.lachen(hoho)
16Parameters - werking
- public void lachen (String geluid )
- System.out.println( geluid )
- System.out.println( geluid )
-
- Werking bij activatie
- x.lachen(hihi)
- x.lachen(hoho)
17Klasse 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)
18Klasse 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
19Voorbeeld 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)
20Gebruik 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)
21Meerdere 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()
22Conventie voor instantie variabelen
- De instantie variabelen worden meestal als
laatste deel in de klasse definitie gegeven.
class Lacher public Lacher (String default )
defaultGeluid default public void
lachen () System.out.println( defaultGeluid)
public void lachen (String geluid)
System.out.println( geluid) private
String defaultGeluid
23Variabelen 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)
-
-
24Lokale 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()
25Meerdere 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)
-
-
26Een klasse gebruiken
- Stap 1 maak bestand klasse-naam.java met klasse
definitie - Stap 2Compileer dit bestand -gt resultaat
bestand klasse-naam.class - Stap 3klasse kan nu gebruikt worden
27Voorbeeld - 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)
-
28Voorbeeld - 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()
-
29Klassen 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)
30Voorbeeld - klasse ontwerp
- Ontwerp klasse voor het behandelen van
tijdstippen class Tijdstip
31Tijdstip 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
32Tijdstip 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( )
33Tijdstip 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)
34Tijdstip 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( )
35Tijdstip 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()
-
36Tijdstip 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
-
-
37Tijdstip 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
-
-
38Tijdstip vb - Klasse skelet (vervolg)
- // wijzig sec
- public void wijzigSec(int s)
- statements
-
- // druk af op het scherm
- public void drukaf ( )
- statements
-
-
39Tijdstip 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()
-
40Tijdstip 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
-
41Tijdstip vb - Implementatie (3)
- De methodes geefUur, geefMin en geefSec
- public int geefUur()
- return uur
-
-
public int geefMin() return min
public int geefSec() return sec
42Tijdstip 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
-
43Tijdstip vb - Implementatie (5)
- De methode drukaf
-
- public void drukaf()
- String tijdstipAlsString // in het
formaat uummss - tijdstipAlsString uur min sec
- System.out.println( tijdstipAlsString)
-
- of nog korter
- public void drukaf()
- System.out.println(uur min sec
) -
44Declaratie volgorde
- De volgorde van variabelen en methoden binnen een
klasse is niet van belang. - Java Conventie
- Constructors
- Methoden
- Instantie variabelen
45Return 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)
46Return waarde
- Methoden kunnen slechts één waarde terug geven
- return uur, min, sec kan niet
- Oplossing zie later
47public 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
48Toegankelijkheid 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
-
-
49De 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
50Voorbeeld
51Levensduur 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
52Levenduur 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
Public void m(String s1, String s2) String
hulp ...
53this
- Een bericht wordt naar een object gestuurd.
- Om binnen een methode naar dit object te
refereren gebruiken we this - this.doeIets
- 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
-
- s voor lokale s - this.s voor instantie
variabele s
54Voorbeeld 2 - klasse ontwerp
- Ontwerp een klasse voor het behandelen van namen
- Name
55Klasse 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)
56Name 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)
57Name vb - Een vb-programma
- Schrijf 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
58Name vb - Een vb-programma (2)
- //maak de naam
- n new Name(first, last)
- n.setTitle(title)
-
- //schrijf de 3 strings op een lijn
- System.out.print(first)
- System.out.print(last)
- System.out.println(title)
-
- //schrijf familienaam voornaam
- System.out.println(n.getLastFirst())
- //schrijf initialen
- System.out.println(n.getInitials())
-
- //schrijf voornaam familienaam
- System.out.println(n.getFirstLast())
-
-
59Name vb - Klasse skelet
- class Name
- instantie variabelen indien nodig
- public Name( String first, String last )
- statements
-
- //geef initialen
- public 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)
60Name 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 ?
-
61Name 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
-
62Name vb - voorbeeld programma
- Maak 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)
63Klasse 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
64Klasse 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 ()
-
-
65Programmas 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
66Klasse 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
67Klasse 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
-
68Klasse variablen - voorbeeld (2)
- public boolean testLength( String s )
- if (s.length() lt maxNameLength return true
- else return false
-
69Klasse 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()
70Packages
- Klassen kan men groeperen in packages
- Voorbeeld io-package
- Packages kunnen andere packages bevatten
- Hierarchie van packages
71Package gebruiken
- Via import statement
- import 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.)
-
-
- java.io geeft package hierarchie aan
- betekent alle klassen uit het package
72Package maken
- package package-naam
- package bank
- public class Rekening
package bank.interest public class Interest
73Het 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, ...
74Het AWT package (2)
- Methoden voor het opvangen van user interactie
- Openen en sluiten van een window
- Text invoeren
- Button indrukken