Viikon 2 kotitehtävät - HY-TKTL/otm2014s GitHub Wiki

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 ja 2 käsittelevät viikon 1 kalvojen 34-67 asiaa. Tehtävät 3-6 käsittelevät viikon 2 asiaa, erityisesti kannattaa kerrata kalvot 13-33 ja 44-48

1

Tietojenkäsittelytieteen laitoksen ohjelmistotuotantoprojektien hallinnointia varten tarvitaan tietojärjestelmä, jonka tulisi tukea seuraavanlaista toiminnallisuutta.

Ennen lukukauden alkua asiakkaat lähettävät perustettaville ryhmille tehtäväkuvauksia, jotka vastuuhenkilö laittaa ilmoittautumisen alkaessa näkyville. Kukin opiskelija ilmottautuu johonkin ryhmään. Ilmoittautumisen yhteydessä opiskelijan tiedot (mm. opiskelijanumero ja email-osoite) siirretään yliopiston opiskelijarekisteristä järjestelmään. Kurssin puolessa välissä sekä lopussa opiskelijat suorittavat vertaisarvioinnin. Kummassakin vertaisarvioinnissa opiskelijat vastaavat useampaan kysymykseen, jotka vastuuhenkilö on laatinut. Jokaisessa kysymyksessä opiskelija antaa vastauksen koskien jokaista ryhmänsä jäsentä (kysymys voisi olla esim. "arvioi ohjelmointitaito skaalalla 1-5"). Kunkin ryhmän ohjaaja näkee ryhmäläistensä tekemät vertaisarviot. Projektien päätyttyä ryhmän asiakas laatii ryhmää koskevan loppuarvion. Loppuarvio sekä kaikkien ryhmien jäsenten tekemät vertaisarviot ovat vastuuhenkilön luettavissa.

Tunnista tietojärjestelmän käyttäjät ja mieti minkälaisia käyttötapauksia järjestelmällä tulisi olla. Käyttötapauksesta riittää mainita nimi ja käyttötapauksen kulku lyhyesti (kuten luennon 1 kalvolla 42). Tee myös käyttötapauskaavio.

2

Kuvaa edellisen tehtävän käyttötapauksista kaksi tarkemmalla tasolla.

Käytä kuvaamiseen Alistair Cockburnin käyttötapauspohjaa, joka löytyy osoitteesta http://www.cs.helsinki.fi/u/mluukkai/ohmas10/usecase.pdf, tai samaa tyyliä kun viikon 1 luentokalvon sivulla 44 olevan käyttötapauksen Opiskelija ilmoittautuu kurssille tarkemman version yhteydessä on käytetty.

3

Mallinna Ohjelmoinnin perusteiden tehtävän 89 Kello Java-koodi luokkakaaviona. Kellon koodi löytyy viime viikon laskareista

Tee luokkakaavio tarkasti (merkitse kaikki metodit ja attribuutit). Jatkossa riittää että luokkakaavioon merkataan kulloisenkin käyttötilanteen suhteen tärkeimmät metodit/attribuutit. Yleensä ei merkata kuin korkeintaan julkiset metodit ja attribuutit, ei aina niitäkään.

4

Mallinna Ohjelmoinnin jatkokurssin viikon 1 tehtävän 4 Lastiruuma koodi luokkakaaviona.

public class Tavara {
    private String nimi;
    private int paino;
 
    public Tavara(String nimi, int paino) {
        this.nimi = nimi;
        this.paino = paino;
    }
 
    public String getNimi() {
        return this.nimi;
    }
 
    public int getPaino() {
        return this.paino;
    }
 
    @Override
    public String toString() {
        return this.nimi + ": (" + this.paino + " kg)";
    }
}


public class Matkalaukku {
    private int maksimipaino;
    private ArrayList<Tavara> tavarat;
 
    public Matkalaukku(int maksimipaino) {
        this.tavarat = new ArrayList<Tavara>();
        this.maksimipaino = maksimipaino;
    }
 
    public void lisaaTavara(Tavara tavara) {
        if (this.yhteispaino() + tavara.getPaino() > this.maksimipaino) {
            return;
        }
 
        this.tavarat.add(tavara);
    }
 
    public int yhteispaino() {
        int paino = 0;
        for (Tavara tavara : this.tavarat) {
            paino += tavara.getPaino();
        }
 
        return paino;
    }
 
    public void tulostaTavarat() {
        for (Tavara tavara : this.tavarat) {
            System.out.println(tavara);
        }
    }
 
    public Tavara raskainTavara() {
        Tavara raskain = null;
         
        for (Tavara tavara : this.tavarat) {
            if (raskain == null || raskain.getPaino() < tavara.getPaino()) {
                raskain = tavara;
            }
        }
 
        return raskain;
    }
 
    @Override
    public String toString() {
        if (this.tavarat.isEmpty()) {
            return "ei tavaroita (0 kg)";
        }
 
        if (this.tavarat.size() == 1) {
            return "1 tavara (" + this.yhteispaino() + " kg)";
        }
 
        return this.tavarat.size() + " tavaraa (" + this.yhteispaino() + " kg)";
    }
}


public class Lastiruuma {
    private ArrayList<Matkalaukku> matkalaukut;
    private int maksimipaino;
 
    public Lastiruuma(int maksimipaino) {
        this.maksimipaino = maksimipaino;
        this.matkalaukut = new ArrayList<Matkalaukku>();
    }
 
    public void lisaaMatkalaukku(Matkalaukku matkalaukku) {
        if (this.yhteispaino() + matkalaukku.yhteispaino() > maksimipaino) {
            return;
        }
 
        this.matkalaukut.add(matkalaukku);
    }
 
    public int yhteispaino() {
        int paino = 0;
        for (Matkalaukku laukku : this.matkalaukut) {
            paino += laukku.yhteispaino();
        }
 
        return paino;
    }
 
    public void tulostaTavarat() {
        for (Matkalaukku laukku : this.matkalaukut) {
            laukku.tulostaTavarat();
        }
    }
 
    @Override
    public String toString() {
        if (this.matkalaukut.isEmpty()) {
            return "ei matkalaukkuja (0 kg)";
        }
 
        if (this.matkalaukut.size() == 1) {
            return "1 matkalaukku (" + this.yhteispaino() + " kg)";
        }
 
        return this.matkalaukut.size() + " matkalaukkua (" + this.yhteispaino() + " kg)";
    }
}

5

Seuraavassa viime viikon tehtävän 2 hieman laajennettu versio. Piirrä koodia vastaava luokkakaavio.

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 {
    private String omistaja;
    private double arvo;
    private int pvm;
    private 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);   
    }
}

6

Piirrä edellisen tehtävän luokkakaavion mukainen oliokaavio, joka kuvaa main():in viimeisellä rivillä olevan tilanteen.

⚠️ **GitHub.com Fallback** ⚠️