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 en "form" CLASS har muligvis en metode kaldet "GetArea", fordi enhver form har et område. En "cirkel" underklasse af "form" ville imidlertid implementere "getarea" forskelligt fra den måde, en "firkantet" underklasse ville. Derfor, hvis et nyt objekt er oprettet af type "form", og hvis kode kalder metoden "getarea" på den form, vil kompilatoren ikke have nogen måde at vide, om formen ender med at blive en cirkel eller en firkant, og derfor vil den ikke vide, hvilken GetArea -metode at ringe til. 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 muliggør fleksibilitet ved at bruge abstrakte metoder uden at vide, hvilken specifik implementering der vil blive brugt. I eksemplet "Formen" kunne koden skrives for at undgå dynamisk binding ved eksplicit at bruge denne logik: Hvis formen er en cirkel, skal du ringe til Circle's GetArea -metoden; ellers, hvis formen er en firkant, skal du ringe til den specifikke GetArea -metode forfirkanter. 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 tilføjes.
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 muligvis 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.