Co je dynamická vazba?

V informatice je vazba názvu asociace 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, zahrnuje také více nákladů na výkon než statická vazba. Polymorfismus umožňuje implementovat stejný název metody různými způsoby. Pokud kód není napsán takovým způsobem, že přesná metoda nelze stanovit v době kompilace, musí být použita dynamická vazba.

Například „tvar“ CLASS může mít metodu zvanou „getrearea“, protože každý tvar má oblast. „Kruhový“ podtřída „tvaru“ by však implementovala „Getrearea“ odlišně od způsobu, jakým by podtřída „čtvercové“. Proto, pokud je vytvořen nový objekt z typu „tvaru“, a pokud kód nazývá metodu „getArea“ v tomto tvaru, nebude kompilátor mít žádný způsob, jak vědět, zda tvar skončí jako kruh nebo čtvercový, a proto nebude vědět, kterou metodu GetArea volá. Toto je příklad dynamické vazby, protože správná metoda GetArea bude mapována pouze za běhu, poté, co program ví, jaký tvar je objekt.

Dynamická vazba umožňuje flexibilitu používání abstraktních metod, aniž by bylo známo, která konkrétní implementace bude použita. 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 kruh, zavolejte metodu getrearea kruhu; jinak, pokud je tvar čtverci, 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á metodu „getArea“, což by mohlo vést k chybě run-time. Statická vazba by zabránila tomuto scénáři zvýšením chyby kompilace.

JINÉ JAZYKY

Pomohl vám tento článek? Děkuji za zpětnou vazbu Děkuji za zpětnou vazbu

Jak můžeme pomoci? Jak můžeme pomoci?