Jump to content

Шаблон свойств привязки

Шаблон привязки свойств объединяет несколько наблюдателей для принудительной синхронизации или координации свойств различных объектов каким-либо образом. Этот паттерн был впервые описан как техника Виктором Портоном. [1] [2] Этот шаблон относится к шаблонам параллелизма .

Сравнение с аспектно-ориентированной реализацией

[ редактировать ]

В качестве альтернативы аспектно-ориентированной реализации взаимных свойств можно предложить привязку свойств. В библиотеке C++ LibPropC++ это тоже реализовано. [3]

Некоторая слабость в LibPropC++ (с привязкой свойств):

  1. Его использование непрозрачно, поскольку необходимо объявить необходимые атрибуты объекта в качестве свойств и предоставить соответствующие методы доступа.
  2. Привязка атрибутов в LibPropC++ не предназначена для замены вызовов методов.
  3. Библиотека не ведет историю взаимодействия. [3]

Выполнение

[ редактировать ]

Существует два типа привязки. Одностороннюю привязку следует применять, когда одно из свойств доступно только для чтения. В других случаях необходимо применять двустороннюю привязку. [2] [3]

Бесконечные циклы можно устранить, заблокировав сигнал или сравнив назначенное значение со значением свойства перед присвоением, или исключив ненужные назначения. [2] [3]

Связывание свойств разных типов может быть достигнуто путем преобразования типов . [2] [3]

Связывание свойств с помощью преобразований может быть достигнуто за счет сведения функции преобразования к проблеме связывания свойств, и эту функцию можно условно рассматривать как преобразование типов. [2] [3]

Процедурное программирование
Объектно-ориентированное программирование
Программирование сигналов/событий
Компоненты со свойствами
связывание свойств вместе

[2]

Результирующий контекст

[ редактировать ]

Свойства синхронизируются автоматически. Между вызовами библиотеки они всегда имеют значения, выраженные EqualityConstraints. [3]

Недостатки

[ редактировать ]

Механизм наблюдения за изменениями свойств приобретает некоторые ресурсы. [3]

Пример кода

[ редактировать ]

Эскиз кода для односторонней привязки может выглядеть следующим образом:

bind_multiple_one_way(src_obj, src_prop, dst_objs[], dst_props[])
{
    for (i, j) in (dst_objs, dst_props)
    {
        bind_properties_one_way(src_obj, src_prop, i, j);
    }
}

[2]

Двустороннюю привязку можно выразить следующим образом (на C++ ):

// In this pseudo-code are not taken into the account initial values assignments
bind_two_way(prop1, prop2)
{
    bind(prop1, prop2);
    bind(prop2, prop1);
}

[3]

Выполнение привязки (т. е. подключение уведомления об изменении свойства в обработчике событий) может выглядеть следующим образом:

on_property_change(src_prop, dst_prop)
{
    block_signal(src_obj, on_property_change);
    dst_prop := src_prop;
    unblock_signal(src_obj, on_property_change);
}

[3]

См. также

[ редактировать ]
  1. ^ «Свойства привязки» . Каннингем и Каннингем . Каннингем и Каннингем . Проверено 4 февраля 2015 г.
  2. ^ Jump up to: а б с д и ж г Портон, В. «Связывание свойств объектов» . Виктор Портон . Проверено 25 февраля 2021 г.
  3. ^ Jump up to: а б с д и ж г час я дж Эверманн, Дж., Ассоциативный конструкт в концептуальном моделировании – анализ с использованием онтологической модели Бунге , Веллингтон, Новая Зеландия: Школа информационного менеджмента, Университет Виктории.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 04e55b51315c647def7c3ae1dcb54eff__1709879400
URL1:https://arc.ask3.ru/arc/aa/04/ff/04e55b51315c647def7c3ae1dcb54eff.html
Заголовок, (Title) документа по адресу, URL1:
Binding properties pattern - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)