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

Slides:



Advertisements
Samankaltaiset esitykset
Koostumussuhde Jukka Juslin © Jukka Juslin.
Advertisements

© Jukka Juslin1 Ohjelmointitaito (ict1td002, 12 op) Opintojakson esittely Kevät 2008 Jukka Juslin, Raine Kauppinen Tuloksellinen Java-ohjelmointi.
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Lisäosa: GUI
Osion kaksi kertaus Jukka Juslin © Jukka Juslin.
6. Metodit.
@ Leena Lahtinen Helia TIETO JA TIETOKONEOHJELMA  TIETOKONEOHJELMA KÄSITTELEE TIETOJA  TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 13 Monimuotoisuus.
JavaScript (c) Irja & Reino Aarinen, 2007
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 12 Periytyminen.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 6 (osittain) Tiedostot.
© 2004 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice Java-perusteet Kari Kujansuu
Ict1td002: Ohjelmointitaito Kertaus Osio 2 - luokat - ilmentymät - viittaus- ja arvomuuttuja - ilmentymien taulukointi HAAGA-HELIA IltaTiko.
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Olio-ohjelmointi. Mitä olio-ohjelmointi on ?  Pyritään mallintamaan jotain reaalimaailman kohdetta tietokoneohjelman avulla  Olio on luokan ilmentymä.
Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
Taulukoiden määrittely, käsittely ja kopiointi Vaihtoehdot taulukoille
© Jukka Harju, Jukka Juslin
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Ehto- ja toistolauseet.
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
UML-luokkakaaviot.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
Olio-ohjelmointi: Luokkien kirjoittaminen
© Jukka Harju, Jukka Juslin1 Tuloksellinen Java-ohjelmointi Luku 4 Ehto- ja toistolauseet Tuloksellinen Java-ohjelmointi.
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
Virtuaaliset jäsenfunktiot tMyn1 Virtuaaliset jäsenfunktiot Virtuaalinen jäsenfunktio on esiteltävä monimuotoisessa kantaluokassa. Virtuaalisen jäsenfunktion.
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 2 Ensimmäiset ohjelmat © Jukka Harju, Jukka Juslin.
7. Oliot ja viitteet.
Luokan määrittely class-määreellä tMyn1 Luokan määrittely class-määreellä Luokan määrittely tarkoittaa luokan tietojäsenten esittelyä ja jäsenfunktioiden.
String-vertailusta ja Scannerin käytöstä (1/2)
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
© Jukka Harju, Jukka Juslin1 Tuloksellinen Java-ohjelmointi Lisäosa: GUI Tuloksellinen Java-ohjelmointi.
© Jukka Juslin1 Tiedostot Tuloksellinen Java-ohjelmointi.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
© Jukka Juslin1 Osio2 Olio-ohjelmointi: Merkkijonot eli Stringit Jukka Juslin.
2. Lisää Java-ohjelmoinnin alkeita
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
Vesa Ollikainen & Outi Grotenfelt
© Jukka Harju, Jukka Juslin1 Tuloksellinen Java-ohjelmointi HashMap, Properties, Logger, etc Tuloksellinen Java-ohjelmointi.
Tuloksellinen Java-ohjelmointi Luku 2 Ensimmäiset ohjelmat
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
15. Ohjelmoinnin tekniikkaa
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
String-vertailusta ja Scannerin käytöstä (1/2)
5. Kapselointi.
1. Omat operaatiot.
Tuloksellinen Java-ohjelmointi
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
Aakkosnumeerinen tieto
6. Metodit.
4. Attribuutit.
7. Näytölle tulostaminen
3. Attribuutit.
4. Luokan testaus ja käyttö olion kautta
Esityksen transkriptio:

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

© 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

© 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

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

© 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

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

© 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

© 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

© 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

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

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

© 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

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

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

© 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

© 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

© 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

© 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

© 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

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

© 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

© 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

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

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

© 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

© 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

© 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

© 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

© 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

© 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

© Jukka Harju, Jukka Juslin Kalvopohjan lähde Tuloksellinen Java-ohjelmointi http://powerpersonalities.com/volumes/abstracts1.html © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi