Co je dynamická vazba?
V informatice je vazba názvu asociace identifikátoru, jako je název funkce nebo proměnné, k části kódu nebo dat. V nejběžnějším scénáři statické vazby je toto mapování známé při kompilaci. V dynamické vazbě není objekt mapovaný funkcí v době kompilace znám a lze jej určit pouze během doby běhu programu. Z tohoto důvodu se dynamická vazba nazývá také pozdní vazba. Ačkoli dynamické vázání nabízí flexibilitu, která není k dispozici u statického vázání, přináší také vyšší náklady na výkon než statické vázání.
Dynamická vazba úzce souvisí s polymorfismem, který je součástí objektově orientovaného programování. Polymorfismus umožňuje stejný název metody implementovat různými způsoby. Není-li kód zapsán takovým způsobem, že v době kompilace nelze určit přesnou metodu, musí být použita dynamická vazba.
Například třída „Shape“ může mít metodu nazvanou „GetArea“, protože každý tvar má oblast. „Kruh“ podtřídy „Shape“ by však implementoval „GetArea“ odlišně od způsobu, jakým by podtřída „Square“. Proto pokud je vytvořen nový objekt typu "Shape" a pokud kód na tomto tvaru volá metodu "GetArea", kompilátor nebude mít možnost vědět, zda tvar skončí jako kruh nebo čtverec, a proto nebude vědět, jakou metodu GetArea volat. Toto je příklad dynamické vazby, protože správná metoda GetArea bude namapována pouze v době spuštění, poté, co program ví, jaký tvar je objekt.
Dynamická vazba umožňuje flexibilitu při používání abstraktních metod, aniž by bylo jasné, která konkrétní implementace bude použita. V příkladu „Tvar“ by mohl být kód zapsán, aby se zabránilo dynamické vazbě explicitním použitím této logiky: Pokud je tvar kruh, zavolejte metodu GetArea kruhu; jinak, pokud je tvar čtverce, volejte specifickou metodu GetArea pro čtverce. Výhodou dynamické vazby je, že kód je čistší a udržovatelnější než alternativa. V příkladu statické vazby je duplicita kódu a kód musí být aktualizován kdykoli je přidán nový typ tvaru.
Nevýhody dynamického vázání jsou výkon a bezpečnost. Při statické vazbě kompilátor přesně ví, jaký kód má volat, a může optimalizovat kód tak, aby pracoval efektivněji. Bezpečnost typu může být problémem, protože v některých implementacích dynamické vazby může být metoda vyvolána na objektu, který nepodporuje metodu. Metoda „GetArea“ může být například vyvolána u objektu, který není tvarem, a proto nemá žádnou metodu „GetArea“, což by mohlo vést k chybě při běhu. Statická vazba by tomuto scénáři zabránila zvýšením chyby kompilace.