Asiakas-palvelin sovellukset ja käyttöliittymät Tentti 8.5.2001



    Arvostelussa kiinnitetään eniten huomiota ratkaisun ideoihin, syntaksiin liittyvien yksityiskohtien merkitys on paljon vähäisempi joskaan ei merkityksetön. Kaikista tehtävistä saa 0 - 6 pistettä. Tentin läpäisemiseksi pitää saada puolet pisteistä.

  1. a) Mitä tarkoittaa Model-View-Controller GUI-komponenttien yhteydessä? Miten se esiintyy Javan (AWT & Swing) GUI-komponenteissa? Entä Java-pohjaisissa GUI-sovelluksissa?
    b) Miten toteuttaa luokka, joka toimii samanaikasesti sekä GUI-sovelluksena että aplettina? Mitä ongelmia tilanteeseen liittyy, miten ratkaista ne?

  2. Mikä on tapahtumankäsittelijä? Miten se toimii Javan yhteydessä? Mitä sellaisen toteuttaminen Javan yhteydessä tarkoittaa? Pohdi erityisesti erilaisia tapoja toteuttaa tapahtumankäsittelijä - mitä etuja ja haittoja niihin liittyy?

  3. Tee GUI-sovellus, joka ensin lukee tiedostosta ensimmäiseltä riviltä kaksi blankolla toisistaan eroitettua lukua: lkm ja pos. Seuraavalla tiedoston rivillä on kysymys. Sitä seuraavilla lkm rivillä on yksi vastausvaihtoehto kussakin. Luku pos (1 <= x,y <= lkm) kertoo oikean vastauksen kohdan.
    GUI-sovelluksesi tulee esittää kysymys piirtoalueen yläreunassa, vastausvaihtoehdot radionappuloilla keskellä ja alas pitää varata mahdollisuus esittää tiedoitus siitä, valitsiko käyttäjä oikean vastauksen kysymykseen. Käyttäjä saa vain yhden valinnan: jonka jälkeen oikeellisuus pitää ilmoittaa ja estää uusien valintojen teko.
    Tee edellä kuvattu ohjelma.

  4. Toteuta tuottaja-kuluttaja tilanteen mukainen ohjelma, jossa tuottajasäe tuottaa yhden kerrallaan satunnaisia luokan Piste alkiota, joita kuluttajasäie kuluttaa sitä mukaa kuin niitä tulee. Tuottaja tuottaa uuden vasta, kun edellinen on kulutettu. Rajoitetaan satunnaisuutta niin, että tuotettaville pisteille on voimassa 0 <= x,y <= 10. Sovitaan, että kuluttaminen tarkoittaa tässä yhteydessä pisteen koordinaattiarvojen tulostamista. Kun kuluttajasäie saa pisteen (0,0) sen tulee aiheuttaa tuottajasäikeen ja itsensä suorituksen loppuminen kuitenkaan lopettamatta taustalla olevaa sovellusta.
    Kirjoita luokka tuottaja- ja kuluttajasäikeitä varten sekä hallitse niiden välinen tiedonsiirto.

    public class Piste {
    private int x;
    private int y;
    public Piste(int a, int b) { x = a; y = b}
    public int getX() { return x; }
    public int getY() { return y; }
    public String toString() {
    return "(" + x + "," + y + ")";
    }
    } // class Piste