Кубы программы FOSD - FOSD program cubes

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

  P = F8 + F4 + F2 + F1 + F0

То есть P расширяет программу F0 с особенностями F1, F2, F4, а F8 в этом порядке.

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

    P =  Fя

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

Многоплановые производственные линии

Двухмерная линейка продуктов (или куб)

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

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

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

  C = Mcb + Mct + Mwb + Mвес  =  Mij
Примечание. Каждое измерение представляет собой набор базовых программ и функций. Не все их композиции имеют смысл. А функциональная модель определяет допустимые комбинации функций. Таким образом, у каждого измерения будет своя собственная модель характеристик. Возможно, что выбранные элементы по одному измерению могут препятствовать или требовать наличия элементов по другим размерам. В любом случае эти модели функций определяют допустимые комбинации функций в многомерной линейке продуктов.

Кубики

В целом куб представляет собой n-мерный массив. Ранг куба - это его размерность. Скаляр - это куб ранга 0, вектор - это куб ранга 1, а матрица - ранга 2. Следуя тензорной записи: количество индексов куба определяет его ранг. Скаляр S имеет ранг 0 (не имеет индексов), Vk вектор (ранг1), Mij - матрица (ранг 2), Cijk куб (ранг 3).

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

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

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

  P =  Kя1...яп

Программа поколение вычисляет скалярное выражение для создания программы P.

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

  C = Mcb + Mwb + Mct + Mвес

Или в более общем плане:

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

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

Приложения

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

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

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

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