Moniperintä
Moniperintä (engl. Multiple inheritance) on olio-ohjelmointikielen ominaisuus laajentaa toimintoja useasta luokasta perinnällä.
Kaikki perintää tukevat ohjelmointikielet eivät tue moniperintää tai asettavat rajoituksia sen käytölle.
Moniperinnän tarpeellisuudesta on kiistelty useita vuosia. Eräissä tapauksissa sen riskit katsotaan liian suuriksi verrattuna sen hyötyihin.[1]
Ohjelmointitason ongelmat voidaan ratkaista ilmankin moniperintää, mutta sen käyttö voi myös helpottaa toteutuksen tekemistä riippuen ratkaistavan ongelman laadusta.[2]
Virtuaalinen moniperintä[muokkaa | muokkaa wikitekstiä]
Niin sanotussa timanttimuodon moniperinnässä voi tulla vastaan tilanne, jossa periytynyt luokka saa kaksi toteutusta samasta kantaluokassa olevasta toteutuksesta. Yksiselitteinen viittaus perittyyn muuttujaan tai metodiin vaikeutuu vastaavassa tilanteessa.
C++ ratkaisee ongelman tukemalla virtuaalista moniperintää, jonka avulla periytyy vain yksi toteutus yhteisen kantaluokan jäsenistä.[3][4]
Toteutukset[muokkaa | muokkaa wikitekstiä]
Moniperintää tukevat kielet kuten C++, Eiffel, OCaml ja Scala.
Rajattua moniperintää (interface eli rajapintaperintää) tukevat kielet kuten Ada, C# ja Java.
Lähteet[muokkaa | muokkaa wikitekstiä]
- ↑ Multiple Inheritance Considered Useful Dr Dobbs. Viitattu 7.2.2017.
- ↑ Inheritance — Multiple and Virtual Inheritance isocpp.org. Viitattu 7.2.2017.
- ↑ Solving the Diamond Problem with Virtual Inheritance Cprogramming.com. Viitattu 8.2.2017.
- ↑ Inheritance — Multiple and Virtual Inheritance isocpp.org. Viitattu 8.2.2017.