Luokat ja oliot - Demo 4
Tehdään luokkia elokuvatietokantaa varten ja harjoitellaan niiden käyttöä.
Luokan luominen
Tehdään elokuva-luokka, joka sisältää tietoa tietystä elokuvasta.
- Luo uusi PHP-tiedosto nimelle elokuva.class.php.
- Tee tiedostoon luokka nimeltä elokuva.
- Laita luokalle attribuuteiksi (kaikki private) seuraavat:
- $nimi
- $vuosi
- $laji
- $ohjaaja
- $nayttelijat (taulukko)
- Tee luokalle konstruktori,jossa sijoitetaan parametrina tuotavat arvot attribuutteihin nimi, vuosi, laji ja ohjaaja.
- Tee luokalle destruktori, jossa sijoitetaan kaikkien luokan attribuuttien arvoiksi
NULL. - Tee luokalle seuraavat metodit (kaikki public), joissa haetaan luokan attribuutin arvo:
- hae_nimi()
- hae_vuosi()
- hae_laji()
- hae_ohjaaja()
- hae_nayttelijat()
public function hae_nimi() { return $this->nimi; } - Tee luokalle seuraavat metodit (kaikki public), joissa asetetaan luokan attribuutille arvo:
- aseta_nimi($arvo)
- aseta_vuosi($arvo)
- aseta_laji($arvo)
- aseta_ohjaaja($arvo)
public function aseta_nimi($arvo) { $this->nimi = $arvo; } - Tee luokalle metodi lisaa_nayttelija($arvo), joka lisää $nayttelijat-taulukkoon parametrina tuotavan näyttelijän nimen. Lisäykseen voit käyttää esimerkiksi array_push-funktiota. Tarkista lisätessä, ettei kyseistä näyttelijää ole jo taulukossa. Tarkistuksessa kannattaa käydä taulukko läpi foreach-rakenteella.
- Tee luokalle metodi poista_nayttelija($arvo), joka poistaa $nayttelijat-taulukosta
parametrina tuotavan näyttelijän nimen. Poistoon voit käyttää
unset-funktiota. Poistaessa kannattaa käydä taulukko läpi
foreach-rakenteella ja selvittää jokaisella kerralla taulukon alkion arvon
lisäksi myös alkion avain, jotta tiedät mistä taulukon indeksistä poisto tulee tehdä.
(Eli esimerkiksi:
foreach($this->nayttelijat as $avain => $nayttelija)jne.) - Tee luokalle metodi tulosta(), joka tulostaa olion tiedot alla olevassa muodossa:

Container-luokan tekeminen
Tehdään luokka, joka sisältää elokuva-olioita.
- Luo uusi PHP-tiedosto nimelle elokuvat.class.php.
- Lisää tiedoston alkuun määritys, jolla saat liitettyä elokuva.class.php-tiedoston mukaan.
require_once 'elokuva.class.php'; - Tee tiedostoon luokka nimeltä elokuvat.
- Laita luokalle attribuutiksi (private) $elokuvat-taulukko.
- Tee luokalle metodi lisaa_elokuva($arvo), joka lisää $elokuvat-taulukkoon parametrina tuotavan elokuva-olion. Lisäykseen voit käyttää esimerkiksi array_push-funktiota. Tarkista lisätessä, ettei kyseistä elokuva-oliota ole jo taulukossa. Tarkistuksessa kannattaa käydä taulukko läpi foreach-rakenteella. Tarkistuksessa voit verrata elokuvien nimiä keskenään. Elokuvan nimen saat selville elokuva-olion hae_nimi()-metodilla.
- Tee luokalle metodi poista_elokuva($arvo), joka poistaa $elokuvat-taulukosta
parametrina tuotavan elokuva-olion. Poistoon voit käyttää
unset-funktiota. Poistaessa kannattaa käydä taulukko läpi
foreach-rakenteella ja selvittää jokaisella kerralla taulukon alkion arvon
lisäksi myös alkion avain, jotta tiedät mistä taulukon indeksistä poisto tulee tehdä. (Eli esimerkiksi:
foreach($this->elokuvat as $avain => $elokuva)jne.) Poistossa voit verrata elokuvien nimiä keskenään. Elokuvan nimen saat selville elokuva-olion hae_nimi()-metodilla. - Tee luokalle metodi tulosta(), joka tulostaa elokuvien nimet listaan käyttäen hyväksi
elokuva-olion tulosta()-metodia.

Luokkien käyttäminen
Luodaan luokista olioita ja käytetään olioiden metodeja.
- Luo uusi PHP-tiedosto nimelle leffat.php.
- Lisää tiedoston alkuun määritys, jolla saat liitettyä elokuvat.class.php-tiedoston mukaan.
elokuva.class.php-tiedostoa ei tarvitse liittää, koska se tulee elokuvat.class.php-tiedoston mukana.
require_once 'elokuvat.class.php'; - Luo elokuva-olio nimeltä $vares. Laita olion attribuutteihin mallikuvan mukaiset arvot.
- Lisää näyttelijäksi myös joku "väärä" henkilö.
$vares->lisaa_nayttelija('Antti Ekonoja'); - Tulosta elokuvan tiedot (käytä tulosta()-metodia).
- Poista "väärä" näyttelijä.
$vares->poista_nayttelija('Antti Ekonoja'); - Tulosta elokuvan tiedot (käytä tulosta()-metodia).
- Koita lisätä $vares-olio uudestaan (ei pitäisi onnistua).
- Luo joku toinenkin elokuva-olio (esim. mallikuvan $matti).
- Luo elokuvat-olio nimeltä $leffat.
- Lisää $vares ja toinen luomasi elokuva-olio leffat-olion $elokuvat-taulukkoon.
- Tulosta elokuvat (käytä leffat-olion tulosta()-metodia).
- Poista $vares-olio leffat-olion $elokuvat-taulukosta.
- Tulosta elokuvat (käytä leffat-olion tulosta()-metodia).
- Tarkista XHTML-tulosteista (mallikuva), että kaikki toimii oikein ja korjaa virheet tarvittaessa.
Lisätehtävä
Tehdään näyttelijästä olio pelkän stringin sijaan.
- Luo uusi PHP-tiedosto nimelle nayttelija.class.php.
- Tee tiedostoon luokka nayttelija ja keksi sille sopivat attribuutit (nimi, ikä jne.).
- Tee luokalle tarvittavat metodit.
- Muuta aiemmin tehtyä elokuva-luokkaa siten, että sen $nayttelijat-taulukkoon tallennetaankin nayttelija-olioita, eikä pelkästään nimiä stringeinä.
- Muuta elokuva-luokan metodit toimimaan nayttelija-olioiden kanssa stringien sijasta.
- Tarvitseeko elokuvat-luokalle tehdä mitään muutoksia?
- Muuta testilauseet (leffat.php) toimimaan uuden nayttelija-luokan kanssa.


Käyttäjien kommentit