Helsingin yliopisto / Tietojenkäsittelytieteen laitos / Java-ohjelmointi / Copyright © 2005 Arto Wikla.

582309 Ohjelmointitekniikka (Java), kurssikoe 5.4.2005/AW

Kirjoita jokaisen vastauspaperisi alkuun kurssin nimi ja kokeen päivämäärä sekä nimesi, henkilötunnuksesi ja allekirjoituksesi. Kirjoita kukin vastaus omalle paperilleen.

Huom: Muistakaa että kurssilla on käytössä ns. koeleikkuri; hyväksytyn suorituksen edellytyksenä on riittävän kokonaispistemäärän (30) lisäksi myös vähintään puolet koepisteistä (14). Kannataa siis vastata useampaan tehtävään.

Huom: Kurssin tulokset julkistetaan kurssisivulla ja ilmoitustaululla viimeistään maanantaina 25.4. Palautetilaisuus on tiistaina 3.5. kello 17-18. Paikka ilmoitetaan kurssisivulla.



    1. Selitä seuraavien luokkien perintähierarkia: Error, Exception, RuntimeException, Throwable.
    2. Mitkä poikkeukset ovat checked-poikkeuksia, mitkä taas unchecked-poikkeuksia? Miten ne eroavat toisistaan poikkeusten käsittelemisen kannalta?
    3. Oletetaan, että luokalla KauheaPoikkeus on julkinen parametriton konstruktori ja että kyseessä on checked-tyyppinen poikkeusluokka. Laadi metodi vaarallinen(), joka aiheuttaa KauheaPoikkeus-poikkeuksen käsittelemättä sitä itse.
    4. Laadi metodi toiveikas(), joka kutsuu edellisessä kohdassa laatimaasi metodia vaarallinen() ja jollakin tavoin käsittelee sen mahdollisesti aiheuttaman poikkeuksen. Metodi toiveikas() siis ei aiheuta mitään poikkeusta.
                                                                (6 pistettä)
    
    

    1. Käyttöliittymäelementteihin liitetään tapahtumankuuntelijoita, jotka perinteisesti ohjelmoidaan toteuttamalla jokin tietty rajapintaluokka, esimerkiksi MouseListener. Tapahtumankuuntelijan voi ohjelmoida myös käyttäen sopivaa adapteriluokkaa, esimerkiksi MouseAdapter. Miten adapteriluokkaa käytetään tapahtumankuuntelijan toteuttamisessa ja mitä hyötyä adapteriluokan käyttämisestä voi olla verrattuna rajapintaluokan toteuttamiseen?
    2. Voiko sama olio kuunnella useammantyyppisiä tapahtumia (esimerkiksi tietyn painikkeen painamista ja tietyn valintaruudun valitsemista)? Voiko samantyyppistä tapahtumaa (esimerkiksi tietyn painikkeen painamista) kuunnella useampi olio? Perustele vastauksesi.
    3. Miksi pitkään kestävien asioiden tekeminen tapahtumankuuntelijassa "hyydyttää" käyttöliittymän, toisin sanoen käyttöliittymä ei vaikuta reagoivan esimerkiksi painikkeiden painamiseen?
    4. Oheisen koodin tarkoitus on näyttää ikkuna, jossa on tekstiä. Koodi kääntyy ilman virheitä, mutta suoritettaessa koodi ei tee mitä sen on tarkoitus tehdä. Miksei?
      import javax.swing.*;
      public class Test {
          public static void main(String[] args) {
              JFrame frame = new JFrame("My Demo Frame");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              JLabel label = new JLabel("My Demo Text");
          }
      }
                                                                (7 pistettä)
    
    
    
    

    1. Javan versio 1.5 toi mukanaan paljon uutuuksia, joista geneerisyys kaikkine lisäyksineen (Autoboxing, For-Each, ...) oli merkittävin. Selitä mistä on kysymys ja havainnollista pienin mutta valaisevin ohjelmaesimerkein tätä uutta käännösaikaista tyyppiparametrointia.
    2. Oletetaan että tehtävänäsi olisi laatia ohjelma, joka saa syötteenään joukon sanoja. Syöte voi koostua useista riveistä. Syötteen loputtua ohjelma tulostaa aakkosjärjestyksessä sanat, joita syötteessä esiintyi ja jokaisen sanan perässä esiintymisten lukumäärän. Selosta miten käyttäisit hyväksesi java.util -paketin tarjoamia työkaluja ja Java-kielen uusia ominaisuuksia. Täydellistä ohjelmakoodia ei tarvitse kirjoittaa, oleellista on osata soveltaa edellämainittuja työkaluja ja ominaisuuksia annettuun tehtävään.
                                                                (7 pistettä)
    
    
    
    

  1. Seuraava ohjelmahahmo ("idiomi") on tyypillinen:
      void run () {
        try { 
          while (! interrupted () && hasMoreWork) 
            ... // may block and throw..
        }
        catch (InterruptedException e) ...
          // interrupted during sleep or wait 
          ...
        finally 
          ... // cleanup in any case
      }
    
    Selitä mistä on kysymys ja miksi keskeyttämistä on syytä tutkia kahdella erilaisella tavalla.
                                                                (6 pistettä)
    
    
    

  2. Täytä erilliselle lomakkeelle vakuutus kurssikyselyyn vastaamisesta. Vastausaika päättyy 10.4.2005. Kurssikysely löytyy laitoksen sivulta http://ilmo.cs.helsinki.fi/kurssit/servlet/Valinta. Tämän tehtävän pisteet todellakin saa siis vain jättämällä kyseisen lomakkeen allekirjoitettuna koevastausten mukana. Laitoksella ei ole mitään keinoa tarkastaa kurssikyselyyn vastanneiden henkilöllisyyttä. Ole siis luottamuksen arvoinen! Uudenlaisesta kurssista kaivataan palautetta!
                                                                (2 pistettä)
    
    
    



Onnea kokeeseen & aurinkoista kevättä!