viikon 2 kotitehtävät - mluukkai/OTM2012 GitHub Wiki

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

1

Ohjelmoinnin, Tietorakenteiden ja Tietokantojen harjoitustyöissä opiskelijan on pidettävä kirjaa käyttämistään työtunneista. Aina kun opiskelija tekee tehtäviä harjoitustyöhön liittyen, on hänen kirjatattava ylös käyttämänsä työaika ja tieto millaiseen tehtävään aika käytettiin. Työtehtävät jakautuvat seuraaviin kuuteen luokkaan: määrittely, suunnittelu, ohjelmointi, testaus, dokumentointi ja muuta.

Tehtävänä on suunnitella harjoitustöiden tuntikirjanpitoa tukeva tietojärjestelmä.

Harjoitustyöt tehdään ryhmässä, johon kuuluu useita opiskelijoita ja yksi ohjaaja. Kaikki ryhmään kuuluvat opiskelijat tekevät saman aineen (Ohjelmointi, Tietorakenteet tai Tietokannat) harjoitustyötä. Kukin opiskelija tekee työnsä itsenäisesti. Ryhmän ohjaaja luo jokaiselle ryhmäläiselle käyttäjätunnuksen järjestelmään. Käyttäjätunnuksen luonnin yhteydessä opiskelijan tiedot (mm. osoite, aloitusvuosi, pääaine) kopioidaan OODI-järjestelmästä. Harjoitustyön aikana ohjaaja seuraa ryhmäläisten etenemistä järjestelmän avulla. Opintoesimiehen vastuulla on luoda kaikille ohjaajille sopivat käyttäjätunnukset järjestelmään sekä listätä järjestelmään tiedot jokaisesta ryhmästä. Ryhmän tiedot (ohjaaja, tapaamisajat, alku- ja loppupäivämäärä) kopioidaan laitoksen kurssikirjanpitojärjestelmästä.

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 kolme 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 {
    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){ lataajat.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** ⚠️