T-106.213 Ohjemoinnin peruskurssi L :n tentti Tenftiptiv : 10.12.2004 aatija: Juha Sorva TehtAvd 1 (40 pistetta/o0 Lue seuraavat viittitmdt huoeisesti ja keno ovatko ne totta vai tarua. Anna kussakin kohdassa my6s yhyt seitys/perusteu vastaukseesi. Seityksen toivottu pituus on yksi virke per kohta - tarkoitus ei oe antaa tyhjentiiviia seontekoa kustakin aiheesta vaan dhinnd osoittaa ettd et oe vastannut vain arvaamaa. Jos keksit vditteen todeksi nayteiven esimerkin tai sen taruksi osoittavan vastaesimerkin niin esimerkki riittiid perusteuksi. Kustakin kohdasta saa oikeaa vastauksea viisi pistettai. Jos perusteu puuttuu tai ei oe hyvdksyttiivd jdtivdt pisteet kyseisestd kohdasta saamatta. a Ohjemoija voi miidriteii Java-kietd kiiyttiien itse omia tietotyyppejd (eng. data Ape. b Kun konstruktorie annetaan parametreja pitiis parametriarvot sijoittaa oion kenttien (imentymdmuuttujien eng. fied instance vaiabe arvoiksi. c Jos roimi on kuormitettu (eng. overoaded metodi(nimi niin seuraavat kaksi perdkktiistii koodirivid voivat (ainakin joiain muuttujien arvoia johtaa eri toimi-nimisten metoditoteutusten suorittamiseen this.toimi (Ja e6 bj c; this.toimi (\ila &e dj cj ; d Konstruktorin miidrittey abstraktie uokae voi oa perustetua e Kun tdtii koodinpittkiid yritetitan kayttea se aiheuttaa erddnaisen poikkeusoion (eng. exception syntymisen. String teksti = "kissa" i _ Objec! of io : teksti; + ^ - - r - ^ ^ uga-uf f Okoon ktiytdssii ohjeman kdsitteemiia dataa kuvaava uokka L jonka imentymie hautaan varastoida inkitet$n istaan (eng. inked tisf. Jotta tam6 onnistuisi uokkaan L on isiittdvd tdtd tarkoitusta varten sopiva kenttd (imentymdm u uttuja ; eng. fed in stan ce va i a b e. S Parametrimuuttujat ovat ohjeman rakennetta (uokkakokonaisuutta suunnitetaessa oeeisempia kuin muut paikaiset muuttujat. h Javan graafisissa kiiyttoiittym6kirjastoissakin kiiytetyn tapahtumankiisitteyn (eng. event handing ydinajatus on ett6 aaditaan tapahtumaoioita uovae (tapahtumien tihteenii toimivae uokae aiuokka jossa toteutetaan sopiva tapahtumankuunteijarajapintauokka (esim. ect 1 onli s t ene r. Tehtdvd 2 (20 pistetta/100 Tutustu iitteessd 1 kuvattuun uokkaan Henkio ja vastaa siihen iittyviin osatehtaviin jotka on annettu aa. Kukin osatehtdvd on viiden pisteen arvoinen. Henkiouokan kiiyttiimiid omjnaisuus-uokkaa ei oe tdssi tarkasti kuvattu mutta siitii ei tarvitse tietdit muuta kuin ettii siind on metodi pubic Strins kerronimi tt joka paauttaa ominaisuudenimen. a Luokassa on yksi virhe joka estaa sen jdrkevdn kdytdn. Mistd virheestii on kysymys mitii siitd seuraa ja miten sen voi korjata? (Virhe ei oe teejotaintuntematonta-metodissa. Kirjoita kunkin vastauspaperisi akuun kurssitunnus piiivdys oma nimesi opiskeijanumerosi (sekedsti ja aekirjoituksesi. Eri tehtavie tiissii tehtiviipaperissa uetettuja pistearvoja saatetaan vied muuttaa arvosteun yhteydessii. Tentin arvosanarajat mdiiritetiitn vasta tentin jikeen. Tenttituokset jukaistaan kuukauden sissii tenttipiiivtistii kurssin \ A M/- sivuia ja oman suorituksen arvosteuun voi tutustua eriisessd tiaisuudessa jonka aika ja paikka tuaan mycis imoittamaan kurssisivuia. b Kirjoita Henkito-uokan kerroominai-suus-rtetodin jukinen dokumentaatio. Ts. dokumentoi Henki-ouokan jukinen iitynta mainitun metodin osata. (Jos osaat niin voit kirjoittaa Javadocdokumentaatiokommentin mutta muukin seked esitysmuoto kepaa mainiosti. c Miaisia (Java perus-ap:stakin Oytyvia perusvdineitd apuna kiyttiten henki6uokka voitaisiin toteuttaa k6tevammin tai muuten paremmin kuitenkin muuttamatta uokan jukista iityntiit (eijukista rajapintaa eng. pubic inteiace? Perustee yhyesti. Java AP:n uokkien tai niiden metodien nimid ei oe tarpeen esittiiii. d Metodi reejoraintunrematonta hoitaa hommansa iteratiivisesti. Laadi metoditoteutus joka hoitaa saman tehtdvdn rekursiivisesti. Nimeit metoditoteutuksesi niin ettd antamasi nimi kuvaa paremmin metodin tehtivdd.
Tehtivi 3 (28 pistetti/00 Kuvattakoon eriaisia tavaroita uokan Tavara ja sen aiuokkien avua. Tavara-uokka ja pari esimerkkiti sie aadittavista aiuokista on oeeisita ositaan kuvattu iitteessd 2. Oetettakoon ettit aiuokkia on oemassa pajon muitakin kuin iitteessei mainitut vaatekappae ja Kir j a. Samaisessa iitteessd on my6s pari esimerkkid tavaroihin iitt /isfti toiminnoista (metodit maaritaku j etushinta maaritateki j anni.rni jotka on toteutettu tavaroia kuvaavien uokkien ukopuoee. Oetettakoon jdeen etta my6s vastaavia eriaisia tavaroihin kohdistettavia toimintoja on oemassa pajon muitakin kuin iitteessd esitetyt. a Metodeissa maa ri t aku j e tushinta ja maari tateki j annimi esiintyy moemmissa rakenne (i f -e1seif-ese- joka kdy fpi kaikkieriaiset tavaratyypi ja toimiitietya hvaa parametrinsa tavaratyypisti riippuen (muistutus: Javan instanceof-operaattori sevittdd onko oio tiettyii tyyppie vai ei. Kirjoita tavaroita kuvaavista uokista (Tavara Vaatekappae Kirja uusitut versiot sien ettd tavaraoiot osaavat ise huoehtia kujetushinnan ja tekijiin nimen mddrittdmisestd ja tarjoavat tdh:in jukiset metodit eikd kaikkien eri vaihtoehtojen dpikouamiseen if- (tai switch-auseea siis oe tarvetta. (16p b Liitteen ohjemakoodissa toteutettiin tavaroihin iiftyvat toiminnot tavaroita kuvaavien uokkien ukopuoee. Tdmdn tehtdvdn a-kohdassa taas toiminnot toteutettiin ko. uokkiin itseensd. Kumpi nitistii menetteytavoista on enemmen "oio-ohjemoinnin hengen mukainen" ei noudattaa dhemmin oio-ohjemoinnin pditperiaatteita? Perustee yhyesti. (4p Oetetaan ettd ohjeman eri uokkien toteutuksista on vastuussa eri ohjemoijia. Kukin ohjemoija tuntee toisten ohjemoijien aatimista uokista vain niiden jukisen iitynniin (eijukisen rajapinnan eng. pubic interface. c Ajateaan tiannetta jossa ohjemaan hautaan isdt6 uusi tavaratyyppi (uusi Tavara-uokan aiuokka. Vertaa iitteen ohjemakoodin dhestymistapaa ja itse a-kohdassa aadiftua versiota sen suhteen kuinka kiiteviiii tai vaivaoista tiiaisen isdyksen tekeminen on. Perustee vditteesi yhyesti. (4p d Ajateaan tiannetta jossa ohjemaan hautaan isiigi uusi tavaroihin iittyvii toiminto. Vertaa iitteen ohjemakoodin dhestymistapaa ja itse a-kohdassa aadiftua versiota sen suhteen kuinka ktitevdd tai vaivaoista tdaisen isiiyksen tekeminen on. Perustee viitteesi yhyesti. (4p Tehtivd 4 (12 pistettd00 Liitteessti 3 on esitetty tdmiin syksyn uentomateriaaia koskevaa kritiikkia (hieman akuperdisestd muokattuna jonka joku opiskeija dhetti kurssin anonyymin pikapaauteomakkeen kautta. Liitteestii 6ytyvat myds ne uentomateriaain sivut joita kritiikki koskee. Ovatko kirjoittajan esittiimdt faktat kunnossa? Osuuko kritiikki ndhdiiksesi oikeaan (ei onko esimerkissd jotain arveuttavaa vai onko se vddrdssd vai onko totuus jossain sis v6i6? Miksi? Huomaa ettei tarkoitus oe seittitd yeisesti sitii mikii kyseisessd uentomateriaaissa on mieestiisi hyviid tai huonoa vaan ottaa kantaa oheiseen kritiikkiin iittyviin asioihin. Muista kiydd tiyttimdssd kurssikyseyomake kurssisivuia. Kyseyyn vastaamisesta saa 200 harjoitustehtdvipistefts.
Liite 1: Henkiouokka. Liittyy tehtdvidn 2 pubic cass Henkio { pubi-c static fina int OMNASUUKSA ENNTAAN = 1000; private Strj-ng nimi; private Henkio isa; private Ominaisuus [ ] ominaisuudet; nrirzafc int ominaisuuksia; pubic Henkio(String nimi Henki'o isa { this.nimi = nimi; this. isa = isa i 1..r.1. ominaisuus[] ominaisuudet: new OminaisuusHenkio.OMNASUUKSA ENNTAAN]; thj-s.ominaisuuksia : 0; pubic Henkio (String nimi { F L ^ / ^ i * - 1 1 \. urj \rrrllrt rrurr / r'ht i e qf-i no kerronimi O { P u v! r u v u! 4 r ^ > t v + + return this.nimi; nrrh i c -roopan i-saaominaisuus (Ominaisuus uusiorninaisuus { if fhis nminaisuuksia < this'ominaisuudet.ength { this.ominaisuudet this.ominaisuuksa] = uusiomnaisuus; ths. omi-nai-suuksia++ ; return cruei ese return fase; ] nrf t i e r^'rmi na i qurrs ysvf f v kerroorninaisuus (String ominaisuudennimi { for (int indeksi = 0; indeksi < this.ominaisuuksia; indeksi++1 i Ominaisuus tutkittava = this. ominaisuudet indeksi ] ; if (tutkittava. kerronirni (.equas (ominai-suudennim return tutkittava return nu1; j pubic Henkio teejotaintuntematontao { Henki.o henkio = this; whie (henkio.isa!: nu { henkio = henkifo'isa; ] return henkifo;
Liite 2: Ohjemakoodia. Liittyy tehtavidn 3. Luokat kuvattu vain tehtdvanannon kannannata oeeisin osin Tavaroita kuvaavat uokat: nrrh i c abst-ract cass Tavara { // otain kaikkien tavaroiden yhteisid piirteit:i... pubic cass Vaatekappae extends Tavara { pubic String kerrokoko ( { return this. koko; pubic String kerromerkkinj-ni O { return this.merkkini-mi; jne. muita vaatteie ominaisia pirteitii pubic cfass Kirja extends Tavara { pubic Kirjaiija kerrokirjaiija O { return this.tekija; pubic String kerronimi O { return this. nimi; jne. muita kirjoie ominaisia piirteitii Tavaroihin iitt /ia toimintoja (muita metodeita joista kdsin tavarauokkia kiiytet5iin. pub-ic cass JokuMuuuokka { t t nrr-r' y u a r u ie Srrino v r! a r r Y maeritakrr' iptrrshinta (Tavara tavara { if (tavara instanceof Vaatekappae return 5; efse if (tavara instanceof Kirja return 3; o i qc / /.. jne. miariteiiiin kujetushinta muife tavarakategorioij 1e // samaan tyyiin ^"r.' i ^ n rec \7i arjokuuokka { t / /* Maarittaa tavaran tekijin nimen: se mitd "tekija1a" tarkoitetaan riippuu * tavararyypista: vaatteife niiden vamistaja kirjoie kirjaiija jne. */ pubic String maaritatekijannimi(tavara tavara { if (tavara instanceof Vaatekappae return ( (Vaatekappafe tavara. kerromerkkinimi O ; ese if (tavara instanceof Kirja return ( ((irja tavara.kerrokirjaiija O.kerroNimi O ; e- se //.. jne. ki1site;i;in muut tavarakategoriat samaan tyyiin
Liite 3: Luentomateriaaia ja sen kritiikkii. Liittyy tehtdvddn 4. Aa oeva uentoesime*issii kdyteteiiin rajapintauokkaa jonka ohjemakoodi on seuraava: nrr-r' i e i nterf ace arf r i rrzo nai nor --^--^!+^+r-\ vc!!allovo/ ^hi^ -k-+?.^f Faao:n nntcnmni(rrin/\/or.:irrtcnrr-^- puof f dd:;ltdlu uvursarr vrrrrvrr.prr\urrr\vc!lqrru^sryuc1 c { ' "Mieestdni uvussa 18 (Rajapintauokaf on pieni epdoogisuus. Otsikoa R aj a pin ta uoka n tote utta min en miiiriteiiiin Lamma s-uokkaan ja opi s ke i j a-uokkaan toteutukset onr sompikuin-metodie; sindnsd hyvd homma koska uokkien oisi toteutettava rajapintauokka Ve rta i- ukepoinen joka vaatii moisen. Seuraavaksi kuitenkin sovitaan (!! ettri ampaita vertaiaan vain ampaisiin ja opiskeijoita vain opiskeijoihin (!!! ja vapautuneesti tyyppimuunneaan Ve rta i iuke po inen-parametriarvo aina vastaavasti sopimuksen mukaan samaksi uokaksi kuin mink6 toteutusta oaan kiiyttiimtissii ja vertaiaan yksityisi i kenttid. Kaikki toimii kun vertaiaan ampaia ampaisiin ja opiskeijoita opiskeijoihin." pubic cacc LanDaa iry1enants-vetai.ukepoinan { : t'' priwata doube paino; pub1ic booean onaoqikuin(ve:taiukepoi'nea v rrattava La.@a8 toinenjanoas s (LaDsasverrattavai return thapaino toinenanuas.pai:o; ' opskeijota toien opjkeijoihn f ne. Tyyppmuunnos on vodaan vtata "No mutta. Mennddnpd seuraavae kavoe jossa esitetritin yeinen suurimman akion etsimismetodi jossa sitten saadaan parametrina tauukko vertaiukepoisia ja haetaan niistd suurinta simukaa joka kutsuu jokaisee tauukon oioe on s ompikuin-metodia paramerinaan suurin dydetty oio. Mutta opi-s kej-i j a-uokan metodihan tyyppim uunsi parametriarvon opiskeijaksi ampaan metodi ampaaksi. Edeti otiin sovittu ettei vertaia ristiin. Ei kai se ettd sekd Lanmas etta opiskei ja toteuttavat Ve rta i -uke po inen-rajapinnan takaa sitii ettd niitti voitaisiin tyyppimuuntaa ristiin? Kiisittedkseni tassd yeisessd toteutuksessa nyt nimenomaan on kyse siitii etti ksla moemmat - toteuttavat raiapintauokan v"u.;9tgqficf"epgs**$* tt{ Tsst versossa parametrin tyyppind on Vertaiukcpoinen. Sis parametrksi vo antaa tauukosen mtf tahansa vertai-1r:kepoinen'rajapintauokan toteuttava oota. Ei mitf tahansa oota iotka on vetr-ukeponen' rajapntauokan avua motefru keekenen vertaukepoisiks. Nyt odsoee ikrin. metodin kutsumnen metodin toteutuksessa onnistuu ongemtta s kaka parametrtauukon oioia taatust on kysenen motodi pubic rttic vettiutepoin n ot8isurria(verai'ujc.ttoioeo[ oiot ( '. '.. '.. '.... Vutaiucepoinsn cuurin = 0; for (int indohai F 1i ind jtti ( oiot.bagth; inddcsi++ ( r.ttm if (oiotindekait.oncocpikuin{8uu!in { guurin = oiottindekei ; auurin; sovitaan verrata keskenddn."