Kaj je dinamična vezava?

V računalništvu je vezava imen povezava identifikatorja, kot je ime funkcije ali spremenljivke, z delom kode ali podatkov. V najpogostejšem scenariju, statični vezavi, je ta preslikava znana v času prevajanja. Pri dinamični vezavi objekt, preslikan s funkcijo, ni znan v času prevajanja in ga je mogoče določiti samo med izvajanjem programa. Zaradi tega se imenuje tudi pozna vezava. Čeprav ponuja prilagodljivost, ki ni na voljo pri statični vezavi, vključuje tudi več stroškov delovanja kot statična vezava.

Dinamična vezava je tesno povezana s polimorfizmom, ki je del objektno usmerjenega programiranja. Polimorfizem omogoča, da se isto ime metode izvaja na različne načine. Če koda ni napisana tako, da natančne metode ni mogoče določiti v času prevajanja, je treba uporabiti dinamično vezavo.

Na primer, razred »Shape« ima lahko metodo, imenovano »GetArea«, ker ima vsaka oblika območje. Vendar pa bi podrazred “Circle” “Shape” izvajal “GetArea” drugače kot podrazred “Square”. Če je torej ustvarjen nov predmet tipa »Shape« in če koda pokliče metodo »GetArea« za to obliko, prevajalnik ne bo mogel vedeti, ali bo oblika na koncu krog ali kvadrat, zato ne bo vedel, katero metodo GetArea poklicati. To je primer dinamične vezave, ker bo pravilna metoda GetArea preslikana šele med izvajanjem, potem ko program ve, kakšne oblike je predmet.

Dinamična vezava omogoča fleksibilnost uporabe abstraktnih metod, ne da bi vedeli, katera specifična izvedba bo uporabljena. V primeru »Oblika« bi lahko zapisali kodo, da bi se izognili dinamični vezavi, z izrecno uporabo te logike: Če je oblika krog, pokličite krogovo metodo GetArea; sicer, če je oblika kvadrat, pokličite posebno metodo GetArea za kvadrate. Prednost dinamične vezave je, da je koda čistejša in bolj vzdržljiva kot alternativa. V primeru statične vezave obstaja podvajanje kode in kodo je treba posodobiti vsakič, ko je dodana nova vrsta oblike.

Pomanjkljivosti so zmogljivost in varnost. Pri statični vezavi prevajalnik natančno ve, katero kodo naj pokliče, in lahko optimizira kodo za učinkovitejše delovanje. Varnost tipov je lahko težava, ker je v nekaterih izvedbah dinamične vezave mogoče poklicati metodo na objektu, ki metode ne podpira. Metodo »GetArea« bi lahko na primer poklicali na objektu, ki ni oblika in zato nima metode »GetArea«, kar bi lahko povzročilo napako med izvajanjem. Statična vezava bi preprečila ta scenarij z dvigom napake pri prevajanju.