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

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

Oliot viestivät metodeja kutsuen

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

9. Periytyminen Javassa 9.1

4. Olio-ohjelmoinista lyhyesti 4.1

2. Olio-ohjelmoinista lyhyesti 2.1

19. Olio-ohjelmointia Javalla 19.1

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

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

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

9. Periytyminen Javassa 9.1

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

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

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

1. Omat operaatiot 1.1

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

Mikä yhteyssuhde on?

Olio-ohjelmointi Javalla

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

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

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

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

Metodien tekeminen Javalla

7. Oliot ja viitteet 7.1

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

Luokat ja oliot. Ville Sundberg

KOHDELUOKAN MÄÄRITTELY

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Sisällys. 15. Lohkot. Lohkot. Lohkot

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

20. Javan omat luokat 20.1

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

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

Sisältö. 2. Taulukot. Yleistä. Yleistä

Periytyminen (inheritance)

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

2. Olio-ohjelmoinnin perusteita 2.1

YHTEYSSUHDE (assosiation)

public static void main (String [] args)

12. Monimuotoisuus 12.1

Luokan muodostimet (Constructors)

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

2. Olio-ohjelmoinnin perusteita 2.1

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

7. Näytölle tulostaminen 7.1

Luokan sisällä on lista

17. Javan omat luokat 17.1

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

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

Java-kielen perusteet

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

1 Tehtävän kuvaus ja analysointi

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

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

15. Ohjelmoinnin tekniikkaa 15.1

Javan perusteita. Janne Käki

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

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

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

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Rajapinta (interface)

15. Ohjelmoinnin tekniikkaa 15.1

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

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

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi.

16. Javan omat luokat 16.1

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

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

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

12. Monimuotoisuus 12.1

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

Listarakenne (ArrayList-luokka)

812347A Olio-ohjelmointi, X Reflektiivisyys

1. Olio-ohjelmointi 1.1

Taulukot. Jukka Harju, Jukka Juslin

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Pakkauksen kokoaminen

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

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

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

Oliosuunnittelu ja luokkakohtaiset komponentit

Sisällys. 16. Lohkot. Lohkot. Lohkot

Metodien tekeminen Javalla

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

ict02d Osio2- luento 3 Olio-ohjelmointi: Luokkien kirjoittaminen

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Java-kielen perusteet

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 )

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

Pakkauksen kokoaminen

17. Javan omat luokat 17.1

Ohjelmistojen mallintaminen, sekvenssikaaviot

5. HelloWorld-ohjelma 5.1

Mitä on periytyminen?

ITKP102 Ohjelmointi 1 (6 op)

Java ja grafiikka. Ville Sundberg

Transkriptio:

6. Metodit 6.1

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

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

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

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++) { System.out.println(s); 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.5

Luokkametodit ja -attribuutit Static-määreellä esitellyt metodit (class method) ovat kutsuttavissa ilman olion luomista suoraan luokan nimen kautta. Oliot jakavat staticmää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); 6.6

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

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

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

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"; 6.10

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

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

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);... 6.13

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 6.14

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

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