Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen



Samankaltaiset tiedostot
Metodien tekeminen Javalla

Java-kielen perusteet

Olio-ohjelmointi Javalla

Java-kielen perusteita

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Rajapinta (interface)

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

KOHDELUOKAN MÄÄRITTELY

1. Omat operaatiot 1.1

Java-kielen perusteet

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Metodien tekeminen Javalla

9. Periytyminen Javassa 9.1

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Listarakenne (ArrayList-luokka)

9. Periytyminen Javassa 9.1

public static void main (String [] args)

YHTEYSSUHDE (assosiation)

Periytyminen (inheritance)

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Java-kielen perusteita

17. Javan omat luokat 17.1

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Taulukot. Jukka Harju, Jukka Juslin

ITKP102 Ohjelmointi 1 (6 op)

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

4. Luokan testaus ja käyttö olion kautta 4.1

7. Näytölle tulostaminen 7.1

Luokan muodostimet (Constructors)

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

1 Tehtävän kuvaus ja analysointi

Java-kielen perusteet

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

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

Poikkeustenkäsittely

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

ITKP102 Ohjelmointi 1 (6 op)

Mikä yhteyssuhde on?

Mitä poikkeuskäsittely tarkoittaa?

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

19. Olio-ohjelmointia Javalla 19.1

Tietorakenteet (syksy 2013)

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

8. Näppäimistöltä lukeminen 8.1

17. Javan omat luokat 17.1

8. Näppäimistöltä lukeminen 8.1

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Ohjelmoinnin perusteet, kurssikoe

Javan perusteita. Janne Käki

Lista luokan sisällä

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Java-kielen perusteita

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

58131 Tietorakenteet ja algoritmit (syksy 2015)

12. Näppäimistöltä lukeminen 12.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

14. Poikkeukset 14.1

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

ITKP102 Ohjelmointi 1 (6 op)

Vahva koostumussuhde (Composition)

Oliot viestivät metodeja kutsuen

1. Mitä tehdään ensiksi?

11. Javan valintarakenteet 11.1

UML ja luokkien väliset suhteet

5. HelloWorld-ohjelma 5.1

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

C++11 lambdat: [](){} Matti Rintala

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

16. Javan omat luokat 16.1

Ohjelmointi 2, välikoe

14. Poikkeukset 14.1

Luokan sisällä on lista

String-vertailusta ja Scannerin käytöstä (1/2) String-vertailusta ja Scannerin käytöstä (2/2) Luentoesimerkki 4.1

Taulukoiden käsittely Javalla

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

JUnit ja EasyMock (TilaustenKäsittely)

Ohjelmointi 2 / 2010 Välikoe / 26.3

Transkriptio:

Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1

Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus Siihen koodataan jokin rajattu tehtävä Se suoritetaan itsenäisesti omana toimenpidekokonaisuutenaan 2

Metodi on siis koodattu looginen kokonaisuus Esimerkki: metodi piirräkolmio, joka tulostaa kuvaruudulle seuraavan kuvion: x xxx xxxxx xxxxxxx 3

Metodin määrittely: näkyvyys paluutyyppi metodinnimi( parametrilista ) { metodin runko pakollinen valinnainen 4

näkyvyys paluutyyppi metodinnimi( parametrilista ) { metodin runko Näkyvyys määrittää, kuka voi kutsua metodia: private, metodi on piilotettu ja sitä voi kutsua vain sen luokan metodit, jossa se on määritelty tai protected, public, puuttuu, liittyy periytymiseen (ei käsitellä tällä kurssilla) tai metodi on julkinen ja sitä voi kutsua minkä tahansa luokan metodista tai metodia voi kutsua luokat, jotka on määritelty samaan pakettiin (=hakemisto) kuin metodin luokka 5

näkyvyys paluutyyppi metodinnimi( parametrilista ) { metodin runko Metodin paluutyyppi ilmaiseen, minkä tyyppisen arvon metodi palauttaa: perustietotyyppiä, esim. int, double, float, boolean jne. tai viittaus olioon, esim. String tai void, jolloin metodi ei palauta arvoa 6

näkyvyys paluutyyppi metodinnimi( parametrilista ) { metodin runko Metodin nimi kuvaa metodin toimintaa: alkaa aina pienellä kirjaimella yhdistelmänimien jälkiosat isolla alkukirjaimella esim. public int pyydäluku() public void piirräkolmio() 7

näkyvyys paluutyyppi metodinnimi( parametrilista ) { metodin runko Parametrilista kuvaa metodille vietyjä tietoja: voi puuttua, jolloin sulkujen väliin ei kirjoiteta mitään jos ei puutu se määritellään seuraavasti tietotyyppi 1 parametri 1, tietyyppi 2 parametri 2,..., tietotyyppi n parametri n, missä tietotyyppi on ko. parametrin tietotyyppi (perustietotyyppiä esim. int, double, jne. tai viittaus olioon, esim. String) ja parametri on parametrin nimi 8

näkyvyys paluutyyppi metodinnimi( parametrilista ) { metodin runko Metodin runkoon koodataan metodin toiminta: runkoon voidaan määritellä ns. paikallisia muuttujia, joihin voi viitata vain rungon sisällä jos metodille on määritelty paluuarvo, rungon viimeinen lause tulee olla return-lause eli return paluuarvo;, missä muuttujan paluuarvo tietotyyppi on sama kuin metodille määritelty paluutyyppi 9

esimerkki Metodin palauttaman arvon tyyppi Metodille viety tieto, mitä metodi käsittelee private double laskeosamaara(double a, int b) { double osamaara = 0; // paikallinen muuttuja if (b!= 0) osamaara = a / b; return osamaara; // palauta osamaara 10

Metodin suorittaminen eli kutsu metodin suoritus tapahtuu kutsumalla metodia suoritettavaksi tällöin ohjelman kontrolli (ohjelman kulku) siirtyy metodiin suorittamaan kirjoitetut toimenpiteet kun metodi on suoritettu, kontrolli palaa takaisin kutsukohtaan Nyt käsitellään metodin kutsu luokan sisällä, kutsu luokan ulkopuolelta käsitellään myöhemmin. 11

Metodin kutsu, kun metodi ei palauta mitään eikä sille välitetä parametreja: metodinnimi(); Esim. piirräkolmio-metodin kutsu: piirräkolmio(); Kun metodi on määritelty seuraavasti: private void piirräkolmio(){ System.out.println( " X ); System.out.println( " XXX ); System.out.println( " XXXXX ); System.out.println( " XXXXXXX ); Ks. PiirrosOhjelma.java 12

private double laskeympyranala(){ double ala=0, sade; // paikalliset muuttujat // pyydetään kolmion säde, kunnes saadaan positiivinen arvo do { System.out.println("Anna kolmion säde (>0):"); sade = input.nextdouble(); // Scanner input määritelty while (sade <= 0); ala = Math.PI*sade*sade; return ala; // palauta arvo Metodin kutsu: double ala = laskeympyranala(); Metodin kutsu, kun metodi palauttaa arvon, mutta sille ei välitetä parametreja // aikaisemmin luokassa // tai System.out.println( Ympyrän ala on %2.f,laskeYmpyranAla()); Ks. LaskeAlat.java 13

Metodin kutsu, kun sillä on parametreja, eli metodi saa kutsujaltaan tietoa: Metodin nimen perään luetellaan parametrit samassa järjestyksessä, kun ne on määritelty metodiin, joko literaalisina vakioina, nimettyinä vakioina tai muuttujina: Esim. private void tulosta (int a, double b, char c, String d){ System.out.println("int a = " + a); System.out.println("double b = " + b); System.out.println("char c = " + c); System.out.println("String d = " + d); Metodin kutsu: tulosta (23, 56.78, Ö, kissa ); Hypätään metodiin tulosta ja tämän parametrit saavat arvot: int a =23; double b = 56.78; char c = Ö ; String d= Kissa ; tulostuu: int a = 23 double b = 56.78 char c = Ö String d = kissa 14

Metodin kutsu, kun sillä on parametreja, eli metodi saa kutsujaltaan tietoa: jatkuu String mjono = Abc kissa kävelee ; int x = 78; double y = 34.56; char merkki = L ; // metodin kutsu tulosta (x, y, merkki, mjono); Hypätään tulosta-metodiin ja parametrit saavat arvot: int a = 78; double b = 34.56; char c = L ; String d = Abc kissa kävelee ; tulostuu: int a = 78 double b = 34.56 char c = L String d = Abc kissa kävelee Ks. LaskeAlennusB.java 15

Harjoitus: Tee ohjelma, LaskePalkka, joka pyytää käyttäjältä tuntipalkan ja tehdyt tunnit ja tulostaa henkilön palkan. Toteuta ohjelmaan aja()-metodin lisäksi seuraavat metodit: private double annatuntipalkka()-metodi, joka pyytää henkilön tuntipalkan (>0 ja <100 eur) private int annatunnit () -metodi, joka pyytää tehdyt tunnit (>=0) private double laskepalkka(double tuntipalkka, int tehdyttunnit) metodi, joka laskee palkan 16

Muuttujan näkyvyys eli missä ohjelman kohdassa siihen voi viitata Kun muuttuja määritellään luokassa, siihen voidaan viitata kaikissa luokan metodeissa. Kun muuttuja määritellään metodissa, siihen voidaan viitata vain ko. metodin sisällä ei sen ulkopuolella. Kun metodissa määritellään samanniminen muuttuja kuin luokassa on määritelty, ko. metodissa viitataan metodissa määritettyyn muuttujaan. Ks. MuuttujanNakyvyys.java 17

Metodin kuormittaminen Tarkoittaa, että ohjelmassa voi olla useita samannimisiä metodeita. Miten kääntäjä sitten tietää, mitä metodia kutsutaan, kun samannimisiä metodeita on useita? Samannimiset metodit erotetaan toisistaan parametrien avulla, eli eri tyyppiset parametrit ja/tai eri määrä parametreja 18

Esim. public class MetodinKuormittaminen { public int laske (int x, int y) { return x+y; public int laske (int x, int y, int z) { return x+y+z; public int laske (int x, int y, int z, int k) { return x+y+z+k; // jatkuu. 19

Esim. jatkuu public void aja(){ int summa; summa = laske(3,4); // public int laske(int x, int y) System.out.println("3+4="+summa); summa = laske(3,4,5); // public int laske (int x, int y, inx z) System.out.println("3+4+5="+summa); // public int laske(int x,int y,inx z, int k) summa = laske(3,4,5,6); System.out.println("3+4+5+6="+summa); public static void main(string[] args) { MetodinKuormittaminen a = new MetodinKuormittaminen(); a.aja(); ks. KolmioPiirtäminen.java 20

Harjoitus Tee ohjelma, HipHop, joka tulostaa hiphop -sanaa ensin viisi kertaa. Tämän jälkeen se kysyy käyttäjältä, montako kertaa hiphop -sanaa tulostetaan vielä, jonka jälkeen ohjelma tulostaa käyttäjän määräämän määrän sanaa hiphop. Kutsu alla olevia metodeja. Kuormita metodi hiphop seuraavasti: Metodi tulostaa hiphop-tekstin näytölle viisi (5) kertaa. Metodi tulostaa näytölle hiphop-sanan siten, että se saa parametrina kokonaisluvun, joka määrää montako kertaa hiphopsanaa tulostetaan näytölle. 21