Javaohjelmointi Opas ammattimaiseen osaamiseen Oliosuunnittelu ja luokkakohtaiset komponentit

  • Slides: 41
Download presentation
Java-ohjelmointi Opas ammattimaiseen osaamiseen Oliosuunnittelu ja luokkakohtaiset komponentit

Java-ohjelmointi Opas ammattimaiseen osaamiseen Oliosuunnittelu ja luokkakohtaiset komponentit

Nämä kalvot on lisensoitu Creative Commons Attribution-Share. Alike 1. 0 -lisenssillä. Lisäys edelliseen lisenssiin:

Nämä kalvot on lisensoitu Creative Commons Attribution-Share. Alike 1. 0 -lisenssillä. Lisäys edelliseen lisenssiin: Kalvojen muokkaaminen on sallittu vain opettajille, joiden kursseilla käytetään kurssikirjana Tuloksellinen Java -ohjelmointi - tai Java ohjelmointi opas ammattimaiseen osaamiseen -kirjaa. © Jukka Harju

Sisällys Ohjelmistosuunnittelusta Tarvittavien luokkien tunnistaminen Luokka-attribuutit ja -metodit Metodien suunnittelu 3

Sisällys Ohjelmistosuunnittelusta Tarvittavien luokkien tunnistaminen Luokka-attribuutit ja -metodit Metodien suunnittelu 3

Ohjelmistosuunnittelu • Ohjelmistosuunnittelussa käytetään useita eri prosessimalleja (mm. Rational Unified Process ja e. Xtreme

Ohjelmistosuunnittelu • Ohjelmistosuunnittelussa käytetään useita eri prosessimalleja (mm. Rational Unified Process ja e. Xtreme Programming) • Käytettävästä mallista riippumatta ohjelmistoprosessi sisältää lähes aina seuraavat osat: – Vaatimusmäärittely – Toiminnallinen määrittely – Tekninen suunnittelu – Toteutus – Testaus – Tuotantoonsiirto – Ylläpito 4

Vaatimusmäärittely • Vaatimusmäärittelyssä kuvataan ohjelmistolle asetettavat vaatimukset eli kuinka ohjelmiston tulee toimia. • Vaatimukset

Vaatimusmäärittely • Vaatimusmäärittelyssä kuvataan ohjelmistolle asetettavat vaatimukset eli kuinka ohjelmiston tulee toimia. • Vaatimukset saadaan ohjelmiston tilaajalta, joka suomalaisessa ohjelmistoteollisuudessa on useimmiten asiakkaana oleva yritys. • Vaatimusmäärittely on korkean tason kuvaus, jota tarkennetaan alemman tason kuvauksissa (mm. toiminnallinen määrittelykuvaus ja suunnittelukuvaus). • Esimerkki suorituskykyyn liittyvästä vaatimuksesta web-pohjaiselle järjestelmälle: – Järjestelmän tulee pystyä palvelemaan vähintään 1000 yhtäaikaista käyttäjää alle 2 sekunnin vasteajoilla. 5

Toiminnallinen määrittely • Toiminnallisessa määrittelyssä kuvataan kaikki järjestelmän toteuttamat toiminnot ja liitännät järjestelmän ulkopuolelle.

Toiminnallinen määrittely • Toiminnallisessa määrittelyssä kuvataan kaikki järjestelmän toteuttamat toiminnot ja liitännät järjestelmän ulkopuolelle. • Toiminnallisen määrittelyn tuloksena syntyy määrittelydokumentti, joka kuvaa mitä järjestelmällä voi tehdä ja miten käyttäjä voi järjestelmää käyttää. • Toiminnallinen määrittely ei ota kantaa siihen miten toiminnot tulee toteuttaa. • Määrittelyn tulisi olla niin kattava, että seuraavissa vaiheissa ei ole enää epäselvää miten ohjelman tulee toimia eri tilanteissa. Tähän ei kuitenkaan käytännössä koskaan päästä. • Toiminnallisessa määrittelyssä voidaan kuvata esimerkiksi web-käyttöliittymän eri näytöt ja näytöillä olevat komponentit. Määrittelydokumentin tulee sisältää tällöin sekä sanalliset että graafiset kuvaukset ko näytöistä. 6

Tekninen suunnittelu • Teknisen suunnittelu tarkoituksena on kuvata ohjelmiston tekninen arkkitehtuuri. • Suunnittelussa kuvataan

Tekninen suunnittelu • Teknisen suunnittelu tarkoituksena on kuvata ohjelmiston tekninen arkkitehtuuri. • Suunnittelussa kuvataan kuinka ohjelma suorittaa toiminnallisessa määrittelyssä kuvatut toiminnot. • Suunnittelukuvauksesta ilmenee kuinka ongelma voidaan jakaa pienempiin, hallittavan kokoisiin osiin ja mitä kukin osa tekee. • Olio-orientoinut suunnittelukuvaus kertoo mitä luokkia ja olioita tarvitaan ja mitkä ovat niiden keskinäiset suhteet. • Sisältää mm. käytettyjen ohjelmistokomponenttien (luokkien) kuvaukset, niiden keskinäisten riippuvuuksien kuvaukset, tietovaraston kuvauksen jne. • Kuvaus koostuu eri tasoista, esim. ohjelmataso, luokkataso, metoditaso. • Kaikkein alimman tason osat kuvaukseen saa tuotettua esim. javadocista. 7

Toteutus • Toteutuksessa toteutetaan suunnittelukuvauksen mukainen lähdekoodi. • Aloittelevat ohjelmoijat luulevat usein, että toteutus

Toteutus • Toteutuksessa toteutetaan suunnittelukuvauksen mukainen lähdekoodi. • Aloittelevat ohjelmoijat luulevat usein, että toteutus on ohjelmistoprosessin ydin, mutta itse asiassa sen tulisi olla vähiten luovuutta vaativa kohta. • Lähes kaikki tärkeät päätökset tehdään jo vaatimusmäärittelyn ja suunnittelun aikana. • Toteutuksen tulisi keskittyä ohjelmoinnin yksityiskohtiin, tyyliin (JCC) ja dokumentointiin (javadoc). • Tuloksena on suoritettava ohjelmisto, joka yleensä kuitenkin sisältää suhteellisen paljon toiminnallisia virheitä. 8

Testaus • Testauksessa yritetään varmistaa, että ohjelma täyttää sille asetetut vaatimukset. • Testauksessa yritetään

Testaus • Testauksessa yritetään varmistaa, että ohjelma täyttää sille asetetut vaatimukset. • Testauksessa yritetään löytää virheitä. Koko ohjelma tulee aina testata huolella. • Testaus ei todista ohjelman toimivan oikein vaan todistetuksi tulee ainoastaan se, että ohjelma sisältää virheitä. • Virheitä löytyy toteutuksen huolellisuudesta riippumatta lähes kaikista ohjelmistoista. • Debuggaus on löydettyjen virheiden alkuperän etsimistä ja virheiden korjaamista. 9

Tuotantoonsiirto • Tuotantoonsiirrossa testattu ja toimivaksi todettu ohjelmisto asennetaan toimintaan tuotantoympäristöön. • Tuotantoonsiirtoon liittyy

Tuotantoonsiirto • Tuotantoonsiirrossa testattu ja toimivaksi todettu ohjelmisto asennetaan toimintaan tuotantoympäristöön. • Tuotantoonsiirtoon liittyy usein mm. laitteiston asennus ja valmistelu, tietoliikenneyhteyksien valmistelu ja käyttäjien kouluttaminen. 10

Ylläpito • Ylläpito sisältää toimenpiteet, joita ohjelmistolle tarvitsee tuotantoonsiirron jälkeen tehdä, jotta asiakas olisi

Ylläpito • Ylläpito sisältää toimenpiteet, joita ohjelmistolle tarvitsee tuotantoonsiirron jälkeen tehdä, jotta asiakas olisi tyytyväinen ohjelmistoon. • Laadukkaastikin ohjelmistosta löytyy useimmiten tuotantoonsiirron jälkeenkin pieniä virheitä, jotka tulee korjata. • Käyttäjille tulee uusia tarpeita, joten ohjelmistoon on lisättävä uusia ominaisuuksia. 11

Sisällys Ohjelmistosuunnittelusta Tarvittavien luokkien tunnistaminen Luokka-attribuutit ja -metodit Metodien suunnittelu 12

Sisällys Ohjelmistosuunnittelusta Tarvittavien luokkien tunnistaminen Luokka-attribuutit ja -metodit Metodien suunnittelu 12

Tarvittavien luokkien tunnistaminen • Oliosuunnittelun tärkein tehtävä on määritellä ohjelmistossa tarvittavat luokat ja oliot

Tarvittavien luokkien tunnistaminen • Oliosuunnittelun tärkein tehtävä on määritellä ohjelmistossa tarvittavat luokat ja oliot sekä niiden väliset yhteydet. • Luokat voivat olla Javan valmisluokkia, vapaasti saatavia Javan ulkopuolisia valmisluokkia (ns. 3 rd party -luokkia), omia aiemmin tehtyjä luokkia tai täysin uusia. • Eräs tapa tunnistaa mahdollisesti tarvittavat luokat on vaatimusmäärittelyn apuna käyttäminen. • Oliot esiintyvät vaatimusmäärittelyssä useimmiten substantiiveina ja metodit verbeinä. 13

Tarvittavien luokkien tunnistaminen • Osa vaatimusmäärittelystä: • • • Ohjelman tulee tuottaa asiakkaalle lähetettävä

Tarvittavien luokkien tunnistaminen • Osa vaatimusmäärittelystä: • • • Ohjelman tulee tuottaa asiakkaalle lähetettävä lasku. Lasku tulee kirjoittaa tekstitiedostoon. Lasku sisältää: • Myyjän nimen ja osoitteen • • • laskutuspäivän Asiakkaan nimen ja osoitteen Laskun identifioivan laskunumeron Viitenumeron Tilinumeron, jolle lasku maksetaan Laskun muodostamisessa käytetyn tuntihinnan … Kaikki virheilmoitukset kirjoitetaan lokitiedostoon. Kaikista substantiiveista ei kuitenkaan tule luokkaa / oliota lopullisessa ratkaisussa! 14

Tarvittavien luokkien tunnistaminen • Luokka edustaa joukkoa samankaltaisia olioita. • Luokat tulisi nimetä yksikkömuodossa

Tarvittavien luokkien tunnistaminen • Luokka edustaa joukkoa samankaltaisia olioita. • Luokat tulisi nimetä yksikkömuodossa olevilla substantiiveilla: – Oppilas – Osoite – Viitenumero • Poikkeuksiakin tietysti löytyy (esim. Tiedostotyokalut). 15

Tarvittavien luokkien tunnistaminen • Joskus on vaikea päättää tarvitaanko asian esittämiseen erillinen luokka. •

Tarvittavien luokkien tunnistaminen • Joskus on vaikea päättää tarvitaanko asian esittämiseen erillinen luokka. • Esimerkiksi asiakkaan osoite voidaan esittää useampana erillisenä attribuuttina tai yhtenä Osoite-tyyppisenä attribuuttina. • Pääsääntönä on välttää kovin monimutkaisten luokkien tekemistä. Tällaiset luokat tulee pilkkoa useampaan pienempään luokkaan. 16

Tarvittavien luokkien tunnistaminen • Luokissa halutaan esittää tarvittava määrä yksityiskohtia. • Esimerkiksi jokaista kulkuneuvoa

Tarvittavien luokkien tunnistaminen • Luokissa halutaan esittää tarvittava määrä yksityiskohtia. • Esimerkiksi jokaista kulkuneuvoa kuvaamaan ei välttämättä tarvita omaa luokkaa, vaan voidaan käyttää yleisempää Kulkuneuvo-luokkaa tarvittavin attribuutein. • Tällöin Kulkuneuvo-luokan attribuuttina voi olla nimi, joka kertoo mikä laite on kyseessä. • Esimerkiksi luokkien Auto, Moottoripyora ja Polkupyora sijaan saattaisi riittää luokka Kulkuneuvo, jolla voisi olla vaikkapa attribuutit nimi, kayttoonottovuosi ja omistaja. 17

Tarvittavien metodien tunnistaminen • Jokainen ohjelmassa suoritettava toiminto täytyy toteuttaa jonkin luokan metodina. •

Tarvittavien metodien tunnistaminen • Jokainen ohjelmassa suoritettava toiminto täytyy toteuttaa jonkin luokan metodina. • Metodit nimetään käyttäen verbejä, esimerkiksi hae. Viitenumero, laske. Tarkiste. • Suunnittelun alkuvaiheessa riittää tunnistaa kunkin luokan tärkeimmät tehtävät. 18

Sisällys Ohjelmistosuunnittelusta Tarvittavien luokkien tunnistaminen Luokka-attribuutit ja -metodit Metodien suunnittelu 19

Sisällys Ohjelmistosuunnittelusta Tarvittavien luokkien tunnistaminen Luokka-attribuutit ja -metodit Metodien suunnittelu 19

Luokka-attribuutit ja -metodit • Luokkametodia voidaan kutsua ilman yhtäkään oliota suoraan luokan nimen kautta.

Luokka-attribuutit ja -metodit • Luokkametodia voidaan kutsua ilman yhtäkään oliota suoraan luokan nimen kautta. • Esimerkiksi Javan Math-luokan metodit ovat luokkametodeja: double logaritmi = Math. log(2); • Myös attribuutit voivat olla luokka-attribuutteja, tällainen on esimerkiksi Javan System-luokan out-attribuutti: System. out. println("Kone on kaapattu Kuubaan"); • Suunnittelun eräs vaihe on määritellä tuleeko attribuutin olla oliokohtainen vai luokka-attribuutti. 20

static-avainsana • Luokka-attribuutit ja luokkametodit määritellään staticavainsanaa käyttäen. • static-avainsana määrittelee metodin tai attribuutin

static-avainsana • Luokka-attribuutit ja luokkametodit määritellään staticavainsanaa käyttäen. • static-avainsana määrittelee metodin tai attribuutin luokkakohtaiseksi (ei oliokohtaiseksi). Esimerkiksi. //luokka-attibuutti private static double tuntilaskutus; //luokkametodi public static double laske. Summa(int a, int b) { return a + b; } 21

Luokka-attribuutti • Yleensä jokainen olio attribuutteineen sijaitsee omalla muistialueellaan. • Luokka-attribuutista on kuitenkin olemassa

Luokka-attribuutti • Yleensä jokainen olio attribuutteineen sijaitsee omalla muistialueellaan. • Luokka-attribuutista on kuitenkin olemassa vain yksi kopio, joka on yhteinen kaikille olioille. • Luokka-attribuutti luodaan kun luokkaan viitataan ensimmäisen kerran. • Luokka-attribuutin arvon muutos näkyy kaikille ko. luokan olioille. 22

Luokka-attribuutti • Luokka-attribuutti ei tule alustaa konstruktorissa, sillä tällöin luokkaattribuutille asetetaan aina oletusarvo uuden

Luokka-attribuutti • Luokka-attribuutti ei tule alustaa konstruktorissa, sillä tällöin luokkaattribuutille asetetaan aina oletusarvo uuden olion luonnin yhteydessä. • Luokka-attribuutti voidaan alustaattisessa alustuslohkossa. • Staattinen alustuslohko sijoitetaan luokassa heti attribuuttien jälkeen. Esimerkki. private static final double TUNTILASKUTUS; static { TUNTILASKUTUS = 125. 0; } • Luokka-attribuutteja käsittelevien get- ja set-metodien tulee olla luokkametodeja. 23

Luokkametodi public class Laskin { public static long korota. Potenssiin(int kantaluku, int eksponentti) {

Luokkametodi public class Laskin { public static long korota. Potenssiin(int kantaluku, int eksponentti) { long tulos = kantaluku; for(int i=0; i < eksponentti; i++) { tulos = tulos * kantaluku; } return tulos; } } • Koska metodi potenssi on luokkametodi, voidaan sitä kutsua seuraavasti (vrt. Math-luokka): long tulos = Laskin. korota. Potenssiin(5, 3); 24

Luokka-attribuutit ja -metodit • main-metodi on aina luokkametodi (ns. staattinen metodi). Java-kääntäjä kutsuu sitä

Luokka-attribuutit ja -metodit • main-metodi on aina luokkametodi (ns. staattinen metodi). Java-kääntäjä kutsuu sitä luomatta yhtään oliota. • Luokkametodeista ei voida viitata oliokohtaisiin attribuutteihin (ilmentymäattribuutteihin), koska käytettävissä ei ole yhtään olioviittausta (luokkametodia ei kutsuta viittausmuuttujan kautta). • Luokkametodista voidaan kuitenkin käyttää luokkaattribuutteja ja paikallisia muuttujia. • Koodissa luokka-attribuutit kirjoitetaan aina ennen ilmentymäattribuutteja. 25

Luokka-attribuutit ja -metodit import java. io. File; import java. io. IOException; import java. util.

Luokka-attribuutit ja -metodit import java. io. File; import java. io. IOException; import java. util. Scanner; import java. util. logging. Level; /** * Laskutus-sovelluksen viitenumerokäsittelymetodit * sisältävä luokkakirjasto. * @author Jukka Juslin, Jukka Harju */ public class Viitenumero { /** * Palauttaa seuraavan käyttämättömän viitenumeron ja * päivittää sen tiedostoon viite. txt. * @return viitenumero */ public static String hae. Viitenumero() { //selvitetään seuraava käyttämätön viitenumero long seuraava; seuraava = viimeinen. Kaytetty. Viitenumero() + 1; //päivitetään viitenumero takaisiin tiedostoon try { Tiedosto. Tyokalut. kirjoita( String. value. Of(seuraava), "viite. txt"); } catch (IOException ex) { Tiedosto. Tyokalut. logger. log( Level. SEVERE, "Viimeisintä viitenumeroa ei pystytty " + "päivittämään viite. txt-tiedostoon"); } int eheys = laske. Tarkiste(seuraava + ""); String viitenumero = seuraava + "" + eheys; • Kirjan Laskutus-ohjelma sisältää Viitenumero-luokan, jossa on luokkametodi hae. Viitenumero. • Metodi hakee tiedostosta viimeksi käytetyn perusviitenumeron ja selvittää seuraavan käyttämättömän. Metodi myös päivittää viimeisimmän käytetyn viitenumeron. • Metodin käyttää apuna saman luokkametodeja viimeinen. Kaytetty. Viitenumero ja laske. Tarkiste sekä Tiedosto. Tyokalut-luokan luokkametodia kirjoita. return viitenumero; } 26

this-avainsana • this-avainsana viittaa olioon itseensä. • Metodin sisällä käytettynä this-avainsana siis viittaa olioon,

this-avainsana • this-avainsana viittaa olioon itseensä. • Metodin sisällä käytettynä this-avainsana siis viittaa olioon, jolle metodi suoritetaan. • Esimerkiksi kutsuttaessa oliolle metodia set. Etunimi: oppilas 1. set. Etunimi("Anna"); oppilas 2. set. Etunimi("Jussi"); – Ensimmäisessä kutsussa set. Etunimi-metodissa käytetty this-avainsana viittaa samaan olioon kuin oppilas 1 -viittausmuuttuja, toisessa samaan olioon kuin oppilas 2 -viittausmuuttuja. • this-avainsana ei ole käytettävissä luokkametodeissa, miksi? 27

this-avainsana • this-avainsanalla voidaan erottaa attribuutti ja samanniminen paikallinen muuttuja toisistaan. • Esimerkiksi set.

this-avainsana • this-avainsanalla voidaan erottaa attribuutti ja samanniminen paikallinen muuttuja toisistaan. • Esimerkiksi set. Etunimi-metodissa: public void set. Etunimi(String etunimi) { if(etunimi != null && etunimi. length() > 0) { this. etunimi = etunimi; } else { System. out. println("Etunimi ei saa olla tyhjä!"); } } 28

Sisällys Ohjelmistosuunnittelusta Tarvittavien luokkien tunnistaminen Luokka-attribuutit ja -metodit Metodien suunnitteleminen 29

Sisällys Ohjelmistosuunnittelusta Tarvittavien luokkien tunnistaminen Luokka-attribuutit ja -metodit Metodien suunnitteleminen 29

Metodien suunnitteleminen • J. G. Brookshear: "Algoritmi on äärellinen joukko täsmällisiä, suoritettavissa • •

Metodien suunnitteleminen • J. G. Brookshear: "Algoritmi on äärellinen joukko täsmällisiä, suoritettavissa • • Esimerkiksi viitenumeron tarkisteen laskeminen: Viitenumerossa on aina tarkiste. Se lasketaan seuraavasti: olevia ohjeita, jotka ohjaavat päättyvää tehtävän suoritusta. " – Perusviitetiedoksi valitun luvun (esim. asiakas- tai laskunumeron) numerot kerrotaan oikealta vasemmalle painoilla 7, 3, 1, 7, 3, 1 …. – Tulot lasketaan yhteen, ja summa vähennetään seuraavasta täydestä kymmenestä. Erotus on tarkiste, joka merkitään viitenumeron viimeiseksi numeroksi. Jos erotus on 10, tarkiste on 0. (http: //www. pankkiyhdistys. fi/sisalto/upload/pdf/viitenumero. pdf) • Jokainen metodi toteuttaa jonkin algoritmin. Algoritmin ei tarvitse olla "monimutkainen". • Algoritmi voidaan kirjoittaa suunnitteluvaiheessa pseudokoodina, joka on yhdistelmä Java-lauseita ja suomea. • Algoritmi voidaan kuvata myös UML-toimintokaaviona. 30

Metodin osittaminen • Metodin tulee olla suhteellisen lyhyt looginen kokonaisuus. Näin koodi säilyy helpompana

Metodin osittaminen • Metodin tulee olla suhteellisen lyhyt looginen kokonaisuus. Näin koodi säilyy helpompana lukea. • Pitkä metodi tulee pilkkoa useaan pienempään metodiin. • public-tyyppinen metodi voi kutsua private-tyyppisiä (apu)metodeja toiminnon suorittamiseksi. • Apumetodit voivat käyttää edelleen toisia apumetodeja. 31

Metodin osittaminen • Tarkastellaan esimerkkinä kirjan Laskutus-ohjelman Viitenumero-luokan metodia hae. Viitenumero. • Metodi toteutus

Metodin osittaminen • Tarkastellaan esimerkkinä kirjan Laskutus-ohjelman Viitenumero-luokan metodia hae. Viitenumero. • Metodi toteutus sisältää seuraavat toiminnot: 1. viimeisimmän käytetyn viitenumeron perusviitteen hakeminen tiedostosta 2. haetun arvon kasvattaminen yhdellä 3. kasvatetun perusviitteen kirjoittaminen takaisin tiedostoon 4. tarkisteen laskeminen perusviitteelle 5. perusviitteen ja tarkisteen yhdistäminen 6. tuloksen palauttaminen 32

Metodin osittaminen • Kokonaisuudessaan seuraavan käyttämättömän viitenumeron muodostaminen on liian laaja toimenpide suoritettavaksi yhdessä

Metodin osittaminen • Kokonaisuudessaan seuraavan käyttämättömän viitenumeron muodostaminen on liian laaja toimenpide suoritettavaksi yhdessä metodissa. Etsitään sopiva tapa jakaa ratkaisu osiin: – toteutetaan viimeisimmän käytetyn perusviitteen hakeminen suojatussa viimeinen. Kaytetty. Viitenumero-metodissa. – toteutetaan perusviitteen päivitys tiedostoon Tiedosto. Tyokalut-luokan metodin kirjoita-avulla. – Toteutetaan tarkisteen laskenta suojatussa laske. Tarkistemetodissa. 33

Metodin osittaminen • Katso Viitenumero. java (sivu 78) • UML-luokkakaaviossa attribuutin ja metodin näkyvyyden

Metodin osittaminen • Katso Viitenumero. java (sivu 78) • UML-luokkakaaviossa attribuutin ja metodin näkyvyyden kuvaamisessa käytetään "+"- ja "-"-merkkejä. • Julkisia komponentteja merkitään "+"-merkillä. • Suojattuja komponentteja merkitään "-"-merkillä. • Luokkakohtaisten komponenttien nimet esitetään alleviivattuina. 34

Laskutus-ohjelma: UML-luokkakaavio 35

Laskutus-ohjelma: UML-luokkakaavio 35

Kertaus: Olion välittäminen parametrina • Javassa parametrit välitetään aina arvoparametreina. • Todellisena parametrina annettu

Kertaus: Olion välittäminen parametrina • Javassa parametrit välitetään aina arvoparametreina. • Todellisena parametrina annettu (muuttujan) arvo kopioidaan metodille määritellyn paikallisen parametrimuuttujan alkuarvoksi. • Parametrien välityksessä tapahtuu siis sijoittamista. • Kun viittaus olioon välitetään parametrina, viittaavat sekä alkuperäinen viittausmuuttuja, että parametrimuuttuja samaan olioon. 36

Kertaus: Olion välittäminen parametrina • Kun olio välitetään parametrina, näkyy kutsutussa metodissa olion tietosisältöön

Kertaus: Olion välittäminen parametrina • Kun olio välitetään parametrina, näkyy kutsutussa metodissa olion tietosisältöön tehty muutos kutsuneessa metodissa ilman paluuarvon välittämistä. • Alkeistietotyyppisille muuttujille tehdyt muutokset eivät näy kutsuneelle metodille, vaan tällöin on aina käytettävä paluuarvon välittämistä. 37

Metodin kuormittaminen • Metodin kuormittaminen tarkoittaa saman metodinimen käyttämistä useammassa kuin yhdessä metodin määrittelyssä.

Metodin kuormittaminen • Metodin kuormittaminen tarkoittaa saman metodinimen käyttämistä useammassa kuin yhdessä metodin määrittelyssä. • Kuormitetun metodin tapauksessa pelkkä metodin nimi ei riitä kertomaan mitä metodia halutaan kutsua. • Metodin signatuuri tarkoittaa metodin nimen ja parametrien yhdistelmää. • Jokaisen (myös kuormitetun) metodin signatuurin täytyy olla uniikki. • Kääntäjä päättää parametrien perusteella mitä kuormitetun metodin versiota kutsutaan. 38

Metodin kuormittaminen Kutsu kirjoita(”jotain”, ”tiedosto. txt”); ohjautuu ao metodeista, ensimmäiselle, miksi? public static void

Metodin kuormittaminen Kutsu kirjoita(”jotain”, ”tiedosto. txt”); ohjautuu ao metodeista, ensimmäiselle, miksi? public static void kirjoita(String teksti, String tiedosto) {. . . } public static void kirjoita(String. Buffer teksti, String tiedosto) {. . . } 39

Metodin kuormittaminen • Java-APIsta havaitaan, että esimerkiksi String-luokan println-metodi on kuormitettu: println(String s) println(int

Metodin kuormittaminen • Java-APIsta havaitaan, että esimerkiksi String-luokan println-metodi on kuormitettu: println(String s) println(int i) println(double d) jne. • Seuraavilla komennoilla voidaan kutsua näistä kahta eri versiota: System. out. println("Tulostetaan Merkkijono"); System. out. println(summa); 40

Metodin kuormittaminen • Metodin paluuarvo ei kuulu metodin signatuuriin. • Kuormitetut metodit eivät siis

Metodin kuormittaminen • Metodin paluuarvo ei kuulu metodin signatuuriin. • Kuormitetut metodit eivät siis voi erota pelkästään paluuarvon tietotyypin osalta. • Myös konstruktoreja voidaan kuormittaa: – Oletuskonstruktori – Erilaiset parametrilliset konstruktorit 41