Sähköisten asiointipalveluiden toteuttaminen

Sorakuilu

Luokat ja oliot

Olio-ohjelmoinnin peruskäsitteet ovat luokka ja olio. Luokka määrittelee, millaista tietoa olio sisältää (luokan muuttujat) ja miten sitä voi käsitellä (luokan funktiot eli metodit). Käytännössä luokkaa voi ajatella muuttujan tyyppinä ja oliota voi ajatella muuttujan arvona.

Olio-ohjelmointi helpottaa tavallisesti ohjelmistojen ylläpitoa, päivitystä ja koodin uudelleenkäyttöä. Lausekielissä ongelmien ollessa isoja on päädyttty tapauskohtaisiin ratkaisuihin (algoritmeihin). Niissä ohjelma on jaettu osa-algoritmeiksi (aliohjelmiksi, joissa aliohjelmat välittävät toisilleen parametreinä). Siirrettävyys voi olla huono, jos ratkaisut on tehty kiireessä.

Valmiista olioista voi myös periyttää uusia olioita ja kirjoittaa niihin tarvittavat lisäominaisuudet. Uusia olioita voi luoda.

OLIO

TERMEJÄ

Luokka, class

Samankaltaisten olioiden malli.

Luokka määritellään tavallisesti varatun sanan class avulla.

Muunnin (suojausmääre) kuvaa luokan ominaisuuksia. Yleisimmät ovat:

publicLuokka on periytyvä ja sen ominaisuuksia ja metodeja voidaan kutsua ulkoa.
Luokkakaaviossa public-määre esitetään +-merkillä.
finalLuokka ei periydy. Luokan ominaisuuksia ja metodeja voidaan kutsua ulkoa
protectedMuuttujaa tai metodia voi käsitellä vain luokan sisällä tai luokan perineiden luokkien sisällä.
Luokkakaaviossa public-määre esitetään #-merkillä.
privateMuuttujaa tai metodia voi käsitellä vain luokan sisällä. Jos private-määreisen muuttujan haluaa näyttää pääohjelmassa, tulee sitä varten tehdä erillinen (public) saantimetodi.
Luokkakaaviossa public-määre esitetään - -merkillä.
abstractLuokasta voidaan tehdä olioita ainoastaan periyttämällä. Luokan metodit eivät sisällä ohjelmakoodia.
staticStatic-määreen saavat muuttujat eivät liity olioihin vaan luokkiin. Staattisia muuttujia ja metodeja käytetään luokan nimen kautta, esimerkiksi Luokannimi::metodi(), tietysti riippuen metodien ja muuttujien näkyvyydestä. Vain public-näkyvyydellä määritetyt muuttujat ja metodit ovat suoraan käytettävissä.
Staattiset attribuutit ja metodit esitetään UML-luokkakaaviossa alaviivan kera.

Viittaustyyppi

Viittaustyyppiset muuttujat tallentavat niihin liittyvän tiedon viitteen taakse, ja itse muuttuja toimii vain viitteenä tiedon sisältävään paikkaan.

Viittaustyyppisistä muuttujista puhutaan olioina, ja ne luodaan new-kutsulla. Muuttujan arvo asetetaan vieläkin sijoitusoperaattorilla =, mutta komento new luo olion ja palauttaa viitteen olioon. Tämä viite asetetaan muuttujan arvoksi.

Olio, ilmentymä, instance

Ilmentymä on olio, joka toteuttaa luokan käytännössä.

Olio-ohjelmoinnissa luokkien käyttö on ainoa tapa saada ohjelma tekemään jotain järkevää, sillä kaikki toiminnallinen koodi kirjoitetaan normaalisti olioiden metodeihin.

PHP oliokielenä

PHP tukee olio-ohjelmointia versiosta 4 alkaen. Luokkien määrittely onnistuu kuten missä tahansa yleisesti käytetyssä olio-ohjelmointikielessä. Luokkien määrittelyn jälkeen niitä voidaan käyttää PHP-koodissa. Olion luomiseksi on ensin määriteltävä malli, josta se voidaan luoda ja tämä malli on luokka. Luokka esitellään class- avainsanalla. Kun luokka on luotu sitä käytetään pohjana, josta voidaan luoda tarvittava määrä olioita luokan ilmentymiksi. Olio (object) luodaan new – lauseella.

class Opiskelija { //ominaisuudet private $nimi; public function __construct($nimi) { $this->nimi =$nimi; } public function esittele() { echo "Opiskelijan nimi on {$this->nimi}"; } } $opiskelija1 = new Opiskelija("Leena");//tässä luodaan olio $opiskelija2 = new Opiskelija("Urmas"); $opiskelija1 ->esittele(); $opiskelija2 ->esittele();

Luokan tietojäsenet eli ominaisuudet (attribuutit, muuttujat)

Esimerkissä luokan ominaisuus on muuttuja $nimi. Ominaisuuksia käytetään luokkaan liittyvän tiedon tallentamiseen. Ominaisuudet voivat olla toisen luokan olioita.

Luokan toiminnot eli metodit (funktiot)

Metodi on funktio, joka on määritelty luokan sisällä ja antaa toimintakyvyn olioille. Metodi näyttää tavalliselta funktiolta ja käyttäytyy samalla tavalla, mutta metodi määritellään aina luokan sisällä. Olion metodia kutsutaan nuolioperaattorilla ( ->) ja metodeilla on pääsy luokan jäsenmuuttujiin. Tavallisesti luokilla on ainakin ominaisuuksien asetus (set)- ja saantimetodit (get).

Metodin sisältämä ohjelmakoodi kirjoitetaan heti metodin esittelyn yhteyteen luokan määrittelyn sisälle. Sille tulee antaa nimi ja ohjelmoida toiminta. Sille voidaan myös määritellä parametreja, joissa olion metodille välitetään tietoa olion ulkopuolelta.

Metodit voivat olla static, public tai private.

Funktio __construct on luokan rakentaja eli konstruktori, jota kutsutaan aina, kun luokasta muodostetaan olio. Tavallisesti konstruktori asettaa alkuarvot luokan muuttujille. Esimerkiksi luokassa Opiskelija konstruktorille annetaan nimi, joka sijoitetaan luokan muuttujaan $nimi.

Nuolioperaattorin avulla ( - >) voidaan käyttää olion jäseniä, olion ominaisuuksia muutetaan juuri nuolioperaattorilla.

$this erikoismuuttujaa käytetään viittaamaan luokan nykyiseen olioon. Se on kuin persoonapronomini. Yhdistämällä $this ja -> operaattori voidaan käsitellä luokan metodia tai ominaisuuksia luokan sisällä.

Oliopohjainen ohjelmointi ei ole PHP-kielessä ja sen hyvässä hyödyntämisessä välttämätöntä eikä pakollista. PHP:n kannalta olioiden edut liittyvät koodien parempaan organisointiin, laajennettavuuteen ja uudelleenkäytettävyyteen - siis koodin laatuun.

Olioiden periytyminen

PHP tukee myös periyttämistä. Luokka voi periä, korvata ja laajentaa toisen luokan toiminnallisuutta.

Perimällä jokin luokka saadaan luokan yliluokkaan (superclass) liitetyt ominaisuudet ja toiminta käyttöön ilman erillistä määrittelyä. Perittyä luokkaa kutsutaan aliluokaksi (subclass).

Jos jokin toista luokkaa laajentava luokka ei sisällä omaa muodostinta, käytetään kantaluokan muodostinta olioiden luomisessa. Kantaluokan muodostinta kutsutaan automaattisesti aina, kun lapsiluokan olio luodaan.

Hierarkkinen rakenne

Esim.

Eliö Eläin Nisäkäs Ihminen Postinkantaja Pekka

Kuinka periminen tehdään?

Aikaisemmin määrittelimme seuraavan luokan Opiskelija:

class Opiskelija { //ominaisuudet private $nimi; public function __construct($nimi) { $this->nimi =$nimi; } public function esittele() { echo "Opiskelijan nimi on {$this->nimi}"; } }

Perimme seuraavassa luokan ominaisuudet ja metodit uuteen aliluokkaan "Datanomiopiskelija".

class Datanomiopiskelija extends Opiskelija { //ominaisuudet private $koulutusohjelma; public function __construct($nimi,$koulutusohjelma) { parent::__construct($nimi); $this->koulutusohjelma =$koulutusohjelma; } public function esittele() { parent::esittele(); echo " Koulutusohjelma on {$this->koulutusohjelma}"; } } //pääohjelma testaamaan luokkaa $opiskelija1 = new Datanomiopiskelija("Leena","ohjelmistotuotanto");//tässä luodaan olio $opiskelija2 = new Datanomiopiskelija("Urmas","käytön tuki"); $opiskelija1 ->esittele(); $opiskelija2 ->esittele();

Metodien ylikirjoittaminen ja ylikuormittaminen

Metodin ylikirjoittamisella tarkoitetaan sitä, että uudessa luokassa voidaan määritellä samanniminen metodi jonkun perityn metodin kanssa. Tällöin peritty metodi kirjoitetaan yli uudella metodilla.

Kun metodi ylikirjoitetaan, täytyy uudella metodilla olla täsmälleen sama nimi ja samat parametrit (syöttöparametrit ja palautusparametri) kuin ylikirjoitettavalla metodilla.

Jos parametrit eroavat, on kysymyksessä metodin ylikuormitus eikä ylikirjoittaminen.

Ylikuormitettaessa metodia kääntäjä etsii parhaiten kutsuun sopivan metodin ja yhdistää kutsun siihen.