Prev Next Up Title Contents Index

Varhainen ja myöhäinen sidonta

Eräs tärkeä monimuotoisuuteen liittyvä käsite on myöhäinen sidonta (late binding). Tämä viittaa siihen, että laskentaympäristö vasta ajonaikana päättää, mitä funktiota on käytettävä kun kutsutaan monimuotoista funktiota. Varhaisessa sidonnassa (early binding) kääntäjä käännösaikana tutkii olion luokan ja tuottaa koodiin kutsun oikean luokan metodiin. Tämä tarkoittaa sitä, että kääntäjän on käännösaikana pystyttävä päättämään, minkä tyyppinen kukin olio on. Tämä voi tuottaa ongelmia, mikäli aliluokassa on määritelty uudestaan yliluokassa määritelty metodi ja kääntäjä ei voi tietää onko käsiteltävä yliluokan olio todellisuudessa (tyyppiyhteensopiva) aliluokan olio.

C++:ssa tämä ongelma on ratkaistu nk. virtuaalisilla funktioilla, joissa olioihin on talletettu osoitin luokka- spesifiseen taulukkoon sen luokan omista metodeista. Olkoon esimerkiksi yliluokka Graphical_Object yhteinen Circle-, Rectangle- ja Line-luokille ja kaikissa määritelty virtuaalinen Draw-metodi. Jos vaikkapa ympyrä välitetään parametrina aliohjelmalle, joka haluaa Graphical_Object-olion, ja kutsuu tämän Draw-metodia, tapahtuu kutsu hakemalla olioon talletetun osoittimen (vptr = virtual pointer) päästä Circle-luokan Draw-metodi ja kutsumalla sitä.


Prev Next Up Title Contents Index