Myöhäinen sidonta

Wikipedia
Loikkaa: valikkoon, hakuun

Myöhäinen sidonta eli dynaaminen sidonta tarkoittaa muuttujan tyypin päättelemistä vasta suoritusvaiheessa. Usein tämä liittyy olio-ohjelmointiin ja perintään, mutta sitä käytetään myös ohjelmointikielissä, jotka eivät varsinaisesti tue perintää. Esimerkiksi Visual Basic 6:ssa voidaan muuttujan tyypiksi määritellä Variant, jolloin siihen voi sijoittaa minkä tahansa tyypin. Vasta suoritusvaiheessa tarkistetaan, että muuttujaan sijoitettua tyyppiä käytetään oikein, esimerkiksi tarkistetaan, että muuttujalta löytyvät ohjelmassa käytetyt ominaisuudet.

Jos ohjelmointikieli tukee perintää, myöhäisen sidonnan käyttökelpoisuus on helpommin ymmärrettävissä. Jos vaikka oletetaan toteutettavaksi yksinkertainen shakkipeliä mallintava ohjelma, voidaan määritellä luokka ShakkiNappula, jolla on muiden muassa metodit, jotka palauttavat nappulan sijainnin ja mahdolliset ruudut, johon nappula voisi kyseisestä sijainnista siirtyä. Pelin erilaiset nappulat periytyisivät ShakkiNappula-luokasta ja niitä olisivat esimerkiksi Torni, Lähetti, Kuningas jne. Nappulan sijainti on kaikilla nappuloilla se ruutu, jolla nappula on. Sen palauttava metodi siis voitaisiin toteuttaa kaikille nappulatyypeille samalla tavoin. Tällöin sen luontevin paikka olisi luokassa ShakkiNappula, jolloin luokan perilliset saisivat metodin käyttöön automaattisesti.

Eri nappulatyypit liikkuvat hyvin eri tavoin. Jos mahdolliset siirrot palauttava metodi tehtäisiin luokkaan ShakkiNappula, metodista tulisi melko pitkä. Luultavasti siinä olisi useita ehtolauseita, yksi kullekin nappulatyypille ja kussakin haarassa käsiteltäisiin kyseisen nappulatyypin mahdolliset siirrot. Myöhäisen sidonnan ansiosta metodi voidaan kuitenkin toteuttaa siten, että ShakkiNappula-luokassa vain kerrotaan siirrot palauttavan metodin olevan olemassa ja kukin nappulatyyppi antaa metodille oman toteutuksensa. Torni-luokassa metodi siis palauttaa mahdolliset ruudut vaaka- ja pystyriveiltä, Lähetti-luokassa metodi puolestaan palauttaa mahdolliset ruudut vinoriveiltä jne. Kunkin nappulatyypin metodi on varsin lyhyt eikä siinä tarvitse välittää muiden nappulatyyppien mahdollisista siirroista.

Jos pelilaudan nappulat sijoitetaan taulukkoon, jonka alkiot ovat tyyppiä ShakkiNappula, voidaan taulukko käydä läpi ja tulostaa kullekin nappulalle sen sijainti ja mahdolliset siirrot. Sijainnin tulostamiseen käytetään ShakkiNappula-luokassa olevaa metodia. Myöhäinen sidonta aiheuttaa sen, että kun taulukon alkiolta kysytään sen mahdollisia siirtoja, vasta metodin kutsuvaiheessa päätetään, minkä luokan metodia käytetään. Kuningas-luokan oliolle käytetään siis sen luokan omaa metodia, Torni-luokan olioille omaansa, vaikka molempien luokkien oliot on sijoitettu ShakkiNappula-tyyppiseen taulukkoon.