Hva er dynamisk binding?
I informatikk er navnbinding assosiasjonen til en identifikator, for eksempel en funksjon eller variabelnavn, til en del av koden eller dataene. I det vanligste scenariet, statisk binding, er denne kartleggingen kjent på kompileringstidspunktet. Ved dynamisk binding er objektet som er kartlagt av en funksjon ikke kjent ved kompileringstid og kan bare bestemmes under programløpstid. Av denne grunn kalles dynamisk binding også sent binding. Selv om dynamisk binding gir fleksibilitet som ikke er tilgjengelig med statisk binding, innebærer det også flere ytelseskostnader enn statisk binding.
Dynamisk binding er nært relatert til polymorfisme, som er en del av objektorientert programmering. Polymorfisme gjør at samme metodenavn kan implementeres på forskjellige måter. Hvis koden ikke er skrevet på en slik måte at den nøyaktige metoden ikke kan bestemmes på kompileringstidspunktet, må dynamisk binding brukes.
For eksempel en "form" CLASS kan ha en metode som heter "getarea", fordi hver form har et område. En "sirkel" underklasse av "form" ville imidlertid implementere "getarea" annerledes enn en "firkantet" underklasse ville. Derfor, hvis et nytt objekt er laget av type "form", og hvis koden kaller metoden "getArea" på den formen, vil kompilatoren ikke ha noen måte å vite om formen vil ende opp med å være en sirkel eller en firkant, og derfor vil den ikke vite hvilken getArea -metode å ringe. Dette er et eksempel på dynamisk binding, fordi riktig getArea -metode bare vil bli kartlagt ved kjøretid, etter at programmet vet hva slags form objektet er.
Dynamisk binding tillater fleksibiliteten ved å bruke abstrakte metoder uten å vite hvilken spesifikk implementering som skal brukes. I "form" -eksemplet kan koden skrives for å unngå dynamisk binding ved eksplisitt å bruke denne logikken: Hvis formen er en sirkel, kan du kalle sirkelens getarea -metode; ellers, hvis formen er en firkant, kan du kalle den spesifikke getarea -metoden forfirkanter. Fordelen med dynamisk binding er at koden er renere og mer vedlikeholdbar enn alternativet. I det statiske bindingseksemplet er det kodeduplisering, og koden må oppdateres når som helst en ny type form legges til.
Ulempene med dynamisk binding er ytelse og sikkerhet. I statisk binding vet kompilatoren nøyaktig hvilken kode som skal ringe og kan optimalisere koden for å kjøre mer effektivt. Type sikkerhet kan være et problem fordi, i noen implementeringer av dynamisk binding, kan en metode kalles på et objekt som ikke støtter metoden. For eksempel kan "getArea" -metoden kalles på et objekt som ikke er en form og derfor ikke har noen "getArea" -metode, noe som kan føre til en kjøretidsfeil. Statisk binding ville forhindre dette scenariet ved å heve en kompileringsfeil.