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



  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 TCP-pohjainen sokettiyhteys luodaan? Mitä huomionarvoisia seikkoja palvelinpuolen toteukseen liittyy?

  2. Mikä on tapahtumakäsittelijä? Entä tapahtuma? Miten tapahtumankäsittely toimii Javan yhteydessä? Mitä tapahtumankäsittelijöiden toteuttaminen Javan yhteydessä tarkoittaa? Pohdi erityisesti erilaisia tapoja toteuttaa tapahtumankäsittelijä - mitä etuja ja haittoja niihin liittyy?

  3. Tee GUI-sovellus, joka koostuu neljästä komponentista. Ylhäällä on tekstikenttä, alhaalla leima "Oma sovellus" ja keskellä on rinnakkain kaksi nappulaa, joissa tekstit "Hei" ja "Moi". Liitä tekstikenttään toiminnallisuus, jossa returnin painaminen aiheuttaa tekstikentän sisällön tulostumisen kuvaruudulle (siihen ikkunaan, josta sovellus käynnistettiin). Tee nappuloiden kohdalla samoin, mutta tulosta nyt nappuloiden tekstisisältö. Lopeta sovellus ikkunan sulkemisen myötä. Tee edellä kuvattu ohjelma.

  4. Toteuta tuottaja-kuluttaja tilanteen mukainen ohjelma, jossa tuottajasäie tuottaa yhden kerrallaan satunnaisia luokan Piste alkioita, 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 luoka tuottaja- ja kuluttajasäikeitä varten sekä hallitse niiden välinen tiedonsiirto.

    public class Piste {
    private int x;
    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