Konstruktori eli rakentaja tai muodostin on olio-ohjelmoinnissa käytetty termi luokan erikoistyyppiselle metodille, joka sallii olion konfiguroimisen välittömästi sen luomisen yhteydessä. Konstruktorit ottavat yleensä parametreinaan arvoja, joita se asettaa luodun olion jäsenmuuttujien arvoiksi, valmistellakseen olion käyttöä varten, mutta se voidaan myös kirjoittaa olemaan ottamatta lainkaan ulkoisia parametreja.

Konstruktori muistuttaa instanssimetodia, mutta toisin kuin metodilla, rakentajalla ei ole selkeää palautusarvoa, se ei ole implisiittisesti periytynyt ja sitä yleensä koskevat erityiset säännöt näkyvyysmääreiden kohdalla. Konstruktorit nimetään useimmiten samalla nimellä kuin luokat, joista ne löytyvät. Konstruktori alustaa olion muuttujat sekä rajaa olion tilaan liittyvät tiedot.[1]

Useimmat ohjelmointikielet sallivat konstruktorin kuormituksen, joka tarkoittaa useamman samalla nimellä olevan konstruktorin kirjoittamista, jotka kuitenkin saavat argumentteinaan eri tyyppiset tai eri määrän parametreja, tällöin sallien luokan instanssien luomisen käyttäen eri parametreja.[2]

Konstruktori tyypit muokkaa

Olio-ohjelmoinnissa on useita erilaisia konstruktorityyppejä, joista jokaisella on omat ainutlaatuiset ominaisuutensa:

Oletuskonstruktorit muokkaa

Olio-ohjelmointikielissä (kuten Javassa), kun ohjelmoija ei eksplisiittisesti määrittele konstruktoria, kääntäjä luo sellaisen. Periaatteessa oletuskonstruktorit asettavat tiedot oletusarvoihin. Yleensä se on nullary konstruktori, jota voidaan kutsua ilman argumentteja. Lisäksi oletuskonstruktori puuttuu lähdekooditiedostosta ja se luodaan .class-tiedostoon käännösvaiheessa.[1]

Parametroidut konstruktorit muokkaa

Konstruktoria, joka ottaa yhden tai useamman argumentin, kutsutaan parametroiduiksi konstruktoriksi. Parametrisoidun konstruktorin käytettäessä konstruktorifunktion on hyväksyttävä alkuarvot argumenteiksi. Joissakin olio-ohjelmointikielissä parametrisoitu konstruktori voidaan kutsua kahdella eri tavalla: eksplisiittisesti ja implisiittisesti[1]. Javassa eksplisiittisen kutsun aikana käytetään "new" avainsanaa ja vaaditut arvot välitetään argumentteina konstruktorille. Implisiitti (eli shorthand) menetelmä toisaalta parantaa suuresti syntaksin tiiviyttä ja koodin luettavuutta.

Kopiomuodostimet muokkaa

Erityinen konstruktorityyppi, jota käytetään uuden olion luomiseen saman luokan olemassa olevan olion kopiona, kutsutaan kopiomuodostimeksi. Kopiomuodostin ottaa yleensä viitteen saman luokan olioon argumenttina, ja sen yleinen tavoite on luoda identtinen kopio argumentiksi otetusta oliosta. Javassa toinen tapa kopioida olio on Cloneable-rajapinnan[3] toteuttamisen kautta, joka on matalan tason kopiointitekniikka.[4]

Muunnosrakentajat muokkaa

Jotkin olio-ohjelmointikielet (ensisijaisesti C++) sisältävät myös muunnosrakentajia, joiden avulla kääntäjä voi implisiittisesti luoda luokkaan kuuluvan olion toisesta tyypistä. Muunnosrakentajia voidaan kutsua myös eksplisiittisesti.[1]

Lähteet muokkaa

  1. a b c d Constructor (object-oriented programming). Wikipedia, 27.11.2022. Artikkelin verkkoversio. en
  2. Asikainen Eetu, Vanhala Erno: LUT-ohjelmoinnin-perusteet-ohjelmointiopas github.com. 19.1.2023. Viitattu 4.4.2023.
  3. Java™ Platform Standard Ed. 8: Interface Cloneable
  4. Vanhala Erno: Olioiden kopioinnista LUT CT60A2411 Olio-ohjelmointi. Linkki.