Skip to main content

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.En sirkel underklasse av form ville imidlertid implementere GetArea annerledes enn en firkantet underklasse ville.Derfor, hvis et nytt objekt er laget av typeform, og hvis kode 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 vitehvilken getArea -metode å ringe.Dette er et eksempel på dynamisk binding, fordi riktig getArea -metoden 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 vilbli brukt.I formeksemplet kan koden skrives for å unngå dynamisk binding ved eksplisitt å bruke denne logikken: Hvis formen er en sirkel, kan du kalle Circles getArea -metoden;Ellers, hvis formen er en firkant, kan du kalle den spesifikke getarea -metoden for firkanter.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.

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.