Skip to main content

Co to jest wiązanie dynamiczne?

W informatyce powiązanie nazwy jest powiązaniem identyfikatora, takiego jak funkcja lub nazwa zmiennej, z sekcją kodu lub danych.W najczęstszym scenariuszu wiązanie statyczne to mapowanie jest znane w czasie kompilacji.W dynamicznym wiązaniu obiekt odwzorowany przez funkcję nie jest znany w czasie kompilacji i można go określić tylko w czasie działania programu.Z tego powodu wiązanie dynamiczne nazywa się również późnym wiązaniem.Chociaż wiązanie dynamiczne zapewnia elastyczność niedostępną z wiązaniem statycznym, pociąga za sobą więcej kosztów wydajności niż wiązanie statyczne.

Dynamiczne wiązanie jest ściśle związane z polimorfizmem, który jest częścią programowania zorientowanego na obiekt.Polimorfizm pozwala na wdrożenie tej samej nazwy metody na różne sposoby.Jeśli kod nie jest zapisany w taki sposób, aby precyzyjną metodę nie można określić w czasie kompilacji, należy zastosować dynamiczne wiązanie.

Na przykład klasa kształtu może mieć metodę zwaną getarea, ponieważ każdy kształt ma obszar.Podklasa okręgu o kształcie zaimplementuje jednak getarea inaczej niż kwadratowa podklasa.Dlatego jeśli powstanie nowy obiekt kształtu typu, a jeśli kod wywoła metodę getarea na tym kształcie, kompilator nie będzie miał możliwości wiedzy, czy kształt skończy się okrągiem, czy kwadratem, a zatem nie będzie wiedziałKtóra metoda getarea do wywołania.Jest to przykład dynamicznego wiązania, ponieważ poprawna metoda getarea zostanie odwzorowana tylko w czasie wykonywania, po tym, jak program wie, jaki jest kształt obiekt.

Dynamiczne wiązanie umożliwia elastyczność stosowania metod abstrakcyjnych bez wiedzy, która konkretna implementacja będziebyć użytym.W przykładzie kształtu kod można zapisać, aby uniknąć dynamicznego wiązania, jawnie używając tej logiki: jeśli kształt jest okrągiem, to wywołaj metodę kół getarea;W przeciwnym razie, jeśli kształt jest kwadratem, wywołaj konkretną metodę getarea dla kwadratów.Zaletą dynamicznego wiązania jest to, że kod jest czystszy i bardziej utrzymywany niż alternatywa.W przykładzie wiązania statycznego występuje duplikacja kodu, a kod musi być aktualizowany za każdym razem, gdy dodaje się nowy typ kształtu.

Wady dynamicznego wiązania są wydajność i bezpieczeństwo.W statycznym powiązaniu kompilator dokładnie wie, jaki kod wywołaj i może zoptymalizować kod, aby działać bardziej wydajnie.Bezpieczeństwo typu może być problemem, ponieważ w niektórych implementacjach dynamicznego wiązania można wywołać metodę na obiekcie, który nie obsługuje metody.Na przykład metoda getarea może być wywołana na obiekcie, który nie jest kształtem, a zatem nie ma metody getarea, co może spowodować błąd w czasie wykonywania.Wiązanie statyczne zapobiegałoby temu scenariuszowi poprzez podniesienie błędu kompilacji.