ооп 1. Структурное программирование: нисходящая разработка, использование базовых логических структур, сквозной структурный контроль. - keykranz/oop_ex GitHub Wiki

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

Задача технологии структурного программирования - предложить набор методов, которые позволят решать сложные задачи (повышать надежность кода, увеличивать производительность труда). В основе лежит алгоритмическая декомпозиция.

Алгоритмическая декомпозиция - идея разделения задачи по подзадачи по действию ("Что нужно делать?").

Этапы разработки ПО в структурном программировании:

  1. Анализ (оценка задачи, переработка тз)
  2. Проектирование (разработка алгоритмов)
  3. Кодирование
  4. Тестирование

Технологии структурного программирования

Три технологии структурного программирования:

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

Нисходящая разработка

Этапы создание программного продукта:

  1. Анализ. (Оцениваем задачу, переработка ТЗ)
  2. проектирование
  3. кодирование
  4. тестирование
  5. сопровождение
  6. модификация 2-4 используют нисходящий подход.

В нисходящей разработке используются алгоритмы декомпозиции – разбиение задачи на подзадач (из принципа "разделяй и властвуй"). Выделенные подзадачи разбиваются дальше на подзадачи. Таким образом, формируется иерархическая структура: данные нисходящие, логика восходящая, разработка нисходящая.

Нисходящая разработка используется в трех этапах разработки (проектировании, кодировании, тестировании).

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

  • Данные на низком уровне, на высшем логика.
  • Для каждой полученной подзадачи создаем отладочный модуль. Готовятся тестирующие пакеты (до этапа кодирования). Принцип полного недоверия к данным.
  • Возврат результата наверх и анализ последующего результата там.
  • Явная передача данных через список параметров (не более 3х).
  • Функция может возвращать не более одного параметра. Не более 7 подзадач у задачи.
  • Глубина вложенности конструкций - не больше трёх.
  • Иерархия уровня абстракции должна соответствовать иерархии данных [Нельзя работать с полями полей структур].
  • Чем больше уровней абстракции, тем лучше.

Принципы работы с кодом:

  • Сегментирование (функция разбивается на логические куски).
  • Пошаговая реализация.
  • Вложенные конструкции (глубина не более 3х).

Использование базовых логических структур.

Базовые управляющие конструкции:

  • Последовательность
  • Ветвление [if, switch]
  • Повторение [while, until, for, loop - безусловный цикл]

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

  • Выход из цикла должен быть один.
  • Не использовать оператора безусловного перехода goto.
  • Любая программа строится из трёх базовых управляющих конструкций: последовательность, ветвление, цикл.
  • В программе базовые управляющие конструкции могут быть вложены друг в друга произвольным образом.
  • Повторяющиеся фрагменты программы можно оформить в виде подпрограмм (процедур и функций).
  • Все перечисленные конструкции должны иметь один вход и один выход.

Сквозной структурный контроль

IBM предложила идею организации контрольных сессий.

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

Преимущества этой технологии:

  • Самые серьезные логические ошибки исправляются на ранних стадиях разработки.
  • При таком подходе нет "кода в корзину".
  • Начиная с самых ранних стадий идет взаимодействие с заказчиком.
  • Объединение этапов кодирования, проектирования и тестирования (параллельно происходит).
  • Комплексная отладка - тесты пишутся до этапа проектирования на основе ТЗ.
  • Удобное распределение работы между программистами.
  • Из-за многоуровневой абстракции возникают естественные контрольные точки за наблюдением за проектом.
  • Локализация ошибок. (много уровней абстракции, легко выявить где)
  • Вероятность невыполнения проекта сводится к нулю.
  • Повторное исправление кода, выделяются библиотеки.
  • Плавное распределение ресурсов при разработке программного продукта. Нет аврала в конце проекта. На начальном этапе используется иерархический подход (на этапе распределения ролей), а потом операционный(разработка).

Иерархический - порядок программирования и тестирования модулей определяется их расположением в схеме иерархии

Операционный - модули разрабатываются в порядке их выполнения при запуске готовой программы.

Недостатки этой технологии:

Сложно модифицировать код:

  • Модификацией занимаются другие люди
  • Понижение надежности за счет внесения изменений в написанный чужой код (плюс трата времени на разбор чужого кода).
  • Изменение данных, следовательно программа сыпется. Возникают моменты, когда легче написать свою программу с нуля.
  • Исключительные ситуации обрабатываются вперемешку с логикой кода - это приводит к большому количеству проверок и необходимости "протаскивать" ошибку чрез весь код до того места, где её можно будет обработать.