Viikkotehtävä 4
Tällä viikolla harjoitellaan PHP:n olioiden käyttämistä. Tehtäville yhteiset vaatimukset:
- Käytetään PHP-kieltä.
- Kommentoikaa koodin oleellisimpia osia!
- Kaikkien sivujen on oltava validia XHTML 1.0 Strictiä.
- Evästeitä, tallennustiedostoja tai sessioita ei saa käyttää.
- Valmiin PHP-ohjelman pitää toimia users.jyu.fi:ssä.
Taso 1
Tee luokka nimeltä maat seuraavilla ominaisuuksilla:
- Luokalla on taulukkoattribuutti nimeltä maat, johon on tarkoitus tallentaa eri maiden nimiä stringeinä. Attribuutti on yksityinen (private).
- Oliota luodessa (konstruktori) maat-taulukkoon lisätään parametrina tuotava maa.
- Luokalla on metodi lisaa, joka lisää maat-taulukkoon parametrina tuodun maan nimen. Lisäys tehdään vain silloin, jos parametrinä tuotua maata ei ole vielä taulukossa.
- Luokalla on metodi onko_olemassa, joka tarkastaa, löytyykö taulukosta parametrina tuotu maa. Metodi palauttaa true, jos maa löytyy ja muuten false.
- Luokalla on metodi tulosta, joka tulostaa kaikki taulukossa olevat maat listana.
Tee lisäksi seuraavat testilauseet luokalle (lauseissa käytetään siis luokan metodeja):
- Luo uusi maat-olio, jolle viet parametrinä "Suomi".
- Tulosta maiden nimet.
- Lisää maat-olion taulukkoon "Ruotsi".
- Tulosta maiden nimet.
- Lisää maat-olion taulukkoon "Norja".
- Tulosta maiden nimet.
- Kysy maat-oliolta, sisältääkö se Venäjää. Tulosta vastaus selväkielisenä mallikuvan mukaan.
- Kysy maat-oliolta, sisältääkö se Norjaa. Tulosta vastaus selväkielisenä mallikuvan mukaan.
- Väliin voi tulostaa vielä mallikuvan mukaisia XHTML-tulostuslauseita ("1. vaihe" jne.).
Taso 3
Tee luokka nimeltä maa seuraavilla ominaisuuksilla:
- Luokalla on attribuutti nimi (string). Attribuutti on yksityinen (private).
- Luokalla on attribuutti asukasluku (int). Attribuutti on yksityinen (private).
- Oliota luodessa (konstruktori) lisätään parametrinä tuotavat nimi ja asukasluku vastaaviin attribuutteihin.
- Luokalla on metodi aseta_nimi, joka asettaa nimi-attribuuttiin parametrina tuodun arvon.
- Luokalla on metodi aseta_asukasluku, joka asettaa asukasluku-attribuuttiin parametrina tuodun arvon.
- Luokalla on metodi tulosta, joka tulostaa maan nimen ja asukasluvun esimerkiksi pilkulla eroteltuna.
- Luokalle voi tehdä tarvittaessa muitakin "apumetodeja".
Tee lisäksi 1. tason ohjeissa mainittu maat-luokka seuraavilla muutoksilla ja lisäyksillä:
- Maat tallennetaan maat-taulukkoon yllä kuvattuina maa-olioina, eikä stringeinä.
- Tee uusi metodi poista, joka poistaa parametrinä (stringinä maan nimi) tuodun maan taulukosta.
- Metodille lisaa viedään parametrina maa-olio, eikä stringiä.
- Metodille onko_olemassa viedään parametrinä edelleen maan nimi stringinä (kuten 1. tason versiossakin).
- Metodi tulosta tulostaa listaan sekä maiden nimet että asukasluvut.
Tee lisäksi seuraavat testilauseet luokille (lauseissa käytetään siis luokkien metodeja):
- Luo uusi maa-olio ($suomi), jolle viet parametrinä seuraavat: "Suomi" ja 5500000.
- Luo uusi maat-olio, jolle viet parametrinä $suomi-olion.
- Tulosta maiden nimet maat-olion tulosta-metodilla.
- Luo uusi maa-olio ($ruotsi), jolle viet parametrinä seuraavat: "Ruotsi" ja 9000000.
- Lisää maat-olion taulukkoon $ruotsi-olio.
- Tulosta maiden nimet maat-olion tulosta-metodilla.
- Luo uusi maa-olio ($norja), jolle viet parametrinä seuraavat: "Norja" ja 5000000.
- Lisää maat-olion taulukkoon $norja-olio.
- Lisää maat-olion taulukkoon $norja-olio (lisäyksen ei pitäisi onnistua).
- Poista $tanska-olio maat-olion taulukosta ($tanska-oliota ei ole lisätty, joten mitään ei pitäisi tapahtua).
- Tulosta maiden nimet maat-olion tulosta-metodilla.
- Poista $ruotsi-olio maat-olion taulukosta.
- Tulosta maiden nimet maat-olion tulosta-metodilla.
- Aseta $norja-oliolle uusi nimi ("Norway").
- Aseta $norja-oliolle uusi asukasluku (5100000).
- Tulosta maiden nimet maat-olion tulosta-metodilla.
- Kysy maat-oliolta, sisältääkö se Venäjää. Tulosta vastaus selväkielisenä mallikuvan mukaan.
- Kysy maat-oliolta, sisältääkö se Norjaa. Tulosta vastaus selväkielisenä mallikuvan mukaan.
- Väliin voi tulostaa vielä mallikuvan mukaisia XHTML-tulostuslauseita ("1. vaihe" jne.).
Taso 5
Tee kolmannen tason tehtävät (myös testilauseet).
Tee lisäksi seuraavaa:
- Luo uusi luokka osavaltio, jonka perit maa-luokasta. Tee
luokalle seuraavat lisäominaisuudet:
- Attribuutti maa (private), johon on tarkoitus tallentaa se maa-olio, jonka osavaltiosta on kyse.
- Oliota luodessa lisätään parametrinä tuotavat nimi, asukasluku ja maa vastaaviin attribuutteihin. Ylikirjoita luokan konstruktori toimimaan oikein. Käytä hyväksesi "äiti"-luokan (maa) konstruktorin lauseita, eli älä kirjoita samaa koodia kahteen paikkaan.
- Ylikirjoita tulosta-metodi siten, että myös osavaltion "äitimaan" nimi tulostuu. Käytä hyväksesi "äiti"-luokan (maa) konstruktorin lauseita, eli älä kirjoita samaa koodia kahteen paikkaan.
- Tee uusi metodi aseta_maa, joka asettaa maa-attribuuttiin parametrina tuodun arvon.
- Luokalle voi tehdä tarvittaessa muitakin "apumetodeja".
- Tee maat-luokalle seuraavat uudet metodit:
- laske_asukasluvut, palauttaa maiden yhteenlasketut asukasluvut. (Huom! Osavaltioiden asukaslukuja ei tule laskea mukaan summaan.)
- laske_osavaltiot, laskee parametrinä tuotavan maa-olion osavaltioiden määrän maat-taulukossa. Palauttaa määrän lukuna. Eli esimerkiksi jos metodille tuotaisiin parametrina "USA"-olio, niin metodi palauttaisi maat-taulukossa olevien niiden osavaltioiden, joiden maa-attribuutin arvo olisi "USA", määrän.
- Tee kolmastason testilauseiden perään vielä seuraavat testilauseet:
- Tulosta yhteenlasketut asukasluvut käyttäen hyväksi maat-olion metodia (mallikuva).
- Luo uusi maa-olio ($britit), jolle viet parametrinä seuraavat: "Iso-Britannia" ja 60000000.
- Lisää maat-olion taulukkoon $britit-olio.
- Luo uusi osavaltio-olio ($englanti), jolle viet parametrinä seuraavat: "Englanti", 50000000 ja $britit.
- Luo uusi osavaltio-olio ($wales), jolle viet parametrinä seuraavat: "Wales", 3000000 ja $britit.
- Lisää maat-olion taulukkoon $englanti-olio.
- Lisää maat-olion taulukkoon $wales-olio.
- Tulosta maiden nimet maat-olion tulosta-metodilla.
- Tulosta yhteenlasketut asukasluvut käyttäen hyväksi maat-olion metodia (mallikuva).
- Tulosta $britit-olion osavaltioiden määrä (mallikuva).


Käyttäjien kommentit