Hvad er dynamisk binding?
I datalogi er navnebinding tilknytning af en identifikator, såsom en funktion eller variabelnavn, 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 i løbet af programkørselstiden. Af denne grund kaldes dynamisk binding også for sen binding. Selvom dynamisk binding tilbyder fleksibilitet, der ikke er tilgængelig med statisk binding, medfører det også flere ydelsesomkostninger end statisk binding.
Dynamisk binding er tæt knyttet til polymorfisme, som er en del af objektorienteret programmering. Polymorfisme gør det muligt at implementere den samme metodenavn 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 bruges dynamisk binding.
For eksempel kan en "Shape" -klasse have en metode kaldet "GetArea", fordi hver form har et område. En "Circle" -underklasse af "Shape" ville imidlertid implementere "GetArea" anderledes end den måde, en "Square" -underklasse ville gøre. Derfor oprettes et nyt objekt af typen "Form", og hvis kode kalder metoden "GetArea" på den form, har compileren ingen måde at vide, om formen ender med at blive en cirkel eller en firkant, og derfor det ved ikke, hvilken GetArea-metode, der skal kaldes. Dette er et eksempel på dynamisk binding, fordi den korrekte GetArea-metode kun kortlægges ved kørselstidspunktet, efter at programmet ved, hvilken type form objektet er.
Dynamisk binding giver fleksibiliteten ved at bruge abstrakte metoder uden at vide, hvilken specifik implementering der vil blive brugt. I eksemplet "Form" kunne koden skrives for at undgå dynamisk binding ved eksplicit at bruge denne logik: Hvis formen er en cirkel, skal du kalde cirklens GetArea-metode; Ellers, hvis formen er en firkant, skal du kalde den specifikke GetArea-metode til firkanter. Fordelen ved dynamisk binding er, at koden er renere og mere vedligeholdelig end alternativet. I det statiske bindende eksempel er der kodeduplicering, og koden skal opdateres når som helst en ny type form tilføjes.
Ulemperne ved dynamisk binding er ydelse og sikkerhed. Ved statisk binding ved kompilatoren nøjagtigt, hvilken kode den skal kalde og kan optimere koden til at køre mere effektivt. Typesikkerhed kan være et problem, fordi der i nogle implementeringer af dynamisk binding kan kaldes en metode til et objekt, der ikke understøtter metoden. F.eks. Kan "GetArea" -metoden kaldes på et objekt, der ikke er en form, og har derfor ingen "GetArea" -metode, hvilket kan resultere i en kørselsfejl. Statisk binding ville forhindre dette scenarie ved at rejse en kompileringsfejl.