Skip to main content

การเชื่อมโยงแบบไดนามิกคืออะไร?

ในวิทยาการคอมพิวเตอร์การผูกชื่อคือความสัมพันธ์ของตัวระบุเช่นฟังก์ชั่นหรือชื่อตัวแปรไปยังส่วนของรหัสหรือข้อมูลในสถานการณ์ที่พบบ่อยที่สุดการเชื่อมโยงแบบคงที่การทำแผนที่นี้เป็นที่รู้จักกันในเวลาคอมไพล์ในการเชื่อมโยงแบบไดนามิกวัตถุที่แมปโดยฟังก์ชั่นไม่เป็นที่รู้จักในเวลาคอมไพล์และสามารถกำหนดได้เฉพาะในช่วงเวลาทำงานของโปรแกรมด้วยเหตุนี้การผูกมัดแบบไดนามิกจึงเรียกว่าการผูกมัดล่าช้าแม้ว่าการเชื่อมโยงแบบไดนามิกจะมีความยืดหยุ่นที่ไม่สามารถใช้งานได้กับการเชื่อมแบบคงที่ แต่ก็มีค่าใช้จ่ายประสิทธิภาพมากกว่าการผูกมัดแบบคงที่

การเชื่อมโยงแบบไดนามิกมีความสัมพันธ์อย่างใกล้ชิดกับ polymorphism ซึ่งเป็นส่วนหนึ่งของการเขียนโปรแกรมเชิงวัตถุPolymorphism อนุญาตให้ใช้ชื่อวิธีการเดียวกันในรูปแบบที่แตกต่างกันหากรหัสไม่ได้เขียนในลักษณะที่วิธีการที่แม่นยำไม่สามารถกำหนดได้ในเวลาคอมไพล์ต้องใช้การผูกแบบไดนามิก

ตัวอย่างเช่นคลาสรูปร่างอาจมีวิธีที่เรียกว่า getarea เพราะทุกรูปร่างมีพื้นที่อย่างไรก็ตามคลาสย่อยของวงกลมจะใช้ getarea แตกต่างจากวิธีที่ subclass สี่เหลี่ยมจัตุรัสดังนั้นหากวัตถุใหม่ถูกสร้างขึ้นมาจากรูปแบบประเภทและหากรหัสเรียกวิธีการ getarea บนรูปร่างนั้นคอมไพเลอร์จะไม่มีทางรู้ว่ารูปร่างจะจบลงด้วยการเป็นวงกลมหรือสี่เหลี่ยมจัตุรัสและดังนั้นจึงไม่ทราบวิธี getarea ที่จะโทรนี่เป็นตัวอย่างของการเชื่อมโยงแบบไดนามิกเนื่องจากวิธีการ getarea ที่ถูกต้องจะถูกแมปเฉพาะในเวลาทำงานหลังจากโปรแกรมรู้ว่ารูปร่างของวัตถุคืออะไร

การผูกแบบไดนามิกช่วยให้ความยืดหยุ่นของการใช้วิธีนามธรรมถูกนำมาใช้ในตัวอย่างรูปร่างสามารถเขียนโค้ดเพื่อหลีกเลี่ยงการเชื่อมโยงแบบไดนามิกโดยใช้ตรรกะนี้อย่างชัดเจน: หากรูปร่างเป็นวงกลมจากนั้นเรียกวงกลมวิธี getareaอื่นถ้ารูปร่างเป็นสี่เหลี่ยมให้เรียกวิธีการ getarea เฉพาะสำหรับสี่เหลี่ยมประโยชน์ของการเชื่อมโยงแบบไดนามิกคือรหัสนั้นสะอาดกว่าและบำรุงรักษาได้มากกว่าทางเลือกในตัวอย่างการเชื่อมโยงแบบคงที่มีการทำซ้ำรหัสและรหัสจะต้องได้รับการปรับปรุงเมื่อใดก็ตามที่มีการเพิ่มรูปร่างรูปแบบใหม่

ข้อเสียของการเชื่อมโยงแบบไดนามิกคือประสิทธิภาพและความปลอดภัยในการเชื่อมโยงแบบคงที่คอมไพเลอร์รู้ว่ารหัสใดที่จะโทรและสามารถเพิ่มประสิทธิภาพรหัสให้ทำงานได้อย่างมีประสิทธิภาพมากขึ้นประเภทความปลอดภัยอาจเป็นปัญหาได้เนื่องจากในการใช้งานการเชื่อมโยงแบบไดนามิกบางวิธีสามารถเรียกใช้กับวัตถุที่ไม่สนับสนุนวิธีการตัวอย่างเช่นวิธีการ getarea อาจถูกเรียกใช้วัตถุที่ไม่ได้เป็นรูปร่างดังนั้นจึงไม่มีวิธีการ getarea ซึ่งอาจส่งผลให้เกิดข้อผิดพลาดเวลาทำงานการผูกมัดแบบคงที่จะป้องกันสถานการณ์นี้โดยการเพิ่มข้อผิดพลาดในการรวบรวม