Olio-ohjelmointi: Luokkien kirjoittaminen

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
Koostumussuhde Jukka Juslin © Jukka Juslin.
Ohjelmiston tekninen suunnittelu
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
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.
JavaScript (c) Irja & Reino Aarinen, 2007
Luokkakaaviot Luokkakaaviot Tekninen suunnittelu.
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
Taulukot Jukka Juslin © Jukka Juslin 2006.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
Taulukoiden määrittely, käsittely ja kopiointi Vaihtoehdot taulukoille
22. Taulukot.
Rakenteinen ohjelmointi
Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely •Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän.
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Perintä. Yleistä Olio-ohjelmoinnin menetelmä muodostaa uusia luokkia aiemmin määriteltyjen luokkien avulla Luokka saa automaattisesti käyttöönsä kaikki.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 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.
Olio-ohjelmoinnin perusteet luento 3
1 Senioreiden säästäminen ja maksutavat 2014 SENIOREIDEN SÄÄSTÄMINEN JA MAKSUTAVAT
16. Lohkot Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat.
© 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.
9. Periytyminen Javassa.
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
13. Hyvä ohjelmointitapa (osa 1)
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
1 Raha-asioiden suunnitteleminen ja nykyinen rahatilanne Senioritutkimus 2011.
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.
19. Olio-ohjelmointia Javalla
20. Javan omat luokat.
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.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
22. Taulukot.
Poikkeukset Yleistä Virheeseen varautuminen tarkoittaa sitä, että ohjelmoija huomioi koodia kirjoittaessaan ajonaikaisen virheen mahdollisuuden.
© Jukka Juslin1 Osio2 Olio-ohjelmointi: Merkkijonot eli Stringit Jukka Juslin.
Vesa Ollikainen & Outi Grotenfelt
11. Rajapinnat Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
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.
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
Luokan määrittely class-määreellä
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
14. Hyvä ohjelmointitapa.
6. Metodit.
13. Pakkaukset.
4. Attribuutit.
7. Näytölle tulostaminen
3. Attribuutit.
13. Pakkaukset.
4. Luokan testaus ja käyttö olion kautta
Esityksen transkriptio:

Olio-ohjelmointi: Luokkien kirjoittaminen

Luokkien kirjoittaminen Tähänmennessä on käytetty valmiiksi määritettyjä luokkia. Nyt opimme kirjoittamaan omia luokkia olioiden määrittämiseksi Seuraavaksi keskitymme näihin: Luokan määritykset Instanssin tieto (olion tieto) kapselointi ja tiedon muuttajat (setterit ja getterit) Metodin määrittäminen ja parametrien välitys Konstruktorit eli oletusmuodostimet (niiden korvaajat)

Missä ollaan? Luokan anatomia Kapselointi Metodin anatomia

Luokkien kirjoittaminen Luokat, joita olemme aikaisemmin käyttäneet ovat Javan standardi luokkakirjastosta (API) Nyt alamme suunnitella ohjelmia, jotka perustuvat luokkiin joita itse kirjoitamme (kohdeluokat yms.) Luokka joka sisältää main metodin on vain ajettavan ohjelman käynnistyspiste Todellinen olio-ohjelmointi perustuu luokkien määrittämiseen (ei laiteta kaikkea mainin sisään, vain käynnistys!!!). Luokat esittävät olioita hyvin suunnitellun toiminnallisuuden ja attribuuttien kanssa

Luokat ja oliot Muista että oliolla on aina tila ja käyttäytyminen Tarkastellaan kuusisivuista noppaa (yhtä noppaa) Sen tila voidaan määrittää siitä mitä sivua se näyttää ylöspäin Sen pääasiallinen käyttäytyminen on, että sitä voidaan heittää Voit ajatella samaa “realimaailmassa” esimerkiksi koskien coca-cola automaattia. Mikä on automaatin tila esim. Ja mikä on automaatin käyttäytyminen? Voimme esittää noppaa ohjelmistossa suunnittelemalla luokan Noppa tjoka mallintaa nopan tilan ja käyttäytymisen. Tuloksena saadaan noppa, joka on itseasiassa parempi kuin perinteinen noppa. Luokka toimii noppa olion piirustuksena Me voimme instantioida niin monta noppa-objektia kuin tarvitsemme missä tahansa ohjelmassa

Luokat Luokka voi sisältää tiedon määrityksiä ja metodimäärityksiä int koko, paino; char kategoria; Tiedon määritykset Metodi määritykset

Luokat Tiedon arvot määräävät olion tilan, joka on luokasta luotu Metodien toiminnallisuus määrittää olion käyttäytymisen Noppa luokkaamme voisimme määrittää int- tyyppisen muutujan, joka näyttää tällähetkellä ylöspäin osoittavan nopan sivun arvon Yksi metodeista “heittää” noppaa asettamalla tämän arvon satunnaislukuun, joka on ykkösen ja kuutosen välillä

Luokat Haluamme suunnitella Noppa luokkaan kaikki tarvittavat tiedot ja metodit, jotta se olisi monikäyttöinen ja uudelleenkäytettävä resurssi – Noppa.java, public class Noppa Mikä tahansa käyttävä ohjelma (Testeri) ei välttämättä käytä kaikkia ko. Luokan ominaisuuksia

Noppa luokka Noppa luokka sisältää kaksi arvoa vakio MAX , joka esittää maksimaalista nopan arvoa muuttujan nopanArvo joka esittää nopan arvoa tällä hetkellä (ylöspäin oleva sivu heiton jälkeen) heitä metodi käyttää random metodia Math luokasta määrätäkseen nopan saaman arvon On myös olemassa metodeita, joilla eksplisiittisesti asetetaan ja noudetaan nopan arvo milloin tahansa

toString metodi Kaikkien luokkien, jotka esittävät olioita, pitäisi määrittää toString metodi toString metodi palauttaa merkkijono Stringin, joka esittää olion (tekstimuodossa, oliota ei luonnollisesti voi tulostaa suoraan) Sitä kutsutaan automaattisesti kun olio konkatenoidaan Stringiin (+ operaatio) tai kun olio välitetään println metodille

Konstruktorit eli oletusmuodostimet Kuten aikaisemmin mainittu, konstruktori on erityinen metodi, jota käytetään olion alustamiseen, kun se alunperin luodaan Konstruktorilla on sama nimi kuin luokalla, ei palautusarvoa Noppa konstruktoria käytetään asettamaan jokaisen uuden noppa olion antamaksi lähtötulokseksi yksi Myöhemmin tutustutaan konstruktoreihin lisää

Tiedon näkyvyys (skooppi) Tiedon näkyvyys on alue ohjelmasta, josta tiettyyn tietoon päästään viittaamaan (käyttämään sitä) Tietoon, joka määritetään luokkatasolla voidaan viitata luokan kaikista metodeista käsin Tietoon, joka määritellään metodin sisällä, päästään käsiksi vain ko. metodin sisällä Tietoa, joka määritellään metodin sisällä kutsutaan paikalliseksi tiedoksi / paikalliseksi muuttujaksi Noppa luokassa muuttuja tulos määritetään toString metodin sisällä – se on pakallinen ko. Metodille ja tulkseen ei voida viitata muualta. Vertaa esimerkiksi taulu-olioiden length attribuuttia, joka on public-tyyppinen ja luokkatasolla

Instanssin tieto eli olion tieto nopanArvo muuttuja Noppa luokassa kutsutaan instanssin tiedoksi sillä jokainen instanssi (olio) joka luodaan omistaa oman version siitä Luokka määrittää tiedon tyypin, mutta ei varaa tiedolle mitään muistitilaa Jokainen kerta kun Noppa olio luodaan, uusi nopanArvo muuttuja luodaan myös Luokan oliot jakavat metodin määritykset, mutta jokaisella oliolla on oma muistiavaruus Tämä on ainoa tapa miten kahdella oliolla voi olla erilaiset tilat

Instanssitieto Voimme kuvata kaksi Noppa oliota NopanHeitto ohjelmasta kuten seuraavassa: noppa1 5 nopanArvo noppa2 2 Jokaisella oliolla pitää omaa nopanArvo muuttujaa ja tätä kautta oliolla on oma tila

UML kaaviot eli diagrammit Kuten aikaisemmasta on tuttua, UML tarkoittaa Unified Modeling Languagea UML diagrammit näyttävät luokkien ja olioiden väliset suhteet UML luokkadiagrammi koostuu yhdestä tai useammasta luokasta, joissa jokaisessa on erotetut osiot luokan nimelle, attribuuteille (tiedolle) ja operaatioille (metodeille) Viivat luokkien välillä (luokkakaaviossa) esittävät yhteyssuhteita eli assosiaatioita. Näistä tutustumme seuraaviin (kahteen) tyyppiin: Katkoviivalla varustettu nuoli kertoo, että toinen luokka (siis luokasta tehty olio) käyttää toista (eli kutsuu sen metodeja) – kontrolli siirtyy. Näitä katkoviivanuolia käytämme etupäässä, tosin tutustumme myös koostumus-suhteisiin eli aggregaatioihin (joita ilmaistaan ns. Timanttimerkillä)

UML luokkakaaviot UML luokka class diagram HeitäNoppaa ohjelmalle: +main (args : String[]) : void Noppa -nopanArvo : int +heitä() : int +setNopanArvo (int arvo) : void +getNopanArvo() : int +toString() : String

Missä ollaan? Luokan anatomia Kapselointi Metodin anatomia

Kapselointi Voimme ottaa yhden kahdesta näkökulmasta tarkastella oliota: sisäinen - luokan muuttujien ja metodien yksityiskohdat, eli luokan määrittäminen ulkoinen - palvelut, jotka olio tarjoaa ja kuinka olio vuorovaikuttaa muiden järjestelmän olioiden kanssa Ulkoisestä näkökulmasta, olio on enkapsuloitu entiteetti (eli kokonaisuus), se tarjoaa joukon määritettyjä palveluita Nämä palvelut määrittävät olion rajapinnan (eli interface), joka näkyy ulospäin

Kapselointi Yksi olio (kutsutaan asiakkaksi (client)) voi käyttää toista oliota, jotta voisi tarjota palvelut jotka sen pitää tarjota Olion asiakas voi pyytää ko. olion palveluita (eli kutsua olion metodeja), mutta sen ei pitäisi tietää kuinka ko. palvelut suoritetaan. Vrt. Esim. Coca-Cola automaatin toiminta. Jos käyttäjää ajatellaan oliona, hän haluaa vain Coca-Colaa eikä välittää automaatin sisäisestä toiminnasta. Mikä tahansaa muutos olion tilassa (sen muuttujissa) pitää tehdä olion metodien kautta (eli tavallisesti set ja get metodit) Huomaa myös poikkeukset tästä esim. Taulukko-luokkien length- attribuutti (public) Meidän pitää tehdä vaikeaksi, ellei jopa mahdottomaksi, asiakaan päästä käsiksi olion muuttujiin suoraan (kuten taulukko-olion length) Eli, olioiden pitäisi olla itsehallintoon perustuvia (self-governance)

Kapselointi Enkapsuloitua oliota voidaan ajatella mustana laatikkona – sen sisäinen toiminta peitetään asiakkailta Asiakas kutsuu rajapintametodeja (tavalliset public-tyyppiset metodit) – nämä hallitsevat instanssin tietoa Metodit Tieto Asiakas

Näkyvyyden muuntelu Javassa, me saavutamme kapselointin käyttämällä sopivia näkyvyysmääritteitä (visibility modifiers) näkyvyysmäärite on Javan varattu sana, joka määrittää tietyn metodin tai muuttujan luonteen final määritettä käytetään vakioiden määrittämiseen (esim. private final EUROTOMARK = 5.94) Javassa on kolme näkyvyyden muuntelumäärettä: public, protected ja private protected määre liittyy periytymiseen, jota käsittelemme opintojaksomme osiossa kolme. Tehtävissä, emme käytä ko. määrettä tässä osiossa.

Näkyvyyden määritteet Luokan osiin (attribuutit tai metodit), jotka määritetään julkisiksi (public visibility) voidaan viitata mistä tahansa käsin Luokan osiin (attribuutit ja metodit), jotka määritetään yksityisiksi (private visibility) voidaan viitata ainoastaan ko. luokan sisältä Luokan osiin (attribuutit ja metodit), joille ei anneta näkyvyyttä (visibility) ollenkaan, annetaan oletusarvoinen näkyvyys (default visibility) ja näihin voidaan viitata mistä tahansa luokasta samassa paketissa

Näkyvyyden määrittäminen Julkiset muuttujat rikkovat kapselointiperiaatetta vastaan, sillä ne mahdollistava sen että asiakas pääse käsiin ja voi voi muutella luokan attribuuttien arvoja Siksi luokan muuttujia ei saisi määrittää julkisen näkyvyyden kanssa (eli siis pitää aina käyttää private sanaa ennen muuttujan nimeä) On hyväksyttävää antaa vakiolle (public final MAX) julkinen näkyvyys, jolloin sitä voidaan käyttää (mutta ei muuttaa) luokan ulkopuolelta Julkiset vakiot eivät riko kapselointiperiaatetta vastaan, sillä vaikka asiakkaalla on pääsy näihin vakioihin, asiakas ei voi muuttaa niiden arvoa (kun final määre käytössä!)

Näkyvyyden määrittäminen Metodit, jotka tarjoavat olion palvelut määritetään julkisen näkyvyyden (public visibility) kanssa, jotta niitä voidaan kutsua asiakkaista käsin Esim. annaCocaCola(1) // määräys Julkisia metodeja kutsutaan myös palvelumetodeiksi (service methods) Metodia, joka luodaan pelkästään auttamaan palvelumetodia kutsutaan tukimetodiksi (esimerkiksi pudotaPullo()) Koska tukimetodia ei kutsuta asiakkaasta käsin, se pitää määrittää tyypillisesti private näkyvyyden kanssa

Tukevat luokan muita metodeja palveluja asiakkaille Näkyvyysmääritteet public private Muuttujat, attribuutit Metodit Rikkovat enkapsulointia Tukevat enkapsulointia Tukevat luokan muita metodeja Tarjoavat palveluja asiakkaille

Aksessorit ja mutaattorit – eli getterit ja setterit Koska instanssitieto on yksityistä (private), luokka yleensä tarjoaa palveluita muuttujien arvojen lukemista ja päivittämistä varten Aksessorimetodi (accessor method) palauttaa muuttujan nykyisen arvon (lukee muuttujan arvon) - kutsutaan myös gettereiksi Mutaattori metodi (mutator method) muuttaa muuttujan arvoa (päivittää muuttujan arvoa) – kutsutaan myös settereiksi Nimet aksessori ja mutaattorimetodeille ovat muotoa getX ja setX, jossa X on arvon nimi (esim. setOppilasNumero(numero) Näitä kutsutaan aksessorin ja mutaattorin sijasta monasti “gettereiksi” ja “settereiksi”

Mutaattorin rajoitukset Mutaattorien käyttö antaa luokan suunnittelijalle mahdollisuuden rajoittaa asiakkaan mahdollisuuksia muutella olion tilaa (muuttujien arvoja suoraan, setteriin voi laittaa esim. tarkistuksen minkälainen luku on kyseessä) Mutaattori suunnitellaan usein niin, että muuttujien arvot voidaan asettaa vain tietyissä rajoissa. Esimerkiksi tilin omistajan nimi voidaan rajata max 50 merkkiin – sillä tietokannassa jossa tietoja lopulta säilytetään on todennäköisesti kokorajoitus Esimerkiksi setNopanArvo mutaattori Noppa luokassa pitäisi rajoittaa niin, että arvo voidaan asettaa ainostaan johonkin tasalukuun sallitulla arvoaluella (tässä 1:stä MAX vakion arvoon asti) Myöhemmin tutustumme tarkemmin siihen miten tällaisia rajoituksia toteutetaan

Luokkien kirjoittaminen - this Muista this-avainsanan käyttö This-sanalla viitataan olion attribuuttiin Ilman this sanaa metodille tulevat parametrit on nimettävä erinimisiksi kuin luokan attribuutit

Lisää this-sanasta This-viittaa aina kyseisellä hetkellä käytössä olevaan olioon Koko nykyinen olio voidaan palauttaa kirjoittamalla return(this);

toString metodi Pääsääntöisesti kaikille luokille pitää kirjoittaa toString metodi toString konkatenoi Stringiksi olion attribuuttien arvon tällähetkellä Eli kyseessä on ns. olion tilan tulostaminen Ilman toString metodia saadaan oliosta tulostumaan ns. OID numero, joka on muistiosoite viitaten missä itse olio sijaitsee

Missä ollaan? Luokan anatomia kapselointi Metodin anatomia

Metodin määrittämiset Katsomme seuraavassa metodin määrittämistä hiukan tarkemmin Metodin määrittely määrää koodin, joka tullaan suorittamaan kun metodia kutsutaan Kun metodia kutsutaan, kontrolli (ns. etenemisrivi) ohjelmassa hyppää ko. Metodiin ja suorittaa ko. metodin koodin. Tämän suorittaminen loppuu kun tullaan return- lauseeseen. Kun tämä valmistuu, kontrolli palaa takaisin sinne mistä metodia kutsuttiin (voi tehdä esim. sijoituksen) ja jatkaa seuraavalta riviltä Metodi voi palauttaa tai olla palauttamatta arvon, riippuen kuinka metodi on määritetty

Metodin kontrollivirta Jos kutsuttu metodi on samassa luokassa tarvitaan vain metodin nimi kutsumiseen munMetodi(); munMetodi laske

Metodin kontrollivirta Kutsuttu metodi on usein osa toista luokkaa tai oliota (siis nimenomaan oliota yleensä, ellei static) olio.teeSe(); main teeSe autaMua autaMua();

Metodin headeri Metodin määritys alkaa metodin headerilla char laske(int num1, int num2, String viesti) metodin nimi parametrilista Parametrilista määrittää jokaisen parametrin tyypin ja nimen Parametrin nimeä metodin määrittelyssä kutsutaan formaaliksi parametriksi. Ko. muuttujat luodaan aivan kuten metodin sisällä luodaan muuttujia. palautus tyyppi

Metodin runko Metodin headeria eli otsikkoa seuraa metodin runko (method body). Muista: Headerissa on määritetty myös formaalit parametrit. char laske(int num1, int num2, String viesti) { int sum = num1 + num2; char tulos = viesti.charAt (sum); return(tulos); } sum ja tulos ovat paikallista tietoa tähän metodiin Nämä muuttujat luodaan aina kun tätä metodia kutsutaan, ja ne tuhotaan kun metodin suoritus loppuu Returnissa palautettavan Olion tulee olla palautus- tyyppiä eli samaa kuin metodin headerissa

return lause Metodin palautustyyppi määrää minkätyyppisen arvon metodi lähettää takaisin sinne, mistä metodia on kutsuttu Metodilla, joka ei palauta arvoa on void palautustyyppi (metodin formaalissa esittelyssä) return lause määrää mikä arvo metodista palautetaan return(olio); Olion on tässä oltava samaa tyyppiä kuin formaalissa esittelyssä määritetty tyyppi ja kutsumispaikassa olio tulee sijoittaa esim. samantyyppiseen muuttujaan

Parametrit Kun metodia kutsutaan, varsinaisten parametrien arvot kutsun yhteydestä kopioidaan formaaleiden parametrien arvoiksi ch = olio.laske (25, count, “Moro"); char laske (int num1, int num2, String viesti) { int sum = num1 + num2; char tulos = viesti.charAt (sum); return tulos; }

Paikallinen data eli paikallinen tieto Kuten olemme huomanneet, paikalliset muuttujat voidaan määrittää metodin sisällä Metodin formaalit parametrit luovat automaattisia paikallisia muuttujia kun metodia kutsutaan Kun metodi lopettaa toimintansa, kaikki paikalliset muuttujat tuhotaan (mukaanlukien formaaleista parametreistä tehdyt muuttujat) Pidä mielessä, että instanssimuuttujat, luokan tasolla määritetyt, ovat olemassa niinkauan kuin olio on olemassa

Pankkitiliesimerkki Katsotaan toista esimerkkiä, joka demonstroi toteutusyksityiskohdat luokista ja metodeista Esitämme pankkitilä luokalla, jonka nimi on Tili Pankkitilin tila voi sisältää pankkitilin numeron, saldon tällähetkellä ja tilin omistajan nimen Tilin käyttäytyminen (tai sen palvelut) sisältävät otot ja talletukset sekä koron lisäämisen tilille

Testeriohjelmat Testeriohjelma eli ajuriohjelma ajaa toisia, kiinnostavampia osia ohjelmasta Testeriohjelmia käytetään usein testaamaan muista osia ohjelmasta Testeriohjelma sisältää luonnollisesti main- metodin, aloittaa siis ajettavan Transaktion luokka sisältää main metodin, joka ajaa Tili luokan, kokeillen sen palveluita

Pankkitili esimerkki tili1 tilNumero 72354 saldo 102.56 nimi tili2 “Matti Nykänen” tili2 69713 tiliNumero 140.00 saldo nimi “Pekka Pere”

Pankkitili esimerkki On olemassa joitain parannuksia, joita voidaan tehdä Tili luokkaan Muodolliset getterit ja setterit pitäisi määrittää kaikille muuttujille Joidenkin metodien design voisi olla robustimpi (vankempi), kuten todentaa että määrä parametri nosto metodille on positiivinen saldo - nosto

Konstruktorit - lisää Huomaa, että konstruktorilla ei ole palautustyyppiä määritetty metodin headeriin (formaaliin määritykseen) – ei edes void tyyppiä! Yleinen virhe on laittaa konstruktorille palautustyyppi, mikä tekee siitä “tavallisen” metodin, jolla sattuu olemaan sama nimi kuin ko. luokalla Ohjelmoijan ei tarvitse määrittää konstruktoria luokalla (eli oletuskonstruktori on jo olemassa, kyse on sen korvaamisesta) Jokaisella luokalla on valmiiksi Javan tekemä oletuskonstruktori eli oletusmuodostin (default constructor) joka ei ota parametrejä (muista kuitenkin myös konstruktorin ylikuormittaminen) public Pvm() // esimerkki oletuskonstruktorista

Konstruktoreista Synonyymi konstruktori-sanalle on muodostin On tärkeää osata seuraavat käsitteet: Oletuskonstruktori (oletusmuodostin) Korvaa Javan oletusarvoisen konstruktorin – ilman parametrejä() olevan konstruktorin Parametrillinen konstruktori (parametrillinen muodostin) Saa vaihtelevan määrän parametrejä Kopiokonstruktori (kopiomuodostin) Saa parametrinä oman luokan olion ja kopio olion nykyiseen olioon (eli tekee kopin)

Missä ollaan? Luokan anatomia kapselointi Metodin anatomia Selvisimme tästä, seuraavaksi yhteenveto

Yhteenveto Tutustuimme Luokan määrittämiseen Instanssidataan (attribuutit) kapselointi ja Java määreet (private ja public) Metodin määrittäminen ja parametrien välittäminen Konstruktorit

Lähteet Lewis & Loftus: Java Software Solutions kalvot