Двунаправленное преобразование - Bidirectional transformation

В компьютерном программировании двунаправленные преобразования (bx) - это программы, в которых один фрагмент кода может выполняться несколькими способами, так что одни и те же данные иногда рассматриваются как входные, а иногда как выходные. Например, запуск bx в прямом направлении может преобразовать вход I в выход O, в то время как тот же запуск bx в обратном направлении будет принимать в качестве входных версий I и O и создавать новую версию I в качестве своего выхода.

Преобразования двунаправленной модели являются важным частным случаем, когда модель вводится в такую ​​программу.

Некоторые двунаправленные языки биективный. Биективность языка - это серьезное ограничение его двунаправленности,[1] потому что биективный язык просто связывает два разных способа представления одной и той же информации.

Более общим является язык линз, в котором есть выделенное прямое направление («получить»), которое принимает конкретный ввод к абстрактному выводу, отбрасывая некоторую информацию в процессе: конкретное состояние включает в себя всю информацию, которая находится в абстрактном состоянии. , и обычно еще несколько. Обратное направление («положить») принимает конкретное состояние и абстрактное состояние и вычисляет новое конкретное состояние. Линзы должны соответствовать определенным условиям для обеспечения разумного поведения.

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

использование

Двунаправленные преобразования можно использовать для:

  • Поддерживать согласованность нескольких источников информации[2]
  • Обеспечьте «абстрактное представление», чтобы легко манипулировать данными и записывать их обратно в источник

Словарный запас

Двунаправленная программа, подчиняющаяся определенным законам о двустороннем движении.[нечеткий ] называется линза.

Примеры реализации

  • Бумеранг это язык программирования, который позволяет писать линзы для двунаправленной обработки текстовых форматов данных
  • Авгий - это библиотека управления конфигурациями, чей язык линз вдохновлен проектом Boomerang
  • biXid это язык программирования для двунаправленной обработки XML-данных[3]
  • XSugar позволяет переводить из XML в форматы, отличные от XML[4]

Смотрите также

Рекомендации

  1. ^ «Архивная копия» (PDF). Архивировано из оригинал (PDF) на 2011-07-26. Получено 2011-02-07.CS1 maint: заархивированная копия как заголовок (связь)
  2. ^ http://www.cs.cornell.edu/~jnfoster/papers/grace-report.pdf
  3. ^ «Архивная копия» (PDF). Архивировано из оригинал (PDF) на 2007-07-02. Получено 2011-02-07.CS1 maint: заархивированная копия как заголовок (связь)
  4. ^ http://www.brics.dk/xsugar/

внешняя ссылка