Helsingin yliopisto / Tietojenkäsittelytieteen laitos / Ohjelmointitekniikka (Java)

582309 Ohjelmointitekniikka (Java), kurssikoe 28.2.2008/AW

Kirjoita jokaisen vastauspaperisi alkuun kurssin nimi ja kokeen päivämäärä sekä nimesi, henkilötunnuksesi ja myös allekirjoituksesi. Kokeessa saa olla mukana A4-kokoinen "lunttilappu".

Muista kokeen jälkeen vastata kurssikyselyyn! Linkki kyselyyn löytyy laitoksen opiskelusivulta ja myös kurssin omalta sivulta!

  1. Poikkeukset:
    1. Selitä luokkien Throwable, Error, Exception ja RuntimeException luokkahierarkia. Mihin nämä eri luokat on tarkoitettu? Selitä tarkistettujen (checked) ja tarkistamattomien (unchecked) poikkeusten ero ohjelmoinnissa. Miten ne sijoittuvat poikkeusten luokkahierarkiaan.
    2. Milloin on syytä heittää tarkistettu, milloin tarkistamaton poikkeus? Miksi? Minkä poikkeusluokkien aliluokkina omat poikkeusluokat on syytä toteuttaa?
                                                                        (6 pistettä)
    
  2. Kokoelmat ja geneerisyys:
    1. Collections Framework -kirjasto jakautuu kahteen tietorakenteiden päätyyppiin. Mitkä ne ovat? Mitkä ovat näiden tyyppien oleelliset erot? Missä suhteissa ne ovat samanlaisia?
    2. Kokoelmien joukossa on koko joukko rajapintaluokkia toteuttavia abstrakteja luokkia. Selitä näiden luokkien olemassaolon tarkoitus.
    3. Tarkastellaan luokkaa Pair:
      [Huom: Tässä kohdassa koepaperissa oli virhe. Luokan Pair otsikossa ei näkynyt tyyppiparametria <T>, koska olin kirjoittanut väkkyrät sellaisinaan ja ilmauksesta tulikin "html-tägi", joka ei sivulla näkynyt. Tällaista on "atk"... ;-)]
        class Pair <T> {
          public T first;
          public T second;
          public Pair (T f, T s) { first = f; second = s; }
          public Pair () { first = null; second = null; }
        }
      
      Onko luokka Pair <String> luokan Pair <Object> aliluokka? Jos on, miksi? Ellei ole, miksei? Onko taulukko tyyppiä String [ ] myös tyyppiä Object [ ]? Jos on, miksi? Ellei ole, miksei? Onko taulukko tyyppiä Pair <String> [ ] myös tyyppiä Pair <Object> [ ]? Jos on, miksi? Ellei ole, miksei?
                                                                        (12 pistettä)
    
  3. Säikeet ja GUI:
    1. Millä erilaisilla tavoilla säikeen voi luoda? Miksi yleensäkään tarvitaan rajapintaluokkaa Runnable? Miksei pelkkä Thread-luokka riitä?
    2. 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.
    3. Selitä mitä ovat event dispatch thread ja worker thread.
                                                                        (12 pistettä)
    

Muista siis kokeen jälkeen vastata kurssikyselyyn! Linkki kyselyyn löytyy laitoksen opiskelusivulta ja myös kurssin omalta sivulta!