Skip to content

Viikon 4 kotitehtavat

Matti Luukkainen edited this page Nov 16, 2015 · 4 revisions

Tehtävä 1 liittyvät luokkakaavioihin. Tehtävät 3 ja 5 liittyvät sekvenssikaavioihin, eli luennon 3 kalvoihin 36-56 ja luennon 4 kalvoihin 15-24. Tehtävä 4 liittyy käsiteanalyysiin eli luennon 3 kalvoihin 12-35.

HUOM paikanpäällä tehtävien tehtävien takia on tärkeää että luet viikon 4 kalvoista sivut 26-50 ja 55-60 ennen kun tulet laskareihin!

1

Takaisinmallinna seuraava koodi luokkakaaviona:

public class Paaohjelma {
    public static void main(String[] args) {
        Kurssi otm = new Kurssi();
        Opiskelija o1 = new Opiskelija("Arto", 45);
        Opiskelija o2 = new Opiskelija("Matti", 27);
        Opiskelija o3 = new Opiskelija("Maija", 55);

        otm.lisaaOpiskelija(o1);
        otm.lisaaOpiskelija(o2);
        otm.lisaaOpiskelija(o3);

        otm.arvosteleOpiskelijat();
        otm.tulostaKurssinTulokset(); 
    }
}

public class ArvosanaLaskin {
    public int selvitaArvosana(int pisteet) {
        if ( pisteet<30 )      return 0;
        else if ( pisteet<35 ) return 1;
        else if ( pisteet<40 ) return 2;
        else if ( pisteet<45 ) return 3;
        else if ( pisteet<50 ) return 4;
            
        return 5;
    }
}

public class Kurssi {
    private ArrayList<Opiskelija> opiskelijat;
    private ArvosanaLaskin arvosanaLaskin;

    public Kurssi(){
        opiskelijat = new ArrayList<Opiskelija>();
        arvosanaLaskin = new ArvosanaLaskin();
    }

    public void lisaaOpiskelija(Opiskelija opisk){
        opiskelijat.add(opisk);
    }

    public void arvosteleOpiskelijat(){
        for ( Opiskelija opisk : opiskelijat ) {
            int pisteet = opisk.getPisteet();
            int arvosana = arvosanaLaskin.selvitaArvosana( pisteet );
            opisk.setArvosana(arvosana);
        }
    }

    public void tulostaKurssinTulokset(){
        for ( Opiskelija opisk : opiskelijat )
            opisk.tulostaTiedot();
    }
}

public class Opiskelija {
    private String nimi;
    private int pisteet;
    private int arvosana;

    public Opiskelija(String nimi, int pisteet) {
        this.nimi = nimi;
        this.pisteet = pisteet;
    }

    public int getPisteet(){
        return pisteet;
    }

    public void setArvosana(int arvosana){
        this.arvosana = arvosana;
    }

    public void tulostaTiedot(){
        System.out.println( nimi+" "+arvosana );
    }
}

2

Piirrä edellisen tehtävän koodia vastaava oliokaavio rivin otm.lisaaOpiskelija(o2); jälkeisestä tilanteesta.

3

Takaisinmallinna tehtävän 1 koodi sekvenssikaaviona. Sekvenssikaavio piirretään tilanteesta, jossa kutsutaan luokan Paaohjelma main-metodia.

4

Toisissa laskareissa oli tehtävänä laatia käyttötapausmalli Ohjelmistotuotantoprojektin hallinnointia tukevaan järjestelmään.

Tee järjestelmää vastaava määrittelyvaiheen luokkakaavio.

Etene samaan tapaan kuin luennon elokuvateatteri- ja kampaamoesimerkeissä, eli etsi ensin luokkakandidaatit keräämällä viikon 2 laskareissa olevassa tehtäväkuvauksessa esiintyvät substantiivit. Karsi sen jälkeen ylimääräiset luokkakandidaatit, eli attribuutit, synonyymit, tekemistä tarkoittavat sanat ja asiaan kuulumattomat. Tämän jälkeen mieti minkälaisia yhteyksiä luokkien olioilla on. Lopuksi tarkenna yhteydet osallistumisrajoitteilla sekä nimeä yhteydet ja roolit tarvittaessa.

Huomioi luennon 3 kalvon 31 toteamus:

yleensä ei jakseta kerätä kaikkia substantiiveja vaan tehdään esim. synonyymien ja tekemistä tarkoittavien sanojen karsinta samalla kun "kunnollisten" substantiivien etsintä etenee

Muista keskittyä olioiden välisiin pysyviin yhteyksiin. Älä yritä sisällyttää toiminnallisuutta luokkakaavioon (vrt luennon 3 kalvo 26 ja luennon 4 kalvo 22).

5.

AppsForFinland-kilpailuun pari vuotta sitten osallistuneen STOPPI-sovelluksen toista päätoiminnallisuutta kuvaa seuraava vapaamuotoisena tekstinä kirjoitettu käyttötapaus:

Matkustaja menee pysäkille, jolta haluaa päästä kyytiin tiettyyn bussiin. Matkustaja käynnistää sovelluksen matkapuhelimessaan. Puhelin tunnistaa pysäkin GPS-paikannusjärjestelmän avulla. Puhelin ilmoittaa sijaintinsa HSL:n verkkopalveluun, joka palauttaa puhelimelle listan pysäkille lähiaikoina saapuvista busseista. HSL:n verkkopalvelu siis tietää kaikkien bussien sijainnin, bussien säännöllisesti lähettämien GPS-paikannustietojen perusteella. Matkustaja valitsee puhelimen näytöllä näytetyistä busseista haluamansa ja painaa pysäytyspyyntönappia. HSL:n verkkopalvelu välittää pysäytyspyynnön bussille ja kertoo puhelimen sovellukselle bussin odotetun saapumisajan. Bussin karttapaikannuslaite osaa varottaa bussin kuljettajaa lähestyttäessä pysäkkiä, jolta on tehty pysähtymispyyntö. Näin bussin kuljettaja osaa vähentää nopeutta pysäkkiä lähestyttäessä. Puhelimen sovellus kysyy säännöllisin väliajoin HSL:n verkkopalvelulta bussin sijaintitiedot ja bussin ollessa lähestymässä pysäkkiä, sovellus ilmaisee asian matkustajalle.

Mallinna sekvenssikaaviona sovelluksen eri osapuolten (matkustaja, puhelin, GPS-palvelu, HSL-verkkopalvelu, bussin sovellus, bussin kuljettaja) käymä interaktio.

6.

Tee mahdollisimman kattavat testit viikon 2 tehtävän 5 luokille Matkakortti ja Kioski. Kioskin joudut testaamaan siten, että tutkit että se luo oikeanlaisia matkakortteja.

7.

Testaa myös edelliseen tehtävään liittyvät luokat Lataajalaite ja Lukijalaite.