6. Metodit.

Slides:



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

6. Metodit.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
16. Javan omat luokat.
© 2004 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice Java-perusteet Kari Kujansuu
2. Olio-ohjelmoinnin perusteita
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
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.
16. Lohkot Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat.
9. Periytyminen Javassa.
Olioon kohdistuvia perustoimintoja tMyn1 Olioon kohdistuvia perustoimintoja Kopiointimuodostin (copy constructor) alustaa olion tietojäsenet saman luokan.
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Luokan muodostintMyn1 Luokan muodostin Olioihin kohdistuvia automaattisia toimintoja ovat luonti, alustus, kopiointi, sijoitus, tyhjennys ja tuhoaminen.
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.
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.
Olioon kohdistuvia perustoimintoja tMyn1 Olioon kohdistuvia perustoimintoja Kopiointimuodostin (copy constructor) alustaa olion tietojäsenet saman luokan.
22. Taulukot.
17. Kooste Kooste Kooste (aggregation) on luokkien A ja B välinen suhde, joka tarkoittaa “A on B:n osa” tai “A kuuluu B:hen”. − Koostesuhteessa.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
11. Rajapinnat Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen.
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
8. Periytyminen Sisällys Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö.
Tiedostot. 8.2 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen.
Olio-ohjelmoinista lyhyesti. 2.2 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen.
String-vertailusta ja Scannerin käytöstä (1/2)
17. Kooste.
5. Kapselointi.
6. Metodit.
3. Olio-ohjelmoinista lyhyesti
6. Tiedostot.
1. Omat operaatiot.
7. Oliot ja viitteet.
11. Rajapinnat.
2. Taulukot.
4. Komentoriviparametrit
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
15. Lohkot.
8. Näppäimistöltä lukeminen
2. Taulukot.
15. Lohkot.
7. Oliot ja viitteet.
3. Komentoriviparametrit
13. Pakkaukset.
8. Periytyminen.
4. Attribuutit.
7. Näytölle tulostaminen
3. Attribuutit.
13. Pakkaukset.
4. Luokan testaus ja käyttö olion kautta
2. Olio-ohjelmoinnin perusteita
eli oliotiedostojen käsittely
Esityksen transkriptio:

6. Metodit

Sisällys Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen.

Oliot viestivät metodeja kutsuen Olio-ohjelmoinnissa ohjelma on joukko olioita, jotka suorittavat annetun tehtävän keskenään viestimällä. Viestit ovat käytännössä metodikutsuja. Metodia kutsutaan luokan sisällä suoraan nimellä. Kutsuminen luokan ulkopuolelta joko olion tai luokan tunnuksen kautta pistenotaation avulla. Muut luokat voivat kutsua vain luokan liittymään kuuluvia metodeja. int n = In.readInt(); int tulos = laskeKertoma(n); if (nimi.equals("Mörkö")) { …

Metodien kuormittaminen Kuormittamisena (overloading) tunnettu mekanismi sallii samannimisten metodien esittelyn. Eräs monimuotoisuuden (polymorphism) muoto: tunnuksella on useita merkityksiä. Parametrilista erottaa kuormitetut metodit toisistaan. Metodia ei voi kuormittaa antamalla erilaisilla määreitä. Esimerkiksi Javan print- ja println-metodit on kuormitettu. public void println() public void println(boolean x) public void println(char x) ... Käytetään erityisesti rakentajien yhteydessä.

Metodien kuormittaminen Kuormittamalla voidaan esimerkiksi määritellä koiralle eri tapoja haukkua: // String-parametri. public void hauku(String s) { System.out.println(s); } // String- ja int-parametrit. public void hauku(String s, int k) { for (int i = 0; i < k; i++) { Kätevää myös aksessorien yhteydessä: // Arvon lukeminen. public int luonne() { return luonne; } // Arvon asettaminen. public void luonne(int l) { if (l > 0) { luonne = l;

Luokkametodit ja -attribuutit Static-määreellä esitellyt metodit (class method) ovat kutsuttavissa ilman olion luomista suoraan luokan nimen kautta. Oliot jakavat static-määreellä esitellyn attribuutin (class variable) arvon. // In-luokassa. public static int readInt() // Math-luokassa. public static int max(int a, int b) // Kutsu In-luokan kautta. double d = In.readDouble(); // Kutsu Math-luokan kautta. int max = Math.max(1, 2);

Luokkametodit ja -attribuutit Ilman static-määrettä esitellyt tavalliset “ei-staattiset” piirteet liittyvät kiinteästi olioihin. Tavallisten eli ilmentymämetodien (instance method) kutsuminen tapahtuu olioiden kautta siten, että Java päättelee ohjelman suorituksen aikana mitä metodin versioista tulee kutsua. Tavallisten attribuuttien (instance variable) arvot ovat oliokohtaisia. Luokkametodissa voidaan käsitellä vain luokka-attribuutteja ja kutsua luokkametodeja, koska tavalliset piirteet eivät ole saatavilla ilman oliota, jota luokkametodi toisaalta ei tarvitse. Main-metodin sisältävän luokan metodien ja attribuuttien esittelyihin on sisällytettävä static-määre. Luokkametodeja voidaan kutsua myös olion kautta, koska oliolla on aina luokkansa piirteet.

Luokkametodit ja -attribuutit Ajoluokan lisäksi static-määrettä tarvitaan lähinnä, kun kootaan yhteen toimintoja tai vakioita, joiden käyttö on sujuvampaa ilman olion esittelyä (esimerkiksi Math-luokka), halutaan määritellä metodi, jota ei ole tarvetta määritellä uudelleen tarkemmin ja jonka toiminta riippuu siten ainoastaan sen saamista parametreista, on tarpeen määritellä muuttuja, jonka arvo on ohjelman ajonaikana sama kaikille luokan olioille (esimerkiksi oliolaskuri) tai halutaan optimoida ohjelmaa. Olio-ohjelmoinnissa käytetään pääosin tavallisia metodeja, koska niitä voidaan tarkentaa periytymisen yhteydessä. Tee luokkametodi vain, jos metodin käyttö ilman oliota vaikuttaa luontevalta nyt ja tulevaisuudessa.

Rakentajat Rakentaja (constructor) on metodi, joka on tarkoitettu erityisesti attribuuttien alustamiseen. Rakentajan nimi on aina sama kuin luokan nimi. Rakentajaa kutsutaan, kun olio luodaan new-operaatiolla. Java alustaa kunkin attribuutin sen tyypistä riippuvalla oletusarvolla ennen rakentajan kutsua. Java tarjoaa automaattisesti kaikille luokille parametrittoman oletusrakentajan, jossa ei tehdä mitään. Esimerkiksi Kissa-luokasta voidaan luoda uusi olio, vaikka luokkaan ei ole erikseen kirjoitettu rakentajametodia Kissa(). Kissa ville = new Kissa();

Rakentajat Rakentajalla ei ole tyyppimäärittelyä: otsikkoon ei saa lisätä edes void-määrettä. Rakentajat ovat usein julkisia (public). // Kissa-luokan attribuuttien alustaminen oletusrakentajassa. // Oletusrakentajalla alustettu kissaolio on väriltään musta // ja sen häntä on kippura. public Kissa() { vari = "musta"; hanta = "kippura"; }

Rakentajat Luokalla voi olla myös parametrillisia rakentajia, koska myös rakentajia voidaan kuormittaa. Parametrilliset rakentajat on ohjelmoitava itse. Mikäli luokalle toteutetaan parametrillinen rakentaja, Java ei enää luo automaattisesti oletusrakentajaa. String sukunimi = new String(″Vallaton″); Kissa ville = new Kissa("musta", "tavallinen"); Parametrillisilla rakentajilla voidaan antaa attribuuteille helposti oliokohtaiset alkuarvot. Asetusmetodien tapaan myös rakentajissa on syytä tarkistaa parametriarvojen järkevyys.

Rakentajat Alkuarvojen asettaminen onnistuu ilman parametrillista rakentajaa aksessoreilla, mutta rakentajien käyttö on kätevämpää ja rakentajissa kannattaa suorittaa keskitetysti olion luomisen yhteydessä tarvittavat toimenpiteet. Koodin määrää voi vähentää edelleen hyödyntämällä aksessoreita rakentajissa.

Kissa-luokka (Kissa.java) public class Kissa { // Attribuutit. private String vari; private String hanta; /* Oletusrakentaja. */ public Kissa() { vari = "musta"; hanta = "kippura"; } /* Parametrillinen rakentaja, * jossa alustetaan vari (v) * ja hanta (h). */ public Kissa(String v, String h) { // Koodia on lyhennetty // kutsumalla aksessoreita. vari(v); hanta(h); } ...

KissaTesti-luokka (KissaTesti.java) class KissaTesti { public static void main(String[] args) { // Luodaan kissa parametrittomalla oletusrakentajalla. Kissa rontti = new Kissa(); System.out.println(rontti.vari()); // musta System.out.println(rontti.hanta()); // kippura // Luodaan kissa parametrillisella rakentajalla. Kissa moykky = new Kissa("valkea", "tavallinen"); System.out.println(moykky.vari()); // valkea System.out.println(moykky.hanta()); // tavallinen }

Luokan sisällön järjestäminen Yleensä luokan sisältö järjestetään jollakin tavoin, koska halutaan tehdä yhdenmukaista koodia. Attribuutit yleensä ennen metodeja. Olio-ohjelmoinnissa tiedot ovat keskiössä. Esimerkkijärjestys: Vakiomuotoiset attribuutit. Luokka-attribuutit. Ilmentymäattribuutit. Rakentajat. Luokkametodit. Ilmentymämetodit. Main-metodi.

Luokan sisällön järjestäminen Rakentajat aina ennen muita metodeja. Muut metodit: Java-kielen kehittäjä Sun suositteli järjestämään toiminnallisuuden mukaan: yhteenkuuluvat osat koodia lähellä toisiaan. Näkyvyyden mukaan ryhmitellen. Aakkosjärjestys. Yrityksillä omat yksityiskohtaiset tyylioppaansa. Oli järjestys mikä tahansa, tärkeintä on johdonmukaisuus!