Skip to main content

Hvad er dynamisk binding?

I datalogi er navnebinding foreningen af en identifikator, såsom en funktion eller variabel navn, til et afsnit af kode eller data.I det mest almindelige scenarie, statisk binding, er denne kortlægning kendt på kompileringstidspunktet.Ved dynamisk binding er objektet, der er kortlagt af en funktion, ikke kendt på kompileringstidspunktet og kan kun bestemmes under programkørselstid.Af denne grund kaldes dynamisk binding også sen binding.Selvom dynamisk binding giver fleksibilitet, der ikke er tilgængelig med statisk binding, indebærer den også flere ydelsesomkostninger end statisk binding.

Dynamisk binding er tæt knyttet til polymorfisme, som er en del af objektorienteret programmering.Polymorfisme tillader, at det samme metodnavn implementeres på forskellige måder.Hvis koden ikke er skrevet på en sådan måde, at den nøjagtige metode ikke kan bestemmes på kompileringstidspunktet, skal der anvendes dynamisk binding.

For eksempel kan en formklasse have en metode kaldet GetArea, fordi enhver form har et område.En cirkelunderklasse af form, ville imidlertid implementere GetArea forskelligt fra den måde, en firkantet underklasse ville.Derfor, hvis et nyt objekt er oprettet af typeform, og hvis kode kalder metoden GetArea på den form, vil kompilatoren ikke have nogen måde at vide, om formen ender med at være en cirkel eller en firkant, og derfor vil den ikke videHvilken GetArea -metode skal kalde.Dette er et eksempel på dynamisk binding, fordi den korrekte GetArea -metode kun vil blive kortlagt på kørselstidspunktet, efter at programmet ved, hvilken slags form objektet er.

Dynamisk binding giver fleksibiliteten ved at bruge abstrakte metoder udenbruges.I formeksemplet kunne koden skrives for at undgå dynamisk binding ved eksplicit at bruge denne logik: Hvis formen er en cirkel, skal du ringe til Circles GetArea -metoden;Ellers, hvis formen er en firkant, skal du ringe til den specifikke GetArea -metode til firkanter.Fordelen ved dynamisk binding er, at koden er renere og mere vedligeholdelig end alternativet.I det statiske bindingseksempel er der kodeduplikation, og koden skal opdateres når som helst En ny type form tilsættes.

Ulemperne ved dynamisk binding er ydeevne og sikkerhed.Ved statisk binding ved kompilatoren nøjagtigt, hvilken kode der skal ringes og kan optimere koden for at køre mere effektivt.Typesikkerhed kan være et problem, fordi en metode i nogle implementeringer af dynamisk binding kan kaldes på et objekt, der ikke understøtter metoden.For eksempel kan GetArea-metoden kaldes på et objekt, der ikke er en form og derfor ikke har nogen GetArea-metode, hvilket kan resultere i en kørselstidsfejl.Statisk binding ville forhindre dette scenarie ved at hæve en kompileringsfejl.