Skip to content

viikon 5 kotitehtävät

Lassi Vapaakallio edited this page Aug 17, 2015 · 5 revisions

1

Terraariossa on monia erilaisia eliöitä. Eliöt ovat joko kasveja tai liikkuvia eliöitä. Kukin eliö kuuluu pysyvästi johonkin lajiin. Osa lajeista on toistensa vihollisia. Yhdellä lajilla voi olla useita eri vihollislajeja. Liikkuvat eliöt muodostavat laumoja. Laumaan kuuluu useita eliöitä, mutta eliö voi kerrallaan kuulua vain yhteen laumaan. Liikkuvat eliöt toteuttavat liikkumisominaisuuden. Liikkumisominaisuus säätelee eliön liikkumista terraariossa. Myös laumat toteuttavat oman liikkumisominaisuutensa joka vaikuttaa jokaisen lauman sisältämän eliön liikkeeseen. Mallinna terraario luokkakaaviona.

2

Ohjelmoinnin jatkokurssin viikon 2 tehtävässä 118 toteutettiin luokat CDLevy, Kirja ja Laatikko. Viimeisen kohdan jälkeen kaikki näistä toteuttivat rajapinnan Talletettava. Ratkaisun ohjelmakoodi täällä

Oletetaan että luokkia käyttää seuraava main-metodi:

public class Main {
    public static void main(String[] args) {
        Laatikko laatikko = new Laatikko(10);

        laatikko.lisaa( new Kirja("Kent Beck", "Test Driven Development", 0.5) );
        laatikko.lisaa( new CDLevy("Pink Floyd", "Dark Side of the Moon", 1973) );

        Laatikko isoLaatikko = new Laatikko(20);

        isoLaatikko.lisaa(laatikko);
        
        System.out.println( isoLaatikko );
    }
}

Kuvaa sekvenssikaaviona mitä tapahtuu kun main suoritetaan. Piirrä myös koodia kuvaava luokkakaavio.

3

Takaisinmallinna luokkakaaviona ohjelmoinnin jatkokurssin viikon 4 tehtävänä 138 Maatilasimulaattori. Ohjelmakoodi täällä

4

Kuvaa sekvenssikaaviona mitä Maatilalla tapahtuu kun seuraava koodi suoritetaan:

Maatila maatila = new Maatila("Esko", new Navetta(new Maitosailio()));
        // voit ajatella edellisen sekvenssikaaviossa seuraavanlaiseksi:
        // Maitosailio maitosailio = new Maitosailio(); 
        // Navetta navetta = new Navetta(maitosailio);
        // Maatila maatila = new Maatila( navetta );

        Lypsyrobotti robo = new Lypsyrobotti();
        maatila.asennaNavettaanLypsyrobootti(robo);

        Lehma lehma1 = new Lehma();
        Lehma lehma2 = new Lehma();

        maatila.lisaaLehma(lehma1);
        maatila.lisaaLehma(lehma2);

        maatila.eleleTunti();

        maatila.hoidaLehmat();

        System.out.println(maatila);

5

Laajennetaan toissaviikolla aloitettua monopolin luokkamallia. Ota pohjaksi oma toissaviikkoinen ratkaisusi tai esimerkkivastaus.

Voit olettaa, että kyseessä on tietokonepelinä toteutettava monopoli.

Seuraavassa asioita, jotka pitäisi tulla mallissa esille.

Ruutuja on useampaa eri tyyppiä:

  • aloitusruutu
  • vankila
  • sattuma ja yhteismaa
  • asemat ja laitokset
  • normaalit kadut (joihin liittyy nimi)

Monopolipelin täytyy tuntea sekä aloitusruudun että vankilan sijainti.

Jokaiseen ruutuun liittyy jokin toiminto.

Sattuma- ja yhteismaaruutuihin liittyy kortteja, joihin kuhunkin liittyy joku toiminto.

Toimintoja on useanlaisia. Ei ole vielä tarvetta tarkentaa toiminnon laatua.

Normaaleille kaduille voi rakentaa korkeintaan 4 taloa tai yhden hotellin. Kadun voi omistaa joku pelaajista. Pelaajilla on rahaa.

Tässä vaiheessa ei vielä liitetä peliin metodeja. Niiden aika tulee seuraavalla viikolla.

6

Ohjelmointikursseilla on tutustuttu sangen hyödylliseen luokkaan ArrayList. ArrayList-luokan olioden voi ajatella olevan automaattisesti itseään kasvattavia vaihtelevanmittaisia taulukoita, joihin voidaan säilöä muita olioita. Lyhyesti ilmaistuna ArrayList-oliot ovat “oliosäiliöitä”.

Etsi Java-API:sta, ArrayList-luokka.

Tutkitaan ArrayListin ominaisuuksia. Tällä kertaa ei kiinnitetä huomiota ArrayListin metodeihin vaan sen sijaintiin Java-API:n luokkahierarkiassa. Eli mikä on ArrayList:in yläluokka, mitä sisarluokkia (eli yliluokan muita aliluokkia) sillä on, mikä on ArrayListin yliluokan yliluokka, mitä serkkuluokkia ArrayListilla on, jne …

Erityisesti on syytä selvittää mitä rajapintoja ArrayList mainitsee toteuttavansa? Mitä toteutettavissa rajapinnoissa luvataan?

Piirrä tilanteesta luokkakaavio. Jos kaavio kasvaa liian isoksi, älä tunge kaikkea kuvaan. Metodinimiä ei kannattane luokkakaavioon ainakaan montaa merkitä.

ArrayList ja muut oliosäiliöt liittyvät läheisesti kurssin Tietorakenteet aihepiiriin. Erilaisten “oliosäiliöiden” luokkaperhe on erittäin hyödyllinen. Kuten huomataan, on erilaisia säiliöluokkia todella suuri määrä. Joskus onkin haastavaa löytää parhaiten omiin tarpeisiin soveltuva luokka.

Ohjelmoinnin jatkokurssin viikolla 3 tutustuttiin hieman ArrayListin tapaan toimivaan HashSet-luokkaan. Miten HashSet sijoittuu Javan luokkahierarkiaan ArrayList:in suhteen? Mikä selittää sen, että HashSet:iä ja ArrayList:iä voi käyttää monin paikoin toistensa tilalla? Mitä eroavaisuuksia löytyy?

7

Ohjelmoinnin jatkokurssilla myös HashMap:it ovat käyneet tutuksi. Tee sama HashMapien suhteen kuin mitä teit edellisessä tehtävässä ArrayListille, eli

  • mitä mitä HashMap mainitsee toteuttavansa, ja rajapinnoissa luvataan?
  • mitä luokkia HashMap perii ja mitä ovat sen “sisarluokat”?
    • erityisen kiinnostava näistä on TreeMap, miten se eroaa HashMap:ista

Tee myös HashMapin suhteista rajapintoihin ja muihin luokkiin luokkakaavio.