stringtranslate.com

Кубики программы FOSD

В разработке программного обеспечения , ориентированного на функции , кубы программ разработки программного обеспечения, ориентированного на функции ( кубы программ FOSD ), представляют собой n-мерные массивы функций (преобразований программ), которые представляют n-мерные линейки продуктов. Программа представляет собой композицию функций: базовая программа дополняется приращениями функциональности программы, называемыми функциями , для создания сложной программы. Линейка программного продукта (SPL) представляет собой семейство связанных программ. Типичная линейка продуктов имеет F 0 в качестве базовой программы и F 1 ..F n в качестве функций, которые могут быть добавлены к F 0 . Различные композиции функций дают разные программы. Пусть + обозначает операцию композиции функций. Программа P в SPL может иметь следующее выражение:

П = Ф 8 + Ф 4 + Ф 2 + Ф 1 + Ф 0

То есть P расширяет программу F 0 функциями F 1 , F 2 , F 4 и F 8 в указанном порядке.

Мы можем переформулировать P в терминах проекции и сжатия одномерного массива. Пусть F i = [F 0 .. F n ] обозначает массив характеристик, используемых линейкой продуктов. Проекция F i устраняет ненужные характеристики, давая более короткий массив (назовем его) G i . Сжатие G i суммирует каждый G i в определенном порядке, чтобы получить скалярное выражение. Выражение для P становится:

где значения индекса выполняют проекцию, а суммирование — это сокращение массива. Эта идея обобщается на n-мерные массивы, которые моделируют многомерные линейки продуктов.

Многомерные линейки продуктов

Линия продуктов 2-D (или куб)

Многомерная линейка продуктов описывается несколькими взаимодействующими наборами функций. [1] [2] [3] [4] В качестве элементарного двумерного примера легко создать линейку продуктов калькуляторов, где варианты предлагают разные наборы операций. Другой вариант может предлагать разные интерфейсы представления для калькуляторов, один без графического интерфейса, другой с графическим интерфейсом Java, третий с веб-интерфейсом. Эти варианты взаимодействуют: каждое представление графического интерфейса ссылается на определенную операцию калькулятора, поэтому каждая функция графического интерфейса не может быть разработана независимо от ее функции калькулятора. Такой дизайн приводит к матрице: столбцы представляют приращения в функциональности калькулятора, а строки представляют разные интерфейсы представления. Такая матрица M показана справа: столбцы позволяют связать базовую функциональность калькулятора (база) с дополнительными логарифмическими/возведением в степень (lx) и тригонометрическими (td) функциями. Строки позволяют связать основную функциональность без интерфейса (ядро), с дополнительным графическим интерфейсом (gui) и веб-интерфейсами (web).

Элемент M ij реализует взаимодействие функции столбца i и функции строки j. Например, элемент с меткой cb является базовой программой, реализующей основную функциональность калькулятора. Элемент gb добавляет код, который отображает основную функциональность в виде графического интерфейса пользователя; элемент wb добавляет код, который отображает основную функциональность через веб. Аналогично, элемент ct добавляет тригонометрический код к основной функциональности калькулятора; элементы gt и wt добавляют код для отображения тригонометрической функциональности в виде графического интерфейса пользователя и веб-интерфейсов.

Калькулятор однозначно определяется двумя последовательностями функций: одна последовательность определяет функциональность калькулятора, другая — интерфейс. Например, калькулятор C, который предлагает как базовую, так и тригонометрическую функциональность в веб-формате, определяется выражением:

Примечание: Каждое измерение представляет собой набор базовых программ и функций. Не все их композиции имеют смысл. Модель функций определяет допустимые комбинации функций. Таким образом, каждое измерение будет иметь свою собственную модель функций. Возможно, что выбранные функции по одному измерению могут исключать или требовать функции по другим измерениям. В любом случае, эти модели функций определяют допустимые комбинации функций в многомерной линейке продуктов.

Кубики

В общем случае куб — ​​это n-мерный массив. Ранг куба — это его размерность. Скаляр — это куб ранга 0, вектор — это куб ранга 1, а матрица — ранга 2. Следуя тензорной нотации: количество индексов куба обозначает его ранг. Скаляр S имеет ранг 0 (не имеет индексов), V k — вектор (ранг 1), M ij — матрица (ранг 2), C ijk — куб (ранг 3).

Кубы программ — это n-мерные массивы функций (преобразований программ), которые представляют n-мерные линейки продуктов. Значения вдоль каждой оси куба обозначают либо базовую программу, либо функцию, которая могла бы разработать базовую программу. Ранг линейки продуктов — это ранг ее куба.

Примечание: программные кубы вдохновлены тензорами и кубами данных в базах данных. Основное отличие состоит в том, что элементы куба данных — это числовые значения, которые добавляются во время сжатия куба; программные элементы куба — это преобразования, которые составляются. Оба используют тензорные обозначения и терминологию.

Программа в n-мерном SPL однозначно задается n последовательностями признаков S 1 ..S n , по одному на измерение. Проект программы — это скаляр (выражение), который формируется (1) проекцией куба его ненужных элементов и (2) сжатием результирующего kcube в скаляр:

Генерация программы — это оценка скалярного выражения для создания программы P.

Интересное свойство кубической конструкции заключается в том, что порядок, в котором сокращаются измерения, не имеет значения — любая перестановка измерений во время сокращения приводит к другому скалярному выражению (т. е. к другому дизайну программы), но все выражения производят одно и то же значение (программу). Например, другое выражение (дизайн) для создания калькулятора C сокращает измерения в порядке, противоположном его исходной спецификации:

C = M cb + M wb + M ct + M wt

Или в более общем смысле:

Примечание: В основе кубических конструкций лежит коммутативная диаграмма , в которой существует экспоненциальное число путей от пустой программы 0 до программы P. Каждый путь обозначает конкретное сжатие куба и соответствует уникальному инкрементному дизайну P. В число этих путей входят агрегации кубов, которые сжимают кубы, используя различные порядки измерений.

Значимость кубов программ заключается в том, что они предоставляют структурированный способ выражения и построения многомерных моделей SPL. Кроме того, они предоставляют масштабируемые спецификации. Если каждое измерение имеет k значений, спецификация n-куба программы требует O(kn) членов, в отличие от O(k n ) элементов куба, которые в противном случае пришлось бы идентифицировать и затем составлять. В целом, кубы предоставляют компактный способ спецификации сложных программ.

Приложения

Проблема выражения (также известная как « проблема расширяемости ») является фундаментальной проблемой в языках программирования, нацеленных на системы типов, которые могут добавлять новые классы и методы в программу безопасным для типов образом. [5] [6] [7] [8] Это также фундаментальная проблема в многомерном проектировании SPL. Проблема выражения является примером SPL ранга 2. Следующие приложения либо объясняют/иллюстрируют проблему выражения, либо показывают, как она масштабируется до линеек продуктов больших программ. EP на самом деле является SPL из ~30 строк программ; приложения ниже показывают, как эти идеи масштабируются до программ из >30 тыс. строк (увеличение размера на 10 3 ).

Кроме того, метамодели FOSD можно рассматривать как частные случаи программных кубов.

Ссылки

  1. ^ «Создание линеек продуктовых семейств» (PDF) .
  2. ^ «Уточнения и многомерное разделение интересов» (PDF) .
  3. ^ «Масштабирование пошагового уточнения» (PDF) .
  4. ^ «Оценка поддержки функций в передовых технологиях модуляризации» (PDF) .
  5. ^ Пользовательские типы и процедурные структуры данных как дополнительные подходы к абстракции данных. MIT Press. 12 августа 1994 г. стр. 13–23. ISBN 9780262071550.
  6. ^ «Объектно-ориентированное программирование против абстрактных типов данных» (PDF) .
  7. ^ «Проблема выражения».
  8. ^ «Синтез объектно-ориентированного и функционального дизайна для содействия повторному использованию».