------------------------------------------------------------------------- Johdatus Ohjelmointiin S 1998 27.10.98, tehtävä 1 / Averell ------------------------------------------------------------------------- 1) Selitä tarkasti a) o miten int-arvo välitetään parametrina ------------------------------------------ - Metodin kutsussa esiintyvän todellisen parametrin arvo lasketaan kutsun yhteydessä ja kopioidaan metodin määritellyssä esitellyn muodollisen parametrin alkuarvoksi. - Metodissa parametriin tehty muutos kohdistuu suoraan muodolliseen parametriin ==> todellinen parametri ei koskaan muutu. Int-parametrilla voidaan välittää tietoa vain metodiin päin, ei metodista kutsujalle. - Kutsussa voi todellisena parametrina olla muuttuja, lauseke, vakio (ts. mikä tahansa kokonaislukuarvo, joka voidaan laskea) b) o miten String-arvo välitetään parametrina --------------------------------------------- - Metodin kutsuvaiheessa kopioidaan muodollisen parametrin paikalle viite todelliseen parametriin. Viite on itseasiassa todellisen parametrin sijaintipaikka, sille varatun alueen muistiosoite. - Jos metodi yrittää muuttaa muodollisen String-parametrin arvoa, syntyy uusi olio, eikä todellisen parametrin arvo muutu. String-oliot ovat siis aina tyypiltään 'read-only', jokainen muutosyritys luo uuden olion. - Todellisena parametrina voi olla muuttujan tunnus, vakiomerkkijono (esim. "puppu") tai String-lauseke (esim. a + "aha") c) o metodin muuttujan elinkaari -------------------------------- - Metodin muuttujia ovat metodin otsikossa esitellyt muodolliset parametrit ja metodin lauselohkossa ja sisemmissä lohkoissa esitellyt paikalliset muuttujat. - Metodin muuttujat luodaan vasta silloin, kun metodia kutsutaan. Metodin lauselohkoissa esitellyt muuttujat luodaan, kun ko. lohko tulee suoritettavaksi. - Metodin parametreilla on kutsussa asetettu alkuarvot, kun taas muille metodin muuttujille on eksplisiittisesti sijoitettava alkuarvo. - Metodin muuttuja vapautetaan, kun ohjelman suoritus poistuu siitä lohkosta, jossa muuttuja on esitelty. Parametrit vapautetaan, kun metodista poistutaan. d) o kuormitetut konstruktorit ------------------------------ - Konstruktorin tarkoitus on luoda olio, ts. olion tarvitsemat tilanvaraukset (=muuttujat) sekä antaa alkuarvo olion sisäisille muuttujille. - Kuormittaminen tarkoittaa sitä, että luokassa on kaksi tai usempia samannimisiä metodeja, jotka eroavat toisistaan nimenomaan parametrien tyypin tai määrän suhteen. e) o toString()-metodi ---------------------- - toString metodi palauttaa arvonaan merkkijonon (String), joka on muodostettu sopivalla tavalla metodin tietorakenteiden arvoista. - Kun olion nimi esiintyy sellaisenaan paikassa, johon syntaksin mukaan pitäisi tulla merkkijono, kutsutaan toString()-metodia, joka palauttaa olion merkkijonoesityksen. Arvostelusta: ============= Kokeen laatija oli kaukaa viisaasti tehnyt 5 kysymystä, ja päättänyt laittaa tyrkylle 6 pistettä, lisäksi kysymys oli höystetty painavalla sanalal "tarkasti". Siispä Kohdat a) ja b) yhteensä 2 1/2 pistettä, kohta d) 1 1/2 pistettä ja kohdat c) ja e) 1 piste. Ihan täysiä pisteitä vain muutamalle ja vastaavasti vain muutama nollille. Keskiarvoksi tuli noin 4 pistettä. Arvosteltaessa vaadin yllämainitut pääkohdat, paitsi c)-osassa riitti, kun selitti milloin luodaan ja milloin vapautetaan (huolimatta siitä, että pyydettiin selittämään tarkasti...). Tavallisimmat virheet: - a) ja b): selitettiin vain, että välitetään arvo tai viite - d) ei selitetty mikä on konstruktori - e) väitettiin, että toString() tulostaa jotain, ei selitetty kuinka sitä käytetään -------------------------------------------------------------------------