Luokkapohjaisessa olio-ohjelmoinnissa instanssimuuttuja eli ilmentymämuuttuja on luokassa määritetty muuttuja, jolle jokaisella luokan ilmennetyllä oliolla on oma kopio tai instanssi . Ilmentymämuuttujalla on yhtäläisyyksiä luokkamuuttujan [1] kanssa, mutta se ei ole staattinen. Ilmentymämuuttuja on muuttuja, joka on luotu luokassa, mutta joka on rakentajien, metodien tai lohkojen ulkopuolella. Instanssimuuttujat luodaan, kun olio instantoidaan, ja ne ovat kaikkien luokan rakentajien, metodien ja lohkojen käytettävissä. Instanssimuuttujalle voidaan antaa pääsymäärityksiä.

Instanssimuuttuja ei ole luokkamuuttuja, vaikka niissä on yhtäläisyyksiä. Se on tyypiltään luokkaattribuutti (tai luokan ominaisuus, kenttä tai tietojäsen). Sama dikotomia instanssin ja luokan jäsenten välillä koskee myös metodeja ("jäsenfunktioita"); luokassa voi olla sekä instanssimetodeja että luokkametodeja.

Jokainen instanssimuuttuja elää muistissa sen omistaman olion eliniän ajan.[2]

Muuttujat ovat ominaisuuksia, jotka olio tietää itsestään. Kaikilla olion instansseilla on omat kopionsa instanssimuuttujista, vaikka arvo olisi sama oliosta toiseen. Yksi olioinstanssi voi muuttaa instanssimuuttujiensa arvoja vaikuttamatta muihin instansseihin. Instanssimuuttujia voidaan käyttää kaikissa luokan metodeissa, ellei metodia ole asetettu staattiseksi. [3]

Esimerkki

muokkaa
struct Request {

    static int count1; // muuttujan nimellä ei ole merkitystä
    int number;

    Request() {
        number = count1; // muuttaa instanssimuuttujaa "this->number"
        ++count1; // muuttaa luokkamuuttujaa "Request::count1"
    }

};

int Request::count1 = 0;

Tässä C++- esimerkissä instanssimuuttuja Request::number on kopio luokkamuuttujasta Request::count1, jossa jokaiselle rakennetulle instanssille annetaan peräkkäisarvo count1 ennen sen kasvattamista . Koska number on instanssimuuttuja, jokainen Request olio sisältää oman erillisen arvonsa; sitä vastoin kaikille instansseille, joilla on sama arvo, on vain yksi olio Request::count1 .

Lähteet

muokkaa
  1. The Java Tutorial, Variables docs.oracle.com. Oracle. Arkistoitu 23 October 2014. Viitattu 23 October 2014.
  2. The Java Tutorials, Understanding Class Members docs.oracle.com. Oracle. Arkistoitu 11 October 2014. Viitattu 23 October 2014.
  3. Matuszek: Static cis.upenn.edu. University of Pennsylvania. Arkistoitu 23 October 2014. Viitattu 23 October 2014.