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 obiektowego. 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ładCLA „kształtu”SS może mieć metodę o nazwie „getarea”, ponieważ każdy kształt ma obszar. Jednak podklasa „okręgu” kształtu ”zaimplementowałaby„ getarea ”inaczej niż sposób, w jaki byłaby to podklasa„ kwadratowa ”. Dlatego jeśli powstanie nowy obiekt typu „kształt”, 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 wywołać. 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 pozwala na elastyczność stosowania metod abstrakcyjnych bez wiedzy, która konkretna implementacja zostanie zastosowana. 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łać metodę getarea koła; w przeciwnym razie, jeśli kształt jest kwadratem, wywołaj konkretną metodę getarea dlakwadraty. Zaletą dynamicznego wiązania jest to, że kod jest czystszy i bardziej utrzymywany niż alternatywa. W przykładzie wiązania statycznego istnieje duplikacja kodu, a kod musi być aktualizowany za każdym razem, gdy dodaje się nowy typ kształtu.
Wady dynamicznego wiązania to 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 metodę „getarea” może być wywoływana na obiekcie, który nie jest kształtem, a zatem nie ma metody „getarea”, która może spowodować błąd w czasie wykonywania. Wiązanie statyczne zapobiegałoby temu scenariuszowi poprzez podniesienie błędu kompilacji.