Ohjelmointitekniikka (Java), kurssikoe 26.3.2004 Tehtävien 1, 2 ja 4 arvosteluperusteet / Olli Lahti 1. Seuraavassa esitetyt pääkohdat oli mainittava muodossa tai toisessa == täysiin pisteisiin. Vähäiset sivuseikkavirheet sallittiin pisteitä vähentämättä. a) [kuten harjoituksissa 1] Samassa try-catch-lauseessa olevista sopivista catch-lohkoista suoritetaan ensimmäinen tyyppi-ilmaukseltaan täsmäävä. 1 p. Vähintään yksi esimerkki, josta ilmenee myös sanallisesti: 1 p. Käytännössä suoritettavaksi pääsee poikkeusolion tyyppiä poikkeus- luokkahierarkiassa tarkimmin vastaava käsittelijä, jonka tulee olla samalla ensimmäinen sopiva catch-lohko. Syy: koska aina valitaan ensimmäinen täsmäävä, olisi vaikkapa yhdessä catch (IOException e) {} catch (FileNotFoundException e) {} jälkimmäinen näistä saavuttamaton lohko, joita kääntäjät eivät saa hyväksyä. Vastauksessa ainakin yhden esimerkin on siis syytä olla kunnollinen ja kääntäjän kelpuuttama. b) Ellei poikkeuksen tyyppi ei ole yhteensopiva minkään catch-ilmauksen tyypin kanssa, metodi heittää poikkeuksen edelleen (ja edelleen jne.) kutsujalleen, johon suoritus myös heti palaa (finally'n jälkeen). 1 p. Checked-poikkeukset tulee joko siepata tai heittää julistetusti edelleen (throws otsikossa), muutoin kyseessä on virhe käännösaikana. Unchecked-poikkeuksia ei ole välttämätöntä käsitellä, mutta säikeen suoritus päättyy, jos unchecked-poikkeus jää kokonaan käsittelemättä. 1 p. c) mallirunko 2 pisteen vastaukseksi: Väittämälauseet ovat ohjelman sisäisiä totuusarvoisia tarkistuksia, joiden avulla ohjelmoija ilmaisee tekemänsä oletukset ohjelman tilasta ja suorituksen etenemisestä väittämälauseen sijaintikohdassa. Epätodeksi osoittautuva väittämälause keskeyttää suorituksen juuri siinä kohdassa, jossa toimintalogiikan virhe ilmenee. (Väittämälauseiden käyttäminen tuo toteutusvaiheen lisäturvallisuutta korkean tason abstraktioihin automatisoidulla tavalla.) Väittämälauseet ovat kytkettävissä pois lopullisesta versiosta kokonaan tai osittain. Väittämän meneminen epätodeksi osoittaa ohjelmointivirheen, josta ei pidäkään toipua ajonaikana vaan keskeyttää suoritus. Poikkeusmekanismi taas tähtää suoritusympäristön ominaisuuksien vaihtelun tms. vakaaseen sietämiseen sekä virhetilanteiden kommunikointiin ohjelman osien välillä. Käyttötapoja: esi- ja jälkiehdot jne. 2. == MouseListener *implements* - 5 metodia, kaikki toteutettava edes tyhjinä (luonnehdinta 1 p. metodivalikoimasta riittää "sinne päin"; metodit ovat nimeltään mouseClicked, mouseEntered, mouseExited, mousePressed ja mouseReleased) - implements MouseListener --> kelvollinen olio hiiritapahtumien 1 p. kuuntelijaksi MouseAdapter *extends* vertailu MouseListeneriin: - tyhjät metodit valmiina 1 p. - *korvataan* vain sovellukselle tarpeellisia tapahtumia vastaavat metodit (so. niiden mitääntekemättömät toteutukset) 1 p. - eri aliluokkatekniikat, koska moniperintä ei ole mahdollinen 1 p. [http://www.cs.helsinki.fi/u/wikla/OTJ/Sisalto/EventtiTapoja/] * yksi riitti esittää Muita puutteita paikkaamaan sai max. 1 pisteen kertomalla jonkin verran yleistasoisia lisätietoja käytännön ohjelmoinnin näkökulmasta, esimerkiksi adapteriolioiden tarkemmasta sovelluskäytöstä. 4. == a) olioperustainen tietorakenne*kehys* 1 p. muutama virke lisäluonnehdintaa 1 p. - yhdenmukainen, abstrahoitu, toteutukseltaan vaihdettavissa oleva käyttö; valmista (kirjasto)toteutustakin, ... b) Rajapintaluokat ovat kokoelmatietorakenteiden käytön ja 1 p. hallinnoinnin perusta: yleistasoinen ja yhtenäinen tyypitys (so. metodiotsikot) käsittelyä varten. --> Operaatioiden valmiiksitäydentäminen, tietyn toteutuksen optimointi tietyllä tavalla tms. (Plussaa iteraattorin maininnasta.) vähintään kaksi valaisevaa esimerkkiä 1 p. - tai varsin seikkaperäinen vastaus niukemmin esimerkein c) Luokkaryhmittely: Collection Map 1/2 p. / Set Collection: järjestämätön monijoukko, rajapintahierarkian 1/2 p. juuri -- mutta ei Mapin Set: järjestämätön joukko; ei duplikaatteja 1/2 p. Map: assosiaatiorakenne {avain, arvo} 1/2 p. - oma hierarkiansa, mutta käytettävissä joukkoluonteiset näkymät