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 PresentationTRANSCRIPT
Inleiding InformaticaInleiding Informatica Prof. Dr. O. De TroyerProf. Dr. O. De Troyer
Hoofdstuk 4: Klassen definiëren
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
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
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
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()
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
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
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
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() ;
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
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
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
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
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
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
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”
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”) ;
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
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”);
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”);
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();
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.
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
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)
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
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) ;}
}
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();
}
}
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)
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
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
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( )
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)
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( )
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();}
}
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}
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}
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}
}
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() {}
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 ;
}
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 ;}
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 ;}
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 );}
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
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 ;}
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
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”
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
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
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.
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
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; ...
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
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
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)
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);
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 “;
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());}
}
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}
}
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 = ” ” ;
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 ;
}
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)
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
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 () {
…}
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
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
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
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 ;
}
}
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
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
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
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
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, ...
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• …