© Jukka Harju, Jukka Juslin
1
Tuloksellinen Java-ohjelmointiLuku 3Luokkien käyttäminen
Tuloksellinen Java-ohjelmointi
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
2
 Nämä kalvot on lisensoitu Creative CommonsAttribution-ShareAlike 1.0 -lisenssillä.Lisäys edelliseen lisenssiin: Kalvojenmuokkaaminen on sallittu vain opettajille,joiden kursseilla käytetään kurssikirjanaTuloksellinen Java-ohjelmointi -kirjaa.
Creative Commons License
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
3
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
Tuloksellinen Java-ohjelmointi
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
4
Missä ollaan?
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
Tuloksellinen Java-ohjelmointi
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
5
Luokka
Luokka on piirustus, jonka mukaisesti luodaanoliota.
Javan valmiit luokat (luokkakirjasto) löytyy JavaAPI:sta.
Olemassa olevien luokkien kehittäminen jakäyttäminen on oleellinen osa olio-ohjelmointia.
Luokkia on sovellusluokkia ja kohdeluokkia.
Tuloksellinen Java-ohjelmointi
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
6
Missä ollaan?
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
Tuloksellinen Java-ohjelmointi
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
7
Attribuutit
Attribuutit kuvaavat luokan ominaisuuksia.
Attribuuteille määritetään näkyvyydeksipääsääntöisesti private, jolloin ne ovat suoraankäytettävissä vain kyseisen luokan sisältä.
Esimerkiksi:private double palkka;
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
8
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.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
9
Attribuutit
Luokasta voidaan luoda niin monta oliota kuintarvitaan.
Kunkin olion attribuuttien sisältö on oliokohtainen.
Attribuutti on olemassa niin kauan kuin oliokin jasäilyttää tietonsa kunnes sitä muutetaan sijoituksella.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
10
Olio ja viittausmuuttuja
Muuttuja sisältää joko primitiivityyppisen tiedon taiviittauksen olioon.
Luokan nimeä voidaan käyttää tietotyyppinä:String asiakas;
Edellinen lause ei luo oliota, vaan ainoastaanmäärittelee käytettävän viittausmuuttujan.
Viittausmuuttuja sisältää olion sijaintiosoitteen.
Itse olio on luotava erikseen.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
11
Missä ollaan?
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
Tuloksellinen Java-ohjelmointi
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
12
Metodit
Metodi on luokan olioille käytettävissä oleva toiminto.
Metodit ovat yleensä julkisia (public).
Metodien käyttö perustuu parametrien ja paluuarvonkäyttöön.
Metodin määrittely määrittää koodin, joka suoritetaankun metodia kutsutaan.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
13
Parametrit ja paluuarvo
Kun metodia kutsutaan, ohjelman eteneminen siirtyykyseiseen metodiin.
Kutsuttavalle metodille voidaan välittää tietojaparametreina.
Metodi voi palauttaa paluuarvon.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
14
Metodin määrittäminen
Metodin toteuttava ohjelmakoodi alkaa aina metodinmää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 (sulkeissakukin muuttuja pilkulla eroteltuna)
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
15
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 samakuin määrittelyrivillä määritelty.
Muuttujat luku1luku2 ja tulos ovat metodin paikallisiamuuttujia.
Paikalliset muuttujat luodaan aina kun metodia kutsutaan jatuhotaan kun metodin suoritus loppuu.
Parametrimuuttujat luku1 ja luku2 saavat alkuarvotkutsuvasta metodista.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
16
Metodin paluuarvo
Metodin palautusarvon tietotyyppi määrää takaisinkutsuneelle metodille lähetettävän tiedon tyypin.
Metodilla, joka ei palauta mitään on paluuarvontietotyyppinä void.
Metodi voi palauttaa vain yhden arvon, joka voi ollamyös viittaus olioon.
return-lause määrää mikä arvo metodistapalautetaan:return arvo;
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
17
Metodin parametrit
Metodin parametrimuuttujille sijoitetaanalkuarvot metodin kutsun yhteydessä:
public int summaa(int luku1, int luku2) { int tulos = luku1 + luku2; return tulos;
}
int summa = olio.laske(25, 5);
Paluuarvon sijoitus
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
18
Get- ja set-metodit
Koska oliokohtaiset attribuutit ovat yksityisiä(private), tarjoaa luokka yleensä metodejaattribuuttien arvojen lukemista ja päivittämistävarten.
Get-metodi palauttaa attribuutin arvon.
Set-metodi muuttaa attribuutin arvoa.
Nimet kyseisille metodeille ovat aina muotoa getX jasetX, jossa X on käsiteltävän attribuutin nimi.
Get- ja set-metodit on toteutettava oikein, jottaluokka toteuttaa standardin JavaBean-rajapinnan.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
19
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;
    }
}
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
20
Missä ollaan?
Tuloksellinen Java-ohjelmointi
Luokka
Attribuutit
Metodit
Konstruktorit
UML-luokkakaavio
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
21
Konstruktorit
Konstruktori on metodin erikoistapaus.
Konstruktoria kutsutaan olion luonninyhteydessä attribuuttien alustamiseksi.
Konstruktorilla on sama nimi kuin luokalla,eikä sille määritellä lainkaan paluuarvontietotyyppiä.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
22
Oletuskonstruktori
Oletuskonstruktori ei saa lainkaan parametreja.
Eksplisiittisesti (näkyvästi) määriteltyoletuskonstruktori korvaa Javan automaattisestimäärittämän oletuskonstruktorin.
Esimerkki:public class Noppa {private int silmaluku
 public Noppa() {
    silmaluku = 1;
}}
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
23
Parametrillinen konstruktori
Parametrillinen konstruktori saa yhden tai useampia parametreja.
Tyypillisin on parametrillinen konstruktori, joka saa parametreinaattribuuttien alkuarvot.
Alkuarvot tulee asettaa set-metodikutsuin, jotta set-metodienmahdolliset validiteettitarkistukset tulevat huomioiduiksi.
Esimerkki:public Noppa(int silmaluku) {
     setSilmaluku(silmaluku);
}
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
24
Missä ollaan?
Tuloksellinen Java-ohjelmointi
luokka
attribuutit
metodit
konstruktorit
UML-luokkakaavio
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
25
UML-luokkakaavio
Lyhenne UML tulee sanoista Unified ModelingLanguage.
UML-luokkakaavio kuvaa luokkien rakenteet jaluokkien väliset suhteet.
Luokat kuvataan laatikkoina, joissa on erotettu osiotluokan nimelle, attribuuteille ja metodeille.
Luokkia yhdistävät janat kuvaavat luokkien välisiäyhteyksiä.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
26
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
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
27
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ä kuvataankatkoviivaisella käyttöyhteys-nuolella.
Noppa-luokka sisältää yksityisen silmaluku-attribuutin jalisäksi julkiset metodit heitasetSilmalukugetSilmalukuja toString.
Myös metodien paluuarvojen tietotyypit ja parametrit nähdäänluokkakaaviosta.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
28
UML-luokkakaavio
Käyttöyhteyden lisäksi UML-luokkakaaviossa on mahdollistakuvata mm. yhteyssuhde ja koostumussuhde.
Molemmissa suhteissa jompikumpi suhteen osana oleva luokkaesiintyy toisen luokan jonkin attribuutin tietotyyppinä.
Koostumus ja yhteyssuhteen olennaisin ero on siinä, että olio voiolla koostumussuhteessa kerrallaan vain yhteen toiseen olioon(yhteinen elinikä). Yhteyssuhde oliosta taas voi olla kerrallauseaan olioon.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
29
UML-luokkakaavio
Esimerkki 2: UML-luokkakaavio Peli-ohjelmalle.
Peli
+ aja() : void
+ main (args : String[]) : void
Noppa
- silmaluku : int
+ heita() : int
+ setSilmaluku (arvo : int) : void
+ getSilmaluku() : int
+ toString() : String
Pelaaja
+ nimi : String
+ setNimi(nimi :String) : void
+ getNimi() : String
+ toString() : String
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
30
UML-luokkakaavio
Edellisellä esimerkissä on koostumussuhde luokkienPeli ja Noppa välillä. Tämä edustaa tilannetta, jossaesimerkiksi yhteen peliin kuuluu kaksi noppaa. Kyseisetnopat 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 voiosallistua useampaan kuin yhteen peliin kerralla.
Tuloksellinen Java-ohjelmointi
© Jukka Harju, Jukka Juslin
31
Kalvopohjan lähde
http://powerpersonalities.com/volumes/abstracts1.html
Tuloksellinen Java-ohjelmointi
Tuloksellinen Java-ohjelmointi