Vad är dynamiskt bindande?

I datavetenskap är namnbindning föreningen för en identifierare, såsom en funktion eller variabelt namn, till ett avsnitt av kod eller data. I det vanligaste scenariot, statisk bindning, är denna kartläggning känd vid sammanställningstid. Vid dynamisk bindning är objektet mappat av en funktion inte känd vid sammanställningstid och kan endast bestämmas under programkörningstiden. Av denna anledning kallas dynamisk bindning också sen bindning. Även om dynamisk bindning erbjuder flexibilitet som inte är tillgänglig med statisk bindning, innebär det också fler prestandakostnader än statisk bindning.

dynamisk bindning är nära besläktad med polymorfism, som är en del av objektorienterad programmering. Polymorfism gör det möjligt att implementera samma metodnamn på olika sätt. Om koden inte är skriven på ett sådant sätt att den exakta metoden inte kan bestämmas vid kompileringstid, måste dynamisk bindning användas.

till exempel en "form" CLASS kan ha en metod som kallas "getarea", eftersom varje form har ett område. En "cirkel" underklass av "form" skulle dock implementera "getarea" annorlunda än en "fyrkantig" underklass skulle göra. Därför, om ett nytt objekt skapas av typ "form", och om koden kallar metoden "getarea" på den formen, kommer kompilatorn inget sätt att veta om formen kommer att bli en cirkel eller en fyrkant, och därför kommer den inte att veta vilken Getarea -metod att kalla. Detta är ett exempel på dynamisk bindning, eftersom den korrekta getArea -metoden kommer att kartläggas endast vid körning, efter att programmet vet vilken typ av form objektet är.

dynamisk bindning möjliggör flexibilitet att använda abstrakta metoder utan att veta vilken specifik implementering som kommer att användas. I exemplet "form" kan koden skrivas för att undvika dynamisk bindning genom att uttryckligen använda denna logik: om formen är en cirkel, ring sedan cirkelns getarea -metod; Annars, om formen är en fyrkant, ring den specifika getArea -metoden förrutor. Fördelen med dynamisk bindning är att koden är renare och mer underhållbar än alternativet. I det statiska bindande exemplet finns det kodduplikation, och koden måste uppdateras när som helst en ny typ av form läggs till.

Nackdelarna med dynamisk bindning är prestanda och säkerhet. Vid statisk bindning vet kompilatorn exakt vilken kod som ska ringas och kan optimera koden för att köra mer effektivt. Typsäkerhet kan vara ett problem eftersom en metod i vissa implementeringar av dynamisk bindning kan kallas på ett objekt som inte stöder metoden. Till exempel kan metoden "getarea" kallas på ett objekt som inte är en form och därför inte har någon "getarea" -metod, vilket kan resultera i ett körtidsfel. Statisk bindning skulle förhindra detta scenario genom att höja ett kompileringsfel.

ANDRA SPRÅK

Hjälpte den här artikeln dig? Tack för feedbacken Tack för feedbacken

Hur kan vi hjälpa? Hur kan vi hjälpa?