Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

6. Metodit.

Samankaltaiset esitykset


Esitys aiheesta: "6. Metodit."— Esityksen transkriptio:

1 6. Metodit

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

3 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ö")) { …

4 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ä.

5 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;

6 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);

7 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.

8 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.

9 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();

10 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"; }

11 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.

12 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.

13 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); } ...

14 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 }

15 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.

16 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!


Lataa ppt "6. Metodit."

Samankaltaiset esitykset


Iklan oleh Google