Tuloksellinen Java

Download Report

Transcript Tuloksellinen Java

Java-ohjelmointi
Opas ammattimaiseen osaamiseen
Luku 3
Luokkien käyttäminen
© Jukka Harju, Jukka Juslin
1
Nämä kalvot on lisensoitu Creative Commons
Attribution-ShareAlike 1.0 -lisenssillä.
Lisäys edelliseen lisenssiin: Kalvojen
muokkaaminen on sallittu vain opettajille,
joiden kursseilla käytetään kurssikirjana
Tuloksellinen Java-ohjelmointi - tai Java
ohjelmointi opas ammattimaiseen
osaamiseen -kirjaa.
© Jukka Harju, Jukka Juslin
2
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
3
Missä ollaan?
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
© Jukka Harju, Jukka Juslin
4
Luokka
• 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
5
Missä ollaan?
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
© Jukka Harju, Jukka Juslin
6
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
7
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
8
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
9
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
10
Missä ollaan?
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
© Jukka Harju, Jukka Juslin
11
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
12
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
13
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
14
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
15
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
16
Metodin parametrit
• Metodin parametrimuuttujille sijoitetaan
alkuarvot metodin kutsun yhteydessä:
int summa = olio.summaa(25, 5);
public int summaa(int luku1, int luku2) {
int tulos = luku1 + luku2;
return tulos;
}
Paluuarvon sijoitus
© Jukka Harju, Jukka Juslin
17
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
18
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
19
Missä ollaan?
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
© Jukka Harju, Jukka Juslin
20
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
21
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
22
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
23
Missä ollaan?
luokka
attribuutit
metodit
konstruktorit
UML-luokkakaavio
© Jukka Harju, Jukka Juslin
24
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
25
UML-luokkakaavio
• Esimerkki 1: UML-luokkakaavio Noppapeli-ohjelmalle.
Noppapeli
Noppa
+ aja() : void
+ main (args : String[]) : void
- silmaluku : int
+ heita() : int
+ setSilmaluku (arvo : int) : void
+ getSilmaluku() : int
+ toString() : String
© Jukka Harju, Jukka Juslin
26
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
27
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
28
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
© Jukka Harju, Jukka Juslin
+ nimi : String
+ setNimi(nimi :String) : void
+ getNimi() : String
+ toString() : String
29
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
30