В замешательстве есть две основные концепции: привязка и загрузка. Это связано с концепцией DataBinding, которая где-то посередине часто делает и то, и другое. После рассмотрения я собираюсь добавить еще одну концепцию, завершить trifecta, рассылку.
Типы
Позднее связывание : тип неизвестен, пока переменная не будет использована во время выполнения; обычно с помощью присваивания, но есть и другие способы принуждения типа; Динамически типизированные языки называют это основной функцией, но многие статически типизированные языки имеют некоторый метод достижения позднего связывания.
Реализуется часто с использованием [специальных] динамических типов, самоанализа / отражения, флагов и параметров компилятора или с помощью виртуальных методов, заимствуя и расширяя динамическую диспетчеризацию
Раннее связывание : тип известен до использования переменной во время выполнения, обычно с помощью статических декларативных средств.
Реализуется часто с использованием стандартных примитивных типов
функции
Static Dispatch : известная, специфическая функция или подпрограмма во время компиляции; это однозначно и соответствует подписи
Реализовано как статические функции; ни один метод не может иметь одинаковую подпись
Динамическая отправка : не определенная функция или подпрограмма во время компиляции; определяется контекстом во время исполнения. Существует два разных подхода к «динамической диспетчеризации», различающихся тем, какая контекстная информация используется для выбора соответствующей реализации функции.
В одной [ динамической ] диспетчеризации только тип экземпляра используется для определения соответствующей реализации функции. В языках со статической типизацией на практике это означает, что тип экземпляра решает, какая реализация метода используется независимо от ссылочного типа, указанного при объявлении / назначении переменной. Поскольку для вывода соответствующей реализации используется только один тип - тип экземпляра объекта, этот подход называется «единой диспетчеризацией».
Существует также многократная [ динамическая ] диспетчеризация , где типы входных параметров также помогают определить, какую реализацию функции вызывать. Поскольку несколько типов - как тип экземпляра, так и тип (-ы) параметра (-ов) - влияют на то, какая реализация метода выбрана, этот подход называется «многократная отправка».
Реализовано как виртуальные или абстрактные функции; другие подсказки включают переопределенные, скрытые или скрытые методы.
NB. Зависит ли перегрузка метода от динамической диспетчеризации, зависит от языка. Например, в Java перегруженные методы отправляются статически.
Ценности
Ленивая загрузка : стратегия инициализации объекта, которая откладывает присвоение значения до момента необходимости ; позволяет объекту находиться в по существу действительном, но заведомо неполном состоянии и ожидать, пока данные не понадобятся, перед его загрузкой; часто оказывается особенно полезным для загрузки больших наборов данных или ожидания на внешних ресурсах
Реализуется часто, целенаправленно не загружая коллекцию или список в составной объект во время вызовов конструктора или инициализации, пока какой-либо вызывающий абонент не попросит просмотреть содержимое этой коллекции (например, get_value_at, get_all_as и т. Д.). Вариации включают в себя загрузку метаинформации о коллекции (например, размер или ключи), но без фактических данных; также предоставляет механизм для некоторых сред выполнения, чтобы предоставить разработчикам довольно безопасную и эффективную схему реализации синглтона
Стремительная загрузка : стратегия инициализации объекта, которая немедленно выполняет все присвоения значений , чтобы все данные были необходимы для завершения, прежде чем считать себя в допустимом состоянии.
Реализуется часто, предоставляя составные объекты со всеми их известными данными как можно скорее, как во время вызова конструктора или инициализации
Привязка данных : часто включает создание активной связи или карты между двумя совместимыми информационными потоками, чтобы изменения одного из них отражались обратно в другом и наоборот; чтобы быть совместимыми, они часто должны иметь общий базовый тип или интерфейс
Реализуется часто как попытка обеспечить более чистую, согласованную синхронизацию между различными аспектами приложения (например, модель представления для просмотра, модель для контроллера и т. Д.) И рассказывает о таких понятиях, как источник и цель, конечные точки, привязка / отмена привязки, обновление и такие события, как on_bind, on_property_change, on_explicit, on_out_of_scope
ПРИМЕЧАНИЕ РЕДАКТИРОВАНИЯ: Последнее основное редактирование, чтобы предоставить описание примеров того, как это часто происходит. Конкретные примеры кода полностью зависят от реализации / среды выполнения / платформы