Skip to main content

Co je dynamická vazba?

V počítačové vědě je vazba názvu asociací identifikátoru, jako je funkce nebo název proměnné, na část kódu nebo dat.V nejběžnějším scénáři, statické vazbě je toto mapování známo v době kompilace.V dynamické vazbě není objekt mapovaný funkcí známý v době kompilace a může být stanoven pouze během doby běhu programu.Z tohoto důvodu se dynamická vazba také nazývá pozdní vazba.Ačkoli dynamická vazba nabízí flexibilitu, která není k dispozici se statickou vazbou, také zahrnuje více nákladů na výkon než statická vazba.

Dynamická vazba úzce souvisí s polymorfismem, který je součástí objektově orientovaného programování.Polymorfismus umožňuje implementovat stejný název metody různými způsoby.Pokud kód není zapsán takovým způsobem, že přesná metoda nelze určit v době kompilace, musí být použita dynamická vazba.Kruhová podtřída tvaru by však implementovala Getrearea odlišně od způsobu, jakým by byla čtvercová podtřída.Pokud je tedy vytvořen nový objekt tvaru typu, a pokud kód volá metodu GetArea v tomto tvaru, nebude kompilátor mít žádný způsob, jak vědět, zda tvar skončí jako kruh nebo čtverec, a proto to nebude vědětKterá metoda getrearea, která má volat.Toto je příklad dynamické vazby, protože správná metoda Getrearea bude mapována pouze za běhu, poté, co program ví, jaký tvar je objekt.být použit.V příkladu tvaru lze kód zapsat, aby se zabránilo dynamické vazbě explicitním použitím této logiky: Pokud je tvar kruhem, zavolejte metodu Circles GetArea;Jinak, pokud je tvar čtvercem, zavolejte konkrétní metodu Getrearea pro čtverce.Výhodou dynamické vazby je, že kód je čistší a udržovatelnější než alternativa.V příkladu statické vazby dochází k duplicitě kódu a kód musí být aktualizován kdykoli je přidán nový typ tvaru.

Nevýhody dynamické vazby jsou výkon a bezpečnost.Ve statické vazbě kompilátor přesně ví, jaký kód má volat, a může optimalizovat kód pro efektivnější spuštění.Bezpečnost typu může být problémem, protože v některých implementacích dynamické vazby lze metodu vyvolat na objekt, který tuto metodu nepodporuje.Například metoda GetArea může být vyvolána na objekt, který není tvarem, a proto nemá žádnou metodu GetArea, což by mohlo vést k chybě běhu.Statická vazba by tomuto scénáři zabránila zvýšením chyby kompilace.