Динамические изменения классов или активация контекста — как согласованно обращаться с существующими объектами?

cs.stackexchange https://cs.stackexchange.com/questions/3156

Вопрос

Я ищу ссылки и статьи по следующей теме.

  1. В Общая информация, некоторые языки программирования допускают динамические изменения классов.В качестве примера, в класс может быть добавлена новая переменная экземпляра ‘weight’ Edge (класс невзвешенных ребер графов).Но что должно произойти с существующими пограничными объектами?

    Они могут быть обновлены, чтобы включить новую переменную экземпляра со значением по умолчанию, возможно, weight 0, в примере с ребром.Или существующие объекты остаются прежними.

  2. В контекстно-ориентированный при программировании могут возникать аналогичные ситуации, когда контекст динамически активируется во время выполнения.Это может повлиять на изменения в методах, которые выполняются в данный момент (хотя на данный момент меня беспокоит выполнение в одном потоке).

  3. Принимая во внимание шаблоны проектирования, когда прокси-объект оборачивает другой объект, ссылки на старый объект могут ожидать определенных инвариантов, которым прокси-объект не соответствует.Это также может привести к несоответствиям, когда объект оборачивается / ’обновляется’ с помощью прокси-объекта.

Существуют ли какие-либо ссылки, в которых перечислены возможные способы решения проблемы в случае динамических изменений / активации?Нравятся варианты сохранения согласованности состояния?

Я искал в основном сообщества по динамической эволюции программного обеспечения, контекстно-ориентированному программированию и программным компонентам.Есть ли другие важные сообщества, в которых я могу найти ссылки?

Это было полезно?

Решение

Недавняя статья на эту тему, на которую я наткнулся, такова Постепенные динамические обновления с первоклассными контекстами Автор: Эрванн Вернли, Мирча Лунгу и Оскар Нирстраш.Подход, использованный в данном документе, не основан на глобальных обновлениях.Скорее, несколько версий системы запускаются одновременно в так называемом контекст.Объекты постепенно переносятся из одного контекста в другой, после чего выполняется обновление.Двунаправленные преобразования используются для поддержания согласованности между старым и новым контекстами.

В общем, я думаю, вам нужно иметь пару функций обновления для любого обновления, одну для обновления классов, другую для обновления объектов.Реальная проблема заключается в том, когда / как вы применяете функции обновления к объектам.В любом случае, у вас часто будет несколько версий классов одновременно. Обновление j (by Biermann, Parkinson and Noble) - это один из языков программирования, который работает с несколькими версиями класса типобезопасным способом.

Библиография этих статей содержит несколько рекомендаций, которым вы могли бы последовать.Также загляните в Google Scholar, чтобы узнать, какая статья основана на этих данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top