Технология структурного программирования. Преимущества и недостатки структурного программирования. - Painted-Black/BMSTU-OOP GitHub Wiki

Этапы разработки:

  • Анализ (ТЗ, возможность формализации)
  • Проектирование (разработка алгоритмов)
  • Кодирование
  • Тестирование
  • Сопровождение
  • Модификация

Структурное программирование — парадигма программирования, в основе которой лежит представление программы в виде иерархической структуры блоков.

Основные идеи структурного программирования:

  • Нисходящая разработка
  • Использование базовых логических структур
  • Сквозной структурный контроль

Decomposition

В структурном программировании используются алгоритмы декомпозиции – разбиение задачи на подзадачи, выделенные подзадачи разбиваются дальше на подзадачи, формируется иерархическая структура (данные нисходящие, логика восходящая, разработка нисходящая). Логика поднимается на более высокий уровень, данные остаются на низком уровне, на самом высоком уровне находится логика. Для каждой полученной подзадачи создается отладочный модуль. До этапа кодирования шотовятся тестирующие пакеты. Подзадача не принимает решения за модуль уровнем выше (функция отработала, вернула результат, а потом анализируется). Все данные должны передаваться явно. Блок, функция, файл – уровни абстракции.

От проектирования до модификации – нисходящий подход в структурном программировании. При разбиении задачи на подзадачи выделять нужно не более 7 подзадач. Каждую из них в свою очередь можно разбивать дальше, пока не придем к решению простейших задач. Глубина вложности конструкции не должна превышать 3. По правилам IBM сегмент кода должен помещаться на печатном листе (63 строки). Количество передаваемых на модуль данных также не должно превышать 3 элементов. Модули не должны завискть от данных, все данные, в том числе и константы, должны передаваться явно через список параметров. Для этого данные структурируются – структура данных должна соответствовать уровням абстракции (при разбиении задач). В структурном программировании существует жёсткое требование: тесты подготавливаются ДО реализации. В современных условиях это достаточно тяжело.

Преимущества структурного программирования:

  • Легко распределять работу между программистами
  • Естественные контрольные точки
  • Легко выявлять ошибки
  • Легко поддается тестированию (комплексное тестирование)
  • Раннее начало процесса кодирования
  • Снижается вероятность допустить логическую ошибку
  • Возможен контакт с заказчиком на ранних стадиях, управление сроками
  • Упрощенное чтение кода

Недостатки процедурно-ориентированных языков:

  • Изменение написанного кода всегда приводит к снижению его надежности

  • Неограниченность доступа функций к глобальным данным. Число возможных связей между глобальными переменными и функциями может быть очень велико. Из-за этого:

    • Усложняется структура программы
    • В программу становится трудно вносить изменения. На модификацию кода уходит как минимум на порядок больше средств, чем на создание продукта.
    • В процессе модификации всегда смещаются уровни абстракции.
  • Разделение данных и функций, являющееся основой структурного подхода, плохо отображает картину реального мира.

В результате борьбы с проблемой сложности программного кода были выработаны три новые концепции программирования:

  • объектно-ориентированное программирование (ООП);
  • унифицированный язык моделирования (UML);
  • специализированные средства разработки программного обеспечения.