Što je dinamičko uvezivanje?

U informatici, vezanje imena je povezivanje identifikatora, kao što je naziv funkcije ili varijable, s dijelom koda ili podataka. U najčešćem scenariju, statičkom povezivanju, ovo mapiranje je poznato u vrijeme prevođenja. U dinamičkom povezivanju, objekt mapiran od strane funkcije nije poznat u vrijeme prevođenja i može se odrediti samo tijekom vremena izvođenja programa. Iz tog razloga se naziva i kasno uvezivanje. Iako nudi fleksibilnost koja nije dostupna kod statičkog uvezivanja, također uključuje više troškova izvedbe od statičkog uvezivanja.

Dinamičko vezanje usko je povezano s polimorfizmom, koji je dio objektno orijentiranog programiranja. Polimorfizam omogućuje implementaciju istog naziva metode na različite načine. Ako kod nije napisan na takav način da se precizna metoda ne može odrediti u vrijeme prevođenja, tada se mora koristiti dinamičko vezanje.

Na primjer, klasa “Shape” može imati metodu pod nazivom “GetArea”, jer svaki oblik ima područje. Međutim, podklasa “Krug” od “Shape” implementirala bi “GetArea” drugačije od načina na koji bi podklasa “Kvadrat”. Stoga, ako se stvori novi objekt tipa “Shape” i ako kod pozove metodu “GetArea” na tom obliku, prevodilac neće imati načina da zna hoće li oblik na kraju biti krug ili kvadrat, te stoga neće znati koju metodu GetArea pozvati. Ovo je primjer dinamičkog povezivanja, jer će ispravna GetArea metoda biti mapirana samo u vrijeme izvođenja, nakon što program zna kakvog je oblika objekt.

Dinamičko uvezivanje omogućuje fleksibilnost korištenja apstraktnih metoda bez znanja koja će se specifična implementacija koristiti. U primjeru “Oblik”, kod bi se mogao napisati kako bi se izbjeglo dinamičko vezanje eksplicitnom upotrebom ove logike: Ako je oblik krug, onda pozovite krug GetArea metodu; inače, ako je oblik kvadrat, pozovite specifičnu GetArea metodu za kvadrate. Prednost dinamičkog povezivanja je u tome što je kod čišći i lakši za održavanje od alternative. U primjeru statičkog povezivanja postoji umnožavanje koda, a kod se mora ažurirati svaki put kada se doda nova vrsta oblika.

Nedostaci su performanse i sigurnost. U statičkom povezivanju, prevodilac točno zna koji kod treba pozvati i može optimizirati kod za učinkovitije izvođenje. Sigurnost tipa može biti problem jer se u nekim implementacijama dinamičkog vezanja metoda može pozvati na objektu koji ne podržava metodu. Na primjer, metoda “GetArea” može se pozvati na objektu koji nije oblik i stoga nema metodu “GetArea”, što bi moglo rezultirati pogreškom tijekom izvođenja. Statičko vezanje spriječilo bi ovaj scenarij podizanjem greške pri prevođenju.