Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen

Samankaltaiset esitykset


Esitys aiheesta: "Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen"— Esityksen transkriptio:

1 Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
© Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

2 © Jukka Harju, Jukka Juslin
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 -kirjaa. © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

3 © Jukka Harju, Jukka Juslin
Luokkien käyttäminen Tuloksellinen Java-ohjelmointi 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 Tuloksellinen Java-ohjelmointi

4 © Jukka Harju, Jukka Juslin
Missä ollaan? Tuloksellinen Java-ohjelmointi Luokka Attribuutit Metodit Konstruktorit UML-luokkakaavio © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

5 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

6 © Jukka Harju, Jukka Juslin
Missä ollaan? Tuloksellinen Java-ohjelmointi Luokka Attribuutit Metodit Konstruktorit UML-luokkakaavio © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

7 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

8 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

9 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

10 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 Tuloksellinen Java-ohjelmointi

11 © Jukka Harju, Jukka Juslin
Missä ollaan? Tuloksellinen Java-ohjelmointi Luokka Attribuutit Metodit Konstruktorit UML-luokkakaavio © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

12 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

13 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 Tuloksellinen Java-ohjelmointi

14 Metodin määrittäminen
Metodin toteuttava ohjelmakoodi alkaa aina metodin määrittelyllä. Esimerkki public int summaa(int luku1, int luku2) Määrittelyssä kerrotaan: Metodin näkyvyysalue, pääsääntöisesti public Metodin palauttaman tiedon tyyppi Metodin nimi Metodin parametrimuuttujien tietotyypit ja nimet (sulkeissa kukin muuttuja pilkulla eroteltuna) © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

15 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

16 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

17 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

18 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

19 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

20 © Jukka Harju, Jukka Juslin
Missä ollaan? Tuloksellinen Java-ohjelmointi Luokka Attribuutit Metodit Konstruktorit UML-luokkakaavio © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

21 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

22 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

23 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 Tuloksellinen Java-ohjelmointi

24 © Jukka Harju, Jukka Juslin
Missä ollaan? Tuloksellinen Java-ohjelmointi luokka attribuutit metodit konstruktorit UML-luokkakaavio © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

25 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

26 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

27 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

28 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

29 © Jukka Harju, Jukka Juslin
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 © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

30 © Jukka Harju, Jukka Juslin
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 Tuloksellinen Java-ohjelmointi

31 © Jukka Harju, Jukka Juslin
Kalvopohjan lähde Tuloksellinen Java-ohjelmointi © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi


Lataa ppt "Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen"

Samankaltaiset esitykset


Iklan oleh Google