620 likes | 719 Views
Luokan muodostin. Olioihin kohdistuvia automaattisia toimintoja ovat luonti, alustus, kopiointi, sijoitus, tyhjennys ja tuhoaminen. Automaattiset toiminnot voivat aktivoitua järjestelmän käynnistämänä tai ohjelmoijan käynnistämänä.
E N D
Luokan muodostin • Olioihin kohdistuvia automaattisia toimintoja ovat luonti, alustus, kopiointi, sijoitus, tyhjennys ja tuhoaminen. • Automaattiset toiminnot voivat aktivoitua järjestelmän käynnistämänä tai ohjelmoijan käynnistämänä. • Olion luontiin liittyvät vaiheet ovat olion tilanvaraus ja olion alustus. tMyn
Olion tuhoamiseen liittyvät vaiheet ovat olion tyhjennys ja olion tilanvapautus. tMyn
Olion luontiin eli tilanvaraukseen liittyy olion tunnuksen esittely ja olion määrittely. • Olion esittely liittää tunnuksen nimen olion tyyppiin eli luokkaan. • Olion määrittely luo olion eli määrittely varaa keskusmuistitilan olion tiedoille. • Olio saa luotaessa luokkansa mukaisen kehyksen eli luokka määrää sille varattavat tietojäsenet. • Jäsenfunktiot eivät kopioidu jokaiselle oliolle, vaan kaikki luokan oliot käyttävät kertaalleen talletettua ohjelmakoodia. tMyn
Olion alustus tapahtuu tilanvarauksen yhteydessä. • Olion tietojäsenten alustustoimenpiteet sisältyvät erityiseen alustusta varten kirjoitettuun jäsenfunktioon, jota kutsutaan muodostimeksi (constructor). • Tätä kirjoitellessa luokassa ei voi olla useita kuormitettuja (overloaded) muodostimia. • Muodostimet voidaan jakaa kahteen ryhmään: tMyn
oletusmuodostin (default constructor) • Olion tietojäsenten alustus oletusarvoilla tai sitten arvot kysytään ohjelman käyttäjältä. • ohjelmoijan määrittelemät parametrilliset muodostimet • Olion tietojäsenten alustus ohjelmoijan tapauskohtaisesti määräämillä alkuarvoilla. tMyn
Overloading a function name: If you have two or more function definitions for the same function name, that is called overloading. When you overload a function name, the function definitions must have different number of formal parameters or some formal parameters of different types. When there is a function call, the compiler uses the function definition whose number of formal parameters and types of formal parameters match the arguments in the function call. tMyn
Luokkaan määritellään muodostin, jotta voitaisiin varmistaa, että olion tietojäsenet ovat alustettuja ja että ohjelma ei keskeydy ajonaikaiseen virheeseen tietojäsenen sisältöön viitattaessa. • Muodostimen tehtäväksi voidaan antaa myös vaikkapa tietokantayhteyden avaaminen. • Järjestelmä kutsuu muodostinta automaattisesti olion tilanvarauksen yhteydessä. tMyn
Oletusmuodostin (default constructor) alustaa olion tietojäsenet oletusarvoilla tai ohjelman käyttäjän antamilla arvoilla. • Oletusmuodostin voi olla järjestelmän generoima tai ohjelmoijan kirjoittama. • Järjestelmä generoi luokalle oletusmuodostimen vain, jos ohjelmoija ei ole toteuttanut luokkaan muodostinta. Järjestelmän generoima muodostin ei alusta tietojäseniä. • Järjestelmä kutsuu oletusmuodostinta automaattisesti olion tilanvarauksen yhteydessä. tMyn
Oletusmuodostimeksi voidaan myös kutsua muodostinta, joka kysyy ohjelman käyttäjältä arvot tietojäsenille! • Olion määrittely varaa oliolle keskusmuistitilan ja aiheuttaa automaattisesti oletusmuodostimen kutsun (jonka tulisi siis olla kernaasti ohjelmoijan tekemä!). tMyn
Oletusmuodostimen määrittelyssä on huomioitava mm. seuraavaa: • Oletusmuodostimen nimi on (luokan nimi käy myös) __construct(). • Oletusmuodostin ei saa parametreja. • Oletusmuodostimella ei ole tyyppiä, oletusmuodostin ei siis palauta return-lauseella mitään. • Oletusmuodostinta koskevat samat näkyvyyssäännöt kuin muitakin luokan jäsenfunktioita. • Oletusmuodostimeksi tulkitaan sellainen muodostin, jota voi kutsua ilman argumentteja. tMyn
Jos ohjelmoija haluaa olion tietojäsenet alustettavaksi tietyillä oletusalkuarvoilla, hänen on määriteltävä itse oletusmuodostin. • Toteutetaan oletusmuodostin ensiksi siten, että se alustaa olion tietojäsenet aina samoilla arvoilla (ei tietenkään ole käytännössä järkevää): tMyn
Varmistetaan seuraavaksi, että järjestelmän generoima oletusmuodostin ei ainakaan osaa alustaa tietojäseniä millään järjellisillä arvoilla: tMyn
Muutetaan seuraavaksi oletusmuodostinta siten, että ohjelman käyttäjä antaa tarvittavat arvot jäsenmuuttujille HTML-lomakkeen kautta: tMyn
Manuaalista voi lukea, että exit()-funktiolle voi antaa argumentiksi merkkijonon, joten tämä toimii aivan yhtä hyvin: tMyn
Edellinen esimerkki voidaan toteuttaa toki myös niin, että kaikki koodi kirjoitetaan yhteen tiedostoon. Silloin on järjestettävä asia niin, että assosiatiivisesta taulukosta ($_POST[]) ei lueta mitään ennen kuin lomakkeelle on annettu järkeviä arvoja: tMyn
Jos ohjelmoija haluaa alustaa oliot tilanvarauksen yhteydessä tapauskohtaisilla alkuarvoilla, ohjelmoija voi määritellä luokkaan parametrillisen muodostimen. • Parametrillinen muodostin on aina ohjelmoijan kirjoittama. • Parametrillisen muodostimen määrittelyssä noudatetaan samoja sääntöjä kuin oletusmuodostimen yhteydessä. tMyn
Huomaa kuitenkin seuraavat asiat: • Parametrillisen muodostimen parametreihin voidaan määritellä tarvittaessa myös oletusarvot. • Tätä kirjoitettaessa luokka ei voi sisältää useita erilaisilla parametreilla varustettuja muodostimia. • Parametrillinen muodostin, jonka kaikilla parametreilla on oletusarvo, toimii oletusmuodostimena! • Järjestelmä ei generoi oletusmuodostinta, jos ohjelmoija on määritellyt luokkaan parametrillisen muodostimen. tMyn
Muodostin on siltä osin samanlainen kuin mikä tahansa funktio: funktion muodolliselle parametrille voidaan antaa oletusarvo. • Mikäli kaikille muodollisille parametreille ei anneta oletusarvoja, niin silloin oletusarvojen antaminen on aloitettava oikeasta kulmasta, eikä parametreja saa ”jättää väliin”. • Oletusarvon on oltava vakiolauseke. tMyn
Tällä hetkellä (tätä kirjoitellessa) luokassa ei voi olla monta parametrillista muodostinta erilaisia alustustilanteita varten (muodostimen kuormittaminen): tMyn
Tällä hetkellä (tätä kirjoitellessa) luokassa ei voi olla omatekoista oletusmuodostinta ja parametrillista muodostinta yhtä aikaa toteutettuna: tMyn