Perintä (ohjelmointi)

Wikipediasta
Siirry navigaatioon Siirry hakuun

Perintä (engl. inheritance) on olio-ohjelmoinnissa tapa muodostaa uusia luokkatyyppejä laajentamalla jo aiemmin määriteltyjä luokkia.[1] Uusi luokkatyyppi saa käyttöönsä kaikki yliluokkien ominaisuudet, joita ei ole yliluokasta käsin estetty perimästä. Aliluokan on myös mahdollista uudelleenmääritellä joitain yliluokan ominaisuuksia ja metodeita. Uudelleenmäärittelyn toteutus vaihtelee eri ohjelmointikielissä. Esimerkiksi C#:ssa vain yliluokan merkatut metodit voidaan uudelleenmääritellä, mutta Javassa metodi voidaan asettaa uudelleenmäärittelemään aikaisemmat metodit. Perinnän tarkoituksena on vähentää koodin uudelleenkirjoittamista.

Lisäksi, koska aliluokkaan voidaan lisätä ominaisuuksia, joita ei yliluokassa ollut, voidaan aliluokkaa pitää yliluokan erikoistapauksena. Esimerkiksi yliluokka voi olla Hedelmä, jonka aliluokkana on Omena. Tällöin Hedelmä-luokassa määritellään ominaisuudet, jotka ovat yhteisiä kaikille hedelmille, kuten paino ja Omena luokassa määritellään ominaisuudet, jotka kuuluvat kaikille omenoille, mutta eivät kuulu esimerkiksi päärynöille. Luokkien periytymisessä voidaan siis ajatella olevan "is-a"-suhde. Aliluokan oliot ovat siis tyypiltään myös yliluokan olioita. Tämä ei kuitenkaan päde toiseen suuntaan, esimerkiksi luokan Hedelmä-olio ei välttämättä ole luokan Päärynä-olio.

Moniperinnässä aliluokalla voi olla monta yliluokkaa. Esimerkiksi aliluokalla Tutkimusapulainen voi olla yliluokat Tutkija ja Opiskelija, joista molemmista aliluokka perii ominaisuuksia. Kaikki ohjelmointikielet eivät tue moniperintää. Yleisimmistä kielistä C++ tukee moniperintää. Sen sijaan esimerkiksi Java ja C# eivät tue moniperintää, mutta niissä luokka voi toteuttaa (implement) usean rajapinnan (interface) ominaisuuksia.

Periytyminen voi myös tapahtua monitasoisesti. Esimerkiksi yliluokalla Hedelmä voi olla aliluokka Omena, jolla edelleen voi olla aliluokka Royal Gala. Tällöin siis luokka Royal Gala perii kaikki molempien yliluokkien ominaisuudet.

Esimerkki[muokkaa | muokkaa wikitekstiä]

Esimerkkinä yliluokka Vihannes Java-kielessä.

public interface Vihannes {

	private byte palautaPaino();
}

Aliluokka Kurkku, joka perii yliluokan ominaisuudet.

public class Kurkku implements Vihannes {

	private static final byte PAINO = 60;

	@Override
	private byte palautaPaino() {
		return PAINO;
	}
	
	public void tulostaPaino() {
		System.out.println("Kurkun paino on: "+paino+"g.");
	}
}

Historia[muokkaa | muokkaa wikitekstiä]

Vuonna 1966 tietojenkäsittelytieteilijä Tony Hoare esitti idean tietueiden alaluokista, siis tietuetyypeistä, joilla on yhteisiä ominaisuuksia, mutta jotka ovat erotettuina toisistaan omilla tunnisteillaan, ja joilla on tiettyjä itselleen erityisiä ominaisuuksia. Tämän vaikutuksesta norjalaiset tietojenkäsittelytieteilijät Ole-Johan Dahl ja Kristen Nygaard esittivät mallin, joka mahdollisti eritellä olioita, jotka kuuluivat eri luokkiin, mutta joilla oli yhteisiä ominaisuuksia. Yhteiset ominaisuudet sitten koottiin yhteen yliluokkaan, jolla itsellään oli mahdollisesti myös yliluokka. Aliluokan ominaisuudet olivat täten yhdistelmä sen kaikkien yliluokkien ominaisuuksista, sekä aliluokan omista ominaisuuksista. Ensimmäinen ohjelmointikieli, johon tämä idea implementoitiin, oli Simula 67.

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. Wheeler, David A.: Section 7.2 - Object-Oriented Programming in Ada: Inheritance dwheeler.com. Viitattu 27.8.2017.
Tämä tietotekniikkaan liittyvä artikkeli on tynkä. Voit auttaa Wikipediaa laajentamalla artikkelia.