Ohjelmointi I tenttikysymykset 20.3.2000

Arvostelussa kiinnitetään eniten huomiota ratkaisun ideoihin, syntaksiin liittyvien yksityiskohtien merkitys on paljon vähäisempi (joskaan ei merkityksetön). Jos aikapula yllättää ja sinun pitää jättää jotakin kirjoittamatta, pyri siihen, että luokkien määrittelyn kohdalla poisjäävä osa olisi metodien rungot (kirjoita metodeille tuolloin vain otsikot). Kaikista tehtävistä saa 0 -- 6 pistettä.

  1. Selvitä seuraavat olio-ohjelmointiin/Javaan liittyvät asiat lyhyesti muutamalla virkkeellä:
    1. Instanssimuuttuja.
    2. final-määre periytymisen yhteydessä.
    3. Polymorfismi.
    4. Rajapintaluokka.
    5. Ylikuormittaminen.
    6. Sarjallinen olio.
  2. Oletetaan, että ylioppilaskirjoituksissa voi saada vain arvosanoja L (laudatur), E (eximia), M (magna), C (cum laude), B (lubenter) ja A (approbatur). Tee metodi, joka saa kirjaimia L, E, M, C, B ja A sisältävän 1-ulotteisen merkkitaulukon (jotka edustavat yksittäisiä arvosanoja) ja laskee niiden perusteella yleisarvosanan. Kirjaimet voidaan muuttaa numeroiksi L=6, E=5, ..., B=2, A=1, jolloin yleisarvosana on arvosanojen keskiarvo pyöristettynä kohti lähimpää arvosanaa (puolivälin kohdassa pyöristetään ylöspäin; esim. 4.5:tä vastaa E). Toteuta metodi käyttäen monivalintarakennetta.
  3. Kerro, mitä tiedät Javan poikkeuksista. Mitä ne ovat? Mikä niiden rooli on Java-ohjelmoinnin kannalta? Miten ne ilmenevät ohjelmissa?
  4. Määrittele ja toteuta julkinen metodi removeDuplicates luokkaan Luvut, jonka ainoa tietosisältö on kokonaislukutaulukko alkiot (määrittely: private int[] alkiot;). Luokassa Luvut taataan, että taulukko alkiot on aina olemassa (siis se ei ole null) ja sen alkiot ovat nousevassa suuruusjärjestyksessä. Metodin tehtävänä on luoda sellainen uusi arvo instanssimuuttujaan alkiot, että siinä ovat kaikki alkuperäisen taulukon alkiot, mutta tasan kerran, eli peräkkäin esiintyvät mahdolliset duplikaatit on poistettu.
  5. Luokalla Sotu halutaan esittää sosiaaliturvatunnusta. Laillisessa sotussa XXXXXX-YYYZ (tai 1800-luvulla syntyneille XXXXXX+YYYZ tai 2000-luvulla syntyneille XXXXXXAYYYZ) viimeinen numero tai kirjain Z muodostetaan laskemalla luvusta XXXXXXYYY jakojäännös jaettaessa luvulla 31. Jakojäännös 0-9 vastaa numeroa 0-9. Jäännös 10 -> A, loput 11-30 -> B, C, D, E, F, H, J, K, L, M, N, P, R, S, T, U, V, W, X, Y, vastaavasti. Tee luokka Sotu, jolla esitetään laillisia sosiaaliturvatunnuksia. Toteuta luokalle konstruktorit sekä 3-4 erilaista havainnointimetodia. Mitä muita metodeja luokalla Sotu voisi olla?