Tuloksellinen Java

Download Report

Transcript Tuloksellinen Java

Tuloksellinen Java-ohjelmointi
Luku 3
Luokkien käyttäminen
© Jukka Harju, Jukka Juslin 2007
1
Luokkien käyttäminen
• Luokka ja oliot käsitteenä olio-ohjelmoinnissa:
– Luokka mallina
– Olio ilmentymänä
• Kirjassa nämä sijaitsevat luvussa 3:
–
3.1 Luokka
–
3.2 Attribuutit
–
3.3 Metodit
–
3.4. Konstruktorit
–
3.5 UML-luokkakaavio
–
3.6 Koostumussuhteen toteuttaminen
–
3.7 Yhteyssuhteen toteuttaminen
–
3.8 Virheiden etsintä Eclipsen debuggerilla
© Jukka Harju, Jukka Juslin 2007
2
Missä ollaan?
Tuloksellinen Java-ohjelmointi
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
3
Luokka
Tuloksellinen Java-ohjelmointi
• Luokka on piirustus, jonka mukaisesti luodaan
oliota.
• Javan valmiit luokat (luokkakirjasto) löytyy Java
API:sta.
• Olemassa olevien luokkien kehittäminen ja
käyttäminen on oleellinen osa olio-ohjelmointia.
• Luokkia on sovellusluokkia ja kohdeluokkia.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
4
Missä ollaan?
Tuloksellinen Java-ohjelmointi
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
5
Attribuutit
• Attribuutit kuvaavat luokan ominaisuuksia.
• Attribuuteille määritetään näkyvyydeksi
pääsääntöisesti private, jolloin ne ovat suoraan
käytettävissä vain kyseisen luokan sisältä.
• Esimerkiksi:
private double palkka;
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
6
Attribuutit
• Oliolla on aina tila ja käyttäytyminen.
• Tarkastellaan kuusisivuista noppaa.
– Nopan tilana voidaan käyttää ylöspäin jäänyttä
sivua.
– Nopan käyttäytyminen: noppaa voidaan heittää.
• Attribuutti esittää aina olion tilaa.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
7
Attribuutit
• Luokasta voidaan luoda niin monta oliota kuin
tarvitaan.
• Kunkin olion attribuuttien sisältö on oliokohtainen.
• Attribuutti on olemassa niin kauan kuin oliokin ja
säilyttää tietonsa kunnes sitä muutetaan sijoituksella.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
8
Olio ja viittausmuuttuja
• Muuttuja sisältää joko primitiivityyppisen tiedon tai
viittauksen olioon.
• Luokan nimeä voidaan käyttää tietotyyppinä:
String asiakas;
• Edellinen lause ei luo oliota, vaan ainoastaan
määrittelee käytettävän viittausmuuttujan.
• Viittausmuuttuja sisältää olion sijaintiosoitteen.
• Itse olio on luotava erikseen.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
9
Missä ollaan?
Tuloksellinen Java-ohjelmointi
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
10
Metodit
• Metodi on luokan olioille käytettävissä oleva toiminto.
• Metodit ovat yleensä julkisia (public).
• Metodien käyttö perustuu parametrien ja paluuarvon
käyttöön.
• Metodin määrittely määrittää koodin, joka suoritetaan
kun metodia kutsutaan.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
11
Parametrit ja paluuarvo
• Kun metodia kutsutaan, ohjelman eteneminen siirtyy
kyseiseen metodiin.
• Kutsuttavalle metodille voidaan välittää tietoja
parametreina.
• Metodi voi palauttaa paluuarvon.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
12
Metodin määrittäminen
•
Metodin toteuttava ohjelmakoodi alkaa aina metodin
määrittelyllä.
•
Esimerkki
public int summaa(int luku1, int luku2)
•
Määrittelyssä kerrotaan:
1. Metodin näkyvyysalue, pääsääntöisesti public
2. Metodin palauttaman tiedon tyyppi
3. Metodin nimi
4. Metodin parametrimuuttujien tietotyypit ja nimet (sulkeissa
kukin muuttuja pilkulla eroteltuna)
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
13
Metodin runko
• Metodin määrittelyä seuraa metodin runko (method body).
• Esimerkki:
public int summaa(int luku1, int luku2) {
int tulos = luku1 + luku2;
return tulos;
}
• return-lauseella palautettavan tiedon tyypin tulee olla sama
kuin määrittelyrivillä määritelty.
• Muuttujat luku1, luku2 ja tulos ovat metodin paikallisia
muuttujia.
• Paikalliset muuttujat luodaan aina kun metodia kutsutaan ja
tuhotaan kun metodin suoritus loppuu.
• Parametrimuuttujat luku1 ja luku2 saavat alkuarvot
kutsuvasta metodista.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
14
Metodin paluuarvo
• Metodin palautusarvon tietotyyppi määrää takaisin
kutsuneelle metodille lähetettävän tiedon tyypin.
• Metodilla, joka ei palauta mitään on paluuarvon
tietotyyppinä void.
• Metodi voi palauttaa vain yhden arvon, joka voi olla
myös viittaus olioon.
• return-lause määrää mikä arvo metodista
palautetaan:
return arvo;
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
15
Metodin parametrit
• Metodin parametrimuuttujille sijoitetaan
alkuarvot metodin kutsun yhteydessä:
int summa = olio.laske(25, 5);
public int summaa(int luku1, int luku2) {
int tulos = luku1 + luku2;
return tulos;
}
Paluuarvon sijoitus
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
16
Get- ja set-metodit
• Koska oliokohtaiset attribuutit ovat yksityisiä
(private), tarjoaa luokka yleensä metodeja
attribuuttien arvojen lukemista ja päivittämistä
varten.
• Get-metodi palauttaa attribuutin arvon.
• Set-metodi muuttaa attribuutin arvoa.
• Nimet kyseisille metodeille ovat aina muotoa getX ja
setX, jossa X on käsiteltävän attribuutin nimi.
• Get- ja set-metodit on toteutettava oikein, jotta
luokka toteuttaa standardin JavaBean-rajapinnan.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
17
Get- ja set-metodit
• Esimerkki:
public class Noppa {
private int silmaluku;
public void setSilmaluku(int silmaluku) {
if(silmaluku >= 1 && silmaluku <= 6) {
this.silmaluku = silmaluku;
} else {
System.out.println("Virheellinen silmäluku!");
}
}
public int getSilmaluku() {
return silmaluku;
}
}
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
18
Missä ollaan?
Tuloksellinen Java-ohjelmointi
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
19
Konstruktorit
• Konstruktori on metodin erikoistapaus.
• Konstruktoria kutsutaan olion luonnin
yhteydessä attribuuttien alustamiseksi.
• Konstruktorilla on sama nimi kuin luokalla,
eikä sille määritellä lainkaan paluuarvon
tietotyyppiä.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
20
Oletuskonstruktori
• Oletuskonstruktori ei saa lainkaan parametreja.
• Eksplisiittisesti (näkyvästi) määritelty
oletuskonstruktori korvaa Javan automaattisesti
määrittämän oletuskonstruktorin.
• Esimerkki:
public class Noppa {
private int silmaluku
public Noppa() {
silmaluku = 1;
}
}
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
21
Parametrillinen konstruktori
• Parametrillinen konstruktori saa yhden tai useampia parametreja.
• Tyypillisin on parametrillinen konstruktori, joka saa parametreina
attribuuttien alkuarvot.
• Alkuarvot tulee asettaa set-metodikutsuin, jotta set-metodien
mahdolliset validiteettitarkistukset tulevat huomioiduiksi.
• Esimerkki:
public Noppa(int silmaluku) {
setSilmaluku(silmaluku);
}
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
22
Missä ollaan?
Tuloksellinen Java-ohjelmointi
luokka
attribuutit
metodit
konstruktorit
UML-luokkakaavio
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
23
UML-luokkakaavio
• Lyhenne UML tulee sanoista Unified Modeling
Language.
• UML-luokkakaavio kuvaa luokkien rakenteet ja
luokkien väliset suhteet.
• Luokat kuvataan laatikkoina, joissa on erotettu osiot
luokan nimelle, attribuuteille ja metodeille.
• Luokkia yhdistävät janat kuvaavat luokkien välisiä
yhteyksiä.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
24
UML-luokkakaavio
• Esimerkki 1: UML-luokkakaavio Noppapeli-ohjelmalle.
Noppapeli
+ aja() : void
+ main (args : String[]) : void
Noppa
- silmaluku : int
+ heita() : int
+ setSilmaluku (arvo : int) : void
+ getSilmaluku() : int
+ toString() : String
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
25
UML-luokkakaavio
• Edellisen esimerkin luokkakaavio kertoo seuraavaa.
– Ohjelma sisältää kaksi luokkaa:
• Noppapeli-sovellusluokan
• Noppa-kohdeluokan
– Noppapeli-luokka sisältää julkiset metodit main ja aja.
– Noppapeli-luokka käyttää noppaluokkaa; tämä kuvataan
katkoviivaisella käyttöyhteys-nuolella.
– Noppa-luokka sisältää yksityisen silmaluku-attribuutin ja
lisäksi julkiset metodit heita, setSilmaluku, getSilmaluku
ja toString.
– Myös metodien paluuarvojen tietotyypit ja parametrit nähdään
luokkakaaviosta.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
26
UML-luokkakaavio
• Käyttöyhteyden lisäksi UML-luokkakaaviossa on mahdollista
kuvata mm. yhteyssuhde ja koostumussuhde.
• Molemmissa suhteissa jompikumpi suhteen osana oleva luokka
esiintyy toisen luokan jonkin attribuutin tietotyyppinä.
• Koostumus ja yhteyssuhteen olennaisin ero on siinä, että olio voi
olla koostumussuhteessa kerrallaan vain yhteen toiseen olioon
(yhteinen elinikä). Yhteyssuhde oliosta taas voi olla kerralla
useaan olioon.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
27
UML-luokkakaavio
• Esimerkki 2: UML-luokkakaavio Peli-ohjelmalle.
Peli
+ aja() : void
+ main (args : String[]) : void
Pelaaja
Noppa
- silmaluku : int
+ heita() : int
+ setSilmaluku (arvo : int) : void
+ getSilmaluku() : int
+ toString() : String
+ nimi : String
+ setNimi(nimi :String) : void
+ getNimi() : String
+ toString() : String
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
28
UML-luokkakaavio
• Edellisellä esimerkissä on koostumussuhde luokkien
Peli ja Noppa välillä. Tämä edustaa tilannetta, jossa
esimerkiksi yhteen peliin kuuluu kaksi noppaa. Kyseiset
nopat eivät voi olla samaan aikaan käytössä kuin siinä
pelissä joka koostuu niistä.
• Luokkien Peli ja Pelaaja välillä on yhteyssuhde.
Tämä voisi edustaa tilannetta, jossa sama pelaaja voi
osallistua useampaan kuin yhteen peliin kerralla.
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
29
Kalvopohjan lähde
Tuloksellinen Java-ohjelmointi
http://powerpersonalities.com/volumes/abstracts1.html
© Jukka Harju, Jukka Juslin 2007
Tuloksellinen Java-ohjelmointi
30