Skip to content

Viikon 3 kotitehtävät

Lassi Vapaakallio edited this page Aug 3, 2015 · 3 revisions

Viikon 3 laskarit pidetään salissa B221.

Tässä olevat tehtävät tehdään etukäteen. Laskareissa tehdään lisäksi paikanpäällä ryhmissä täällä oleva tehtävä

Tehtävät 1-3 liittyvät olio- ja luokkakaavioihin eli toisen luennon kalvoihin sekä kolmannen luennon kalvoihin 4-15. Tehtävät 4-5 liittyvät liittyvät sekvenssikaavioihin, eli luennon 3 kalvoihin 34-54.

1.

Monopoli ks. esim. http://fi.wikipedia.org/wiki/Monopoli_ on varmasti kaikkien tuntema lautapeli. Tehdään alustava luokkakaavio, joka kuvaa peliä. Kaaviota tarkennetaan ehkä myöhemmin. Tässä vaiheessa kyseessä voisi olla oikeastaan minkä tahansa nopalla pelattavan lautapelin karkean tason luokkakaavio. Oikeassa monopolissahan on rahaa, taloja, hotelleja ym, mutta unohdetaan ne nyt.

Pelin kuvaus siinä tarkkuudessa, mikä meitä nyt kiinnostaa, on seuraavassa:

Monopolia pelataan käyttäen kahta noppaa. Pelaajia on vähintään 2 ja enintään 8. Peliä pelataan pelilaudalla joita on yksi. Pelilauta sisältää 40 ruutua. kukin ruutu tietää, mikä on sitä seuraava ruutu pelilaudalla. Kullakin pelaajalla on yksi pelinappula. Pelinappula sijaitsee aina yhdessä ruudussa. (Pelinappula siis etenee ruudusta toiseen pelin kuluessa.)

Voit olettaa, että luokat ovat pelilauta, ruutu, pelinappula, pelaaja, noppa ja itse kokonaisuutta mallintava monopoliPeli.

Huomaa että isompia luokkamalleja kannattaa tehdä pala kerrallaan. Piirrä ensin vaikkapa kaikki luokat paperille. Mieti yhteyksiä esim. kahden luokan välillä kerrallaan. Jos aikaansaannos ei ole hyvä, heitä paperi roskiin ja aloita alusta. Älä vaivu epätoivoon.

2.

Tarkastellaan seuraavaa yliopiston kursseihin, niiden esitietovaatimuksiin, kurssitoteutuksiin sekä opettajiin liittyvä tilannetta.

Kurssilla voi olla esitietovaatimuksina useampi muu kurssi. Välttämättä esitietovaatimuksia ei ole. Kurssilla on opintopistemäärä ja nimi. Kurssin (esim. Ohjelmoinnin jatkokurssi) tiettyä luennointikertaa (esim. otm-syksy11, otm-syksy12, . . . ) sanotaan kurssitoteutukseksi. Kurssitoteutukseen kuuluu 1 tai 2 koetta, kokeilla on aika ja paikka. Kurssitoteutuksella on alkamis- ja päättymisaika, luentoajat ja luentopaikka. Kurssitoteutus sisältää harjoitusryhmiä. Harjoitusryhmällä on kokoontumisaika ja paikka. Jokaisella ryhmällä on ohjaajana yksi tai useampi henkilökunnan jäsen. Myös kurssitoteutuksen luennoijana on yksi henkilökunnan jäsen. Henkilökunnan jäsen voi olla usean ryhmän ohjaajana tai usean kurssitoteutuksen luennoijana.

Mallinna tilanne luokkakaaviona. Voit olettaa, että luokat ovat kurssi, kurssitoteutus, koe, laskariryhmä ja henkilökunnan jäsen. Muut tekstissä mainitut käsitteet eivät siis ole luokkia vaan yhteyksiä, yhteyden rooleja tai attribuutteja.

3.

Piirrä edellisen tehtävän luokkakaavion mukainen oliokaavio, joka kuvaa tilanteen kurssien Ohjelmoinnin perusteet, Ohjelmistotekniikan menetelmät ja Johdatus tietojenkäsittelytieteeseen sekä niiden tämän syksyn toteutusten osalta. Kaikkia laskariryhmiä ei tarvitse oliokaaviossa huomioida.

4.

Tarkastellaan edelliseltä viikolta tuttua matkakorttiohjelmaa. Tällä kertaa tehtävänä on kuvata sekvenssikaaviona main-metodin suorituksen aikaansaama toiminnallisuus.

public class Kioski {
    public Matkakortti ostaMatkakortti(String nimi) {
        Matkakortti uusiKortti = new Matkakortti(nimi);                        
        return uusiKortti;
    }
    
    public Matkakortti ostaMatkakortti(String nimi, int arvo) {
        Matkakortti uusiKortti = new Matkakortti(nimi);                      
        uusiKortti.kasvataArvoa(arvo);
        return uusiKortti;
    }       
}


public class Matkakortti {
    String omistaja;
    double arvo;
    int pvm;
    int kk;
    
    public Matkakortti(String n){
        omistaja = n;  pvm = 0;  kk = 0;  arvo = 0;
    }         
    
    public void kasvataArvoa(double a){ arvo += a; }
    
    public void vahennaArvoa(double a){ arvo -= a; }
    
    public double getArvo(){ return arvo; }   

    public void uusiAika(int p, int k){
        kk = k;
        pvm = p;
    }    
}


public class Lataajalaite {
    public void lataaArvoa(Matkakortti k, double a) {
        k.kasvataArvoa(a);
    }
    
    public void lataaAikaa(Matkakortti k, int pvm, int kk) {
        k.uusiAika(pvm, kk);
    }
}



public class Lukijalaite {
    private double RATIKKA = 1.5;
    private double HKL = 2.1;
    private double SEUTU = 3.5;
    
    public boolean ostaLippu(Matkakortti k, int tyyppi){
        double hinta = 0;
        if ( tyyppi == 0 ) hinta = RATIKKA;
        else if ( tyyppi ==1 ) hinta = HKL;
        else hinta = SEUTU;
                                
        if ( k.getArvo()<hinta ) return false;
        k.vahennaArvoa(hinta);
        
        return true;
    }     
}

public class HKLLaitehallinto { 
        ArrayList<Lataajalaite> lataajat = new ArrayList();
        ArrayList<Lukijalaite> lukijat = new ArrayList();

        lisaaLataaja(Lataajalaite lataaja){ lataajat.add(lataaja); }

        lisaaLukija(Lukijalaite lukija){ lukijat.add(lukija); }
}

public class Main {
    public static void main(String[] args) {
        HKLLaitehallinto laitehallinto = new HKLLaitehallinto();

        Lataajalaite rautatietori = new Lataajalaite();
        Lukijalaite ratikka6 = new Lukijalaite();
        Lukijalaite bussi244 = new Lukijalaite();   

        laitehallinto.lisaaLataaja(rautatietori);
        laitehallinto.lisaaLukija(ratikka6);
        laitehallinto.lisaaLukija(bussi244);
        
        Kioski lippuLuukku = new Kioski();
        Matkakortti artonKortti = lippuLuukku.ostaMatkakortti("Arto");

        rautatietori.lataaArvoa(artonKortti, 3);
        
        ratikka6.ostaLippu(artonKortti, 0);
        bussi244.ostaLippu(artonKortti, 2);   
    }
}

Muista, että sekvenssikaaviossa tulee tulla ilmi kaikki mainin suorituksen aikaansaamat olioiden luomiset ja metodien kutsut!

5.

Viime viikon laskareissa teimme luokkakaavion ohjelmoinnin jatkokurssin ensimmäisen viikon tehtävästä “Tavara, Matkalaukku ja Lastiruuma”. Jatketaan saman ohjelman mallintamista. Kuvaa sekvenssikaaviona mitä ohjelmassa tapahtuu kun alla olevan main-metodi suoritetaan:

public class Main {
    public static void main(String[] args) {
        Tavara kirja = new Tavara("Aapiskukko", 2);
        Tavara puhelin = new Tavara("Nokia 3210", 1);
        Tavara tiiliskivi = new Tavara("tiiliskivi", 4);

        Matkalaukku matinLaukku = new Matkalaukku(10);
        matinLaukku.lisaaTavara(kirja);
        matinLaukku.lisaaTavara(puhelin);

        Matkalaukku pekanLaukku = new Matkalaukku(10);
        pekanLaukku.lisaaTavara(tiiliskivi);

        Lastiruuma lastiruuma = new Lastiruuma(1000);
        lastiruuma.lisaaMatkalaukku(matinLaukku);
        lastiruuma.lisaaMatkalaukku(pekanLaukku);

        System.out.println("Ruuman matkalaukuissa on seuraavat tavarat:");
        lastiruuma.tulostaTavarat();
    }
}

Muista, että sekvenssikaaviossa tulee tulla ilmi kaikki mainin suorituksen aikaansaamat olioiden luomiset ja metodien kutsut!