Вопрос начинающего: Что такое привязка?
Я пытался понять разницу между ранним и поздним связыванием, и в процессе понял, что понятие обязательной является расплывчатым для меня. Я!--1-->думаю Я понимаю, что это связано с тем, как data-as-a-word-of-memory связан с типом-as-a-set-of-language-features, но я не уверен, что это правильные концепции. Кроме того, как понимание этого помогает людям стать лучшими программистами?
обратите внимание: этот вопрос не " что поздно v. раннее связывание" или "каковы компромиссы между 2". Они уже существуют здесь.
спасибо,
JDelage
5 ответов
привязка в общем случае связывает имя с некоторым значением. Значение не обязательно должно быть данными, но может быть любым, имеющим имя, например, функцией или классом.
Что касается компромисса:
ранняя привязка делает значение доступным ранее. Так, например, компиляторы могут применять оптимизацию на основе известного значения, например, вычислять постоянные выражения. Это может привести к повышению производительности и не требует поддержки среды выполнения для получения значение.
поздняя привязка требует значения позже, поэтому она обеспечивает большую гибкость. Становится проще изменить части кода или перенастроить систему.
общая тенденция к более поздней привязке, потому что с более быстрыми процессорами и лучшими методами (например, компиляция JIT) это становится возможным чаще.
в простейшем случае привязка-это ассоциация символа в программе с адресом в памяти.
например: вызов функции в C. Когда вы объявить функция, компилятор записывает имя функции и расположение ее кода в объектном файле. Когда ты вызов функция из отдельно скомпилированного файла, компилятор записывает ссылку на это имя в том месте, где происходит вызов. Компоновщик отвечает за обязательные эти две ссылки, так что вызов будет ссылаться на правильное расположение памяти.
в контексте компиляторов привязка-это этап, на котором ссылки на адреса изменяются на фактические абсолютные адреса.
программа составлен, адрес каждого символа (переменной, функции) хранится в таблице символов, например, как относительное смещение от начала модуля объекта вместе с именем символа. Имя символа необходимо, так как символы могут быть вызваны из другого объектного модуля.
когда программа связан, объектные модули объединяются в один программный файл, и имена символов больше не нужны. Если программа связана с известным абсолютным адресом, все ссылки на адреса могут быть привязан в абсолютные адреса, которые уже на этом этапе.
однако на рабочих станциях, таких как PC:s, программа может быть загружена на любой адрес, поэтому адрес не известен во время ссылки. Таким образом, дополнительная информация о перемещении хранится в файле программы чтобы загрузчик мог связывать адреса во время загрузки.
обязательные выполняется во время загрузки с использованием информации о перемещении. Когда известен адрес, по которому будет выполняться программа, загрузчик заменяет относительные адреса абсолютными адресами, используя информацию о перемещении, которая указывает, где в коде необходимо внести изменения.
для динамических объектов/переменных, привязка может быть совершено в время работы. (Я думаю, это то, что обычно называется поздним связыванием.)
обычно вам не нужно много заботиться о привязке, по крайней мере, когда используется ранняя привязка. (Однако привязка во время выполнения может негативно повлиять на производительность и безопасность.)
Если вы говорите больше о привязке данных, то я бы сказал, что определение, используемое Microsoft в их Обзор Привязки Данных довольно хорошо работает:
"привязка данных-это процесс, который устанавливает связь между пользовательский интерфейс приложения и бизнес-логика. Если привязка имеет правильные настройки и данные обеспечивают правильное уведомления, когда данные изменяет свое значение, элементы, которые привязаны к данным, отражают изменения автоматически. Привязка данных может также означает, что если внешнее представление изменения данных в элементе, тогда базовые данные могут быть автоматически обновленный для того чтобы отразить изменение. Например, если пользователь редактирует значение в элементе TextBox, базовое значение данных автоматически обновлен, чтобы отразить это изменение."
другими словами, это способ получения данных из источника данных (например, базы данных или XML-файл) и применить эти данные к интерфейс или элемент отображения. Например, форма может иметь выпадающий список значений, которые хранятся в таблице в базе данных. Привязка данных-это процесс "привязки" значений из базы данных к списку. Односторонняя привязка данных обычно "только для чтения", но двусторонняя привязка данных позволяет пользователю обновлять значения до базового источника данных.