FOSD оригами - FOSD origami

Функционально-ориентированное программирование или Разработка программного обеспечения, ориентированного на функции (FOSD) это общая парадигма для программный синтез в линейках программных продуктов. Пожалуйста, прочтите Функционально-ориентированное программирование страница, объясняющая, как FOSD-модель домена представляет собой кортеж из 0-арных функций (называемых значениями) и набор одномерных (унарных) функций, называемых функциями. На этой странице обсуждаются многомерные обобщения моделей FOSD, которые важны для компактных спецификаций сложных программ.

Оригами

Фундаментальное обобщение метамоделей: оригамиОсновная идея заключается в том, что дизайн программы не должен быть представлен одним выражением; можно использовать несколько выражений.[1][2][3] Это предполагает использование нескольких ортогональных моделей GenVoca.

Пример: пусть T будет моделью инструмента, которая имеет функции P (анализ), H (сбор урожая), D (доклет) и J (перевод на Java). P - это значение, а остальные - унарные функции. Инструмент T1, который анализирует файл, написанный на языке диалекта Java, и переводит его в чистую Java, моделируется следующим образом: T1 = J • P. А инструмент, похожий на javadoc, T2 анализирует файл на диалекте Java, собирает комментарии и переводит собранные комментарии в HTML-страницу: T2 = D • H • P. Таким образом, инструменты T1 и T2 входят в линейку продуктов T.
Языковая модель L описывает семейство (линейку продуктов) диалектов Java. Он включает в себя функции: B (Java 1.4), G (общие), S (конечные автоматы). B - это значение, а остальные - унарные функции. Итак, диалект языка Java L1, который имеет универсальные шаблоны (например, Java 1.5): L1 = G • B. И диалект Java L2, который имеет языковую поддержку для конечных автоматов: L2 = S • B. Таким образом, диалекты L1 и L2 входят в линейку продуктов L.
Чтобы описать javadoc-подобный инструмент (E) для диалекта Java с конечными автоматами, требуются два выражения: одно, которое определяет функциональные возможности инструмента для E (с использованием модели T) и его диалект Java (с использованием L-модели):
  E = D • H • P - уравнение инструмента E = S • B - уравнение языка
Модели L и T являются ортогональными моделями GenVoca: одна выражает функциональную структуру инструмента E, а другая - функциональную структуру его входного языка. Обратите внимание, что модели T и L действительно Абстрактные в следующем смысле: реализация любой функции T действительно зависит от диалекта инструмента (выраженного L), и (симметрично) реализация любой функции L действительно зависит от функциональности инструмента (выраженного T). Таким образом, единственный способ реализовать E - это знать уравнения T и L.

Пусть U = [U1, U2, ..., Uп] будет моделью GenVoca из n функций, а W = [W1, ... Wм] быть моделью GenVoca с m функциями. Связь между двумя ортогональными моделями U и W представляет собой матрицу UW, называемуюМатрица оригами, где каждая строка соответствует объекту в U, а каждый столбец соответствует объекту в W. Запись UWij это функция, которая реализуетсочетание функций Uя и Wj.

Примечание: UW - это тензорное произведение U и W (то есть UW = U × W).
    
Пример. Напомним модели T = [P, H, D, J] и L = [B, G, S]. Оригами матрица TL - это:
    
где PB - это значение, реализующее синтаксический анализатор для Java, PG - это унарная функция, которая расширяет синтаксический анализатор Java для синтаксического анализа обобщений, а PS - это унарная функция, которая расширяет синтаксический анализатор Java для анализа спецификаций конечного автомата. HB - это унарная функция, которая реализует сборщик комментариев к Java-коду. HG - это унарная функция, которая реализует сборщик комментариев к общему коду, а HS - это унарная функция, которая реализует сборщик комментариев к спецификациям конечного автомата и так далее.

Чтобы увидеть, как несколько уравнений используются для синтеза программы, снова рассмотрим модели U и W. Программа F описывается двумя уравнениями, по одному на модель. Мы можем написать уравнение для F двумя разными способами: ссылаться на объекты по имени или по их позиции в индексе, например:

    —U выражение F —W выражение F

Модель UW определяет, как реализуются модели U и W. Синтезирующая программа F включает проектирование UW ненужных столбцов и строк и агрегирование (также известное как тензорное сжатие ):

    

Основное свойство матриц оригами, называемое ортогональность, заключается в том, что порядок сокращения размеров не имеет значения. В приведенном выше уравнении суммирование сначала по измерению U (индекс i) или по измерению W (индекс j) не имеет значения. Конечно, ортогональность - это свойство, которое необходимо проверить. Были разработаны эффективные (линейные) алгоритмы для проверки ортогональности матриц оригами (или тензоров / n-мерных массивов).[4] Значение ортогональности заключается в согласованности взглядов. Агрегирование (заключение контрактов) по определенному измерению предлагает «видение» программы. Различные представления должны быть согласованными: если кто-то исправляет код программы в одном представлении (или доказывает свойства программы в одном представлении), правильность этих исправлений или свойств должна сохраняться во всех представлениях.

В общем, продукт линейки продуктов может быть представлен n выражениями, начиная с n ортогональный и Абстрактные GenVoca модели G1 ... Гп. Оригамиматрица (или куб, или тензор) представляет собой n-мерный массив A:

     

Продукт H этой линейки продуктов формируется путем удаления ненужных строк, столбцов и т. Д. Из A и агрегирования (сжатия) n-куба в скаляр:

    
Пример. Вспомните программу E и модель T = [P, H, D, J]. E = D • H • P = T2• Т1• Т0. Аналогично, представление E в модели L = [B, G, S] выглядит следующим образом: E = S • B = L2• L0. При синтезе E с учетом модели Оригами TL вычисляется следующее выражение: .

Приложения

Есть несколько приложений линейки продуктов, разработанных с использованием Origami. Среди них:

Будет добавлено больше приложений.

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

использованная литература

  1. ^ «Создание линейки продуктов из семейств продуктов» (PDF).
  2. ^ «Уточнения и многомерное разделение проблем» (PDF).
  3. ^ «Оценка поддержки функций в передовых технологиях модуляции» (PDF).
  4. ^ «Дизайн и анализ многомерных программных структур» (PDF).