Hva er dynamisk innbinding?
I informatikk er navnebinding tilknytning av en identifikator, for eksempel en funksjon eller variabelnavn, til en del av kode eller data. 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 på kompileringstidspunktet og kan bare bestemmes i løpet av programkjøringstiden. Av denne grunn kalles også dynamisk binding for senbinding. 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 knyttet til polymorfisme, som er en del av objektorientert programmering. Polymorfisme gjør det mulig å implementere samme metodenavn 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 kan en "Shape" -klasse ha en metode som heter "GetArea", fordi hver form har et område. En "Circle" underklasse av "Shape" ville imidlertid implementere "GetArea" annerledes enn slik en "Square" underklasse ville gjort. Derfor, hvis et nytt objekt er laget av typen "Shape", og hvis koden kaller metoden "GetArea" på den formen, vil kompilatoren ikke ha noen måte å vite om formen vil ende opp som en sirkel eller en firkant, og derfor den vil ikke vite hvilken GetArea-metode du vil 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 gjør det mulig å bruke abstrakte metoder uten å vite hvilken spesifikk implementering som skal brukes. I "Shape" -eksemplet kan koden skrives for å unngå dynamisk binding ved eksplisitt å bruke denne logikken: Hvis formen er en sirkel, kan du ringe sirkelens GetArea-metode; Ellers, hvis formen er en kvadrat, kan du ringe 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 en ny type form legges til.
Ulempene med dynamisk binding er ytelse og sikkerhet. Når det gjelder statisk innbinding, vet kompilatoren nøyaktig hvilken kode de skal ringe, og kan optimalisere koden for å kjøre mer effektivt. Typesikkerhet 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 har derfor ingen "GetArea" -metode, noe som kan føre til en kjøretidsfeil. Statisk binding vil forhindre dette scenariet ved å reise en kompilasjonsfeil.