Основное понимание алгоритмов
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 16.03.22 19:03
Оценка: -1 :)

Единица функционала


Software feature

В программном обеспечении термин «функционал» имеет несколько определений. Институт инженеров по электротехнике и радиоэлектронике определяет термин «функционал» в IEEE 829 как «отличительную характеристику элемента программного обеспечения (например, производительность, переносимость или функциональность)».

Многофункциональный


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

Постепенное раскрытие — это метод, применяемый для уменьшения потенциальной путаницы, вызванной одновременным отображением множества функционала.

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

Термины «расползание функционала» и «раздувание программного обеспечения» могут использоваться для обозначения программного обеспечения, которое чрезмерно многофункционально.


Feature-oriented programming

В компьютерном программировании функционально -ориентированное программирование (FOP) или функционально-ориентированная разработка программного обеспечения (FOSD) — это парадигма программирования для генерации программ в линейках программных продуктов (SPL) и для постепенной разработки программ.


Наращивание функционала


Для начала давайте разберёмся, что лучше.
1) Множество единиц функционала в одном проекте.
или наоборот
2) Множество проектов с одной единицей функционала.

Но лучше для чего.
1) Обучения.
2) Прототипирования.
3) Проектирования.
4) Кодирования.
5) Тестирования.
И так далее.

Архитектура программного обеспечения это один из слоёв конструкций, который можно выделить в коде. Другие слои могут быть шаблонами проектирования или инструкциями языка. Отличие слоя архитектуры от остальных в том, что он служит прежде всего для наращивания функционала, а не для решения иных проблем.

Таким образом идея состоит в том, чтобы отказаться от архитектуры, а сам функционал сократить до одной условной единицы демонстрирующей работу.

/*
Описание (алгоритма)
...
Образ (алгоритма)
...
Использование (алгоритма)
...
Код (алгоритма)
...
Испытание (алгоритма)
...
*/

int main(int argc, char* argv[])
{
    return 0;
}

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

Лично я вижу применение подобного.
1) Для создания собственных примеров работы с чужими библиотеками алгоритмов.
2) Для создания качественного рабочего прототипа алгоритма с подробным описанием и без размазывание его по коду проекта.

Запуск проекта


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

Однофункциональный проект


пример с выводом на консоль
+--------------------------------------+
|напечатать что-то                     |
|                                      |
|                                      |
|                                      |
|                                      |
|                                      |
+--------------------------------------+

пример с графическими элементами
+--------------------------------------+
|            нажми на меня             |
+--------------------------------------+
|сделать что-то                        |
|                                      |
|                                      |
|                                      |
+--------------------------------------+

Как видим используется наименьшее количество элементов, чего не скажешь о многофункциональном проекте.

Многофункциональный проект


пример с выводом на консоль
+--------------------------------------+
|напечатать что-то напечатать что-то  ^|
|напечатать что-то напечатать что-то   |
|напечатать что-то напечатать что-то   |
|напечатать что-то напечатать что-то  #|
|напечатать что-то напечатать что-то  #|
|напечатать что-то напечатать что-то  v|
+--------------------------------------+

пример с графическими элементами
+-------------+---------+--------------+
|нажми на меня|и на меня|меня не забудь|
+-------------++--------+------+-------+
|сделать что-то|иной функционал|       |
|сделать что-то|               |что это|
+----+---------+---------------+-------+
|?  ?|панель боинга покажется тебе раем|
+----+---------------------------------+
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.