Skip to main content

Vad är dynamiskt bindande?

I datavetenskap är namnbindning föreningen för en identifierare, till exempel 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 sammanställningstid, måste dynamisk bindning användas.

Till exempel kan en formklass ha en metod som kallas getarea, eftersom varje form har ett område.En cirkelunderklass av form skulle dock implementera Getarea annorlunda än en fyrkantig underklass.Därför, om ett nytt objekt skapas av typform, och om kod 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 vetavilken getarea -metod att ringa.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 tillåter flexibiliteten att använda abstrakta metoder utan att veta vilken specifik implementering kommeranvändas.I formexemplet kan koden skrivas för att undvika dynamisk bindning genom att uttryckligen använda denna logik: om formen är en cirkel, ring sedan Circles Getarea -metoden;Annars, om formen är en fyrkant, ring den specifika getarea -metoden för rutor.Fördelen med dynamisk bindning är att koden är renare och mer underhållbar än alternativet.I det statiska bindande exemplet finns det kodduplicering, 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 GetArea-metoden 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.