Skip to main content

Τι είναι η δυναμική δέσμευση;

Στην επιστήμη των υπολογιστών, η δέσμευση ονόματος είναι η συσχέτιση ενός αναγνωριστικού, όπως μια συνάρτηση ή μια μεταβλητή ονομασία, σε μια ενότητα κώδικα ή δεδομένων.Στο πιο συνηθισμένο σενάριο, στατική δέσμευση, αυτή η χαρτογράφηση είναι γνωστή στο Time Compile.Στη δυναμική δέσμευση, το αντικείμενο που χαρτογραφείται από μια συνάρτηση δεν είναι γνωστή στο χρόνο μεταγλώττισης και μπορεί να προσδιοριστεί μόνο κατά τη διάρκεια του χρόνου εκτέλεσης του προγράμματος.Για το λόγο αυτό, η δυναμική δέσμευση ονομάζεται επίσης καθυστερημένη δέσμευση.Παρόλο που η δυναμική δέσμευση προσφέρει ευελιξία που δεν είναι διαθέσιμη με στατική δέσμευση, συνεπάγεται επίσης μεγαλύτερο κόστος απόδοσης από τη στατική δέσμευση. Η δυναμική δέσμευση συνδέεται στενά με τον πολυμορφισμό, ο οποίος αποτελεί μέρος του αντικειμενικού προγραμματισμού.Ο πολυμορφισμός επιτρέπει την εφαρμογή του ίδιου ονόματος μεθόδου με διαφορετικούς τρόπους.Εάν ο κώδικας δεν είναι γραμμένος με τέτοιο τρόπο ώστε η ακριβής μέθοδος να μην μπορεί να προσδιοριστεί κατά τη διάρκεια της σύνταξης, τότε πρέπει να χρησιμοποιηθεί δυναμική δέσμευση. Για παράδειγμα, μια κλάση σχήματος μπορεί να έχει μια μέθοδο που ονομάζεται GetArea, επειδή κάθε σχήμα έχει μια περιοχή.Μια υποκατηγορία κύκλου του σχήματος, ωστόσο, θα εφαρμόσει το GetArea διαφορετικά από τον τρόπο με τον οποίο μια τετράγωνη υποκατηγορία θα.Επομένως, εάν δημιουργηθεί ένα νέο αντικείμενο από σχήμα τύπου και εάν ο κώδικας καλεί τη μέθοδο getArea σε αυτό το σχήμα, ο μεταγλωττιστής δεν θα έχει κανέναν τρόπο να γνωρίζει αν το σχήμα θα καταλήξει να είναι κύκλος ή τετράγωνο και επομένως δεν θα ξέρειΠοια μέθοδος GetArea να καλέσει.Αυτό είναι ένα παράδειγμα δυναμικής δέσμευσης, επειδή η σωστή μέθοδος GetArea θα χαρτογραφηθεί μόνο κατά τη διάρκεια του χρόνου εκτέλεσης, αφού το πρόγραμμα γνωρίζει τι είδους σχήμα είναι.να χρησιμοποιηθεί.Στο παράδειγμα σχήματος, ο κώδικας θα μπορούσε να γραφτεί για να αποφευχθεί η δυναμική δέσμευση χρησιμοποιώντας ρητά αυτή τη λογική: εάν το σχήμα είναι κύκλος, τότε καλέστε τη μέθοδο των κύκλων GetArea.Αλλιώς, εάν το σχήμα είναι τετράγωνο, καλέστε τη συγκεκριμένη μέθοδο GetArea για τετράγωνα.Το πλεονέκτημα της δυναμικής δέσμευσης είναι ότι ο κώδικας είναι καθαρότερος και πιο διατηρήσιμος από την εναλλακτική λύση.Στο στατικό παράδειγμα δέσμευσης, υπάρχει αλληλεπικάλυψη κώδικα και ο κώδικας πρέπει να ενημερώνεται οποτεδήποτε προστίθεται νέος τύπος σχήματος.

Τα μειονεκτήματα της δυναμικής δέσμευσης είναι η απόδοση και η ασφάλεια.Στη στατική δέσμευση, ο μεταγλωττιστής γνωρίζει ακριβώς τι κώδικα να καλέσει και μπορεί να βελτιστοποιήσει τον κώδικα για να εκτελέσει πιο αποτελεσματικά.Ο τύπος ασφάλειας μπορεί να είναι ένα ζήτημα επειδή, σε ορισμένες εφαρμογές δυναμικής δέσμευσης, μια μέθοδος μπορεί να κληθεί σε ένα αντικείμενο που δεν υποστηρίζει τη μέθοδο.Για παράδειγμα, η μέθοδος GetArea μπορεί να κληθεί σε ένα αντικείμενο που δεν είναι σχήμα και επομένως δεν έχει μέθοδο GetArea, η οποία θα μπορούσε να οδηγήσει σε σφάλμα χρόνου εκτέλεσης.Η στατική δέσμευση θα εμπόδιζε αυτό το σενάριο αυξάνοντας ένα σφάλμα μεταγλωττισμού.