Skip to content

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

Dmitriy Pisarenko edited this page Sep 6, 2023 · 3 revisions

Дейкстра, Милдс выделили три идеи структурного программирования:

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

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

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

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

2-4 используют нисходящий подход.

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

image

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

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

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

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

Заглушка - то, что должна выдавать функция при данных входных данных.

Блок, функция, файл – уровни абстракции. Ограничения вложенности – 3 (глубина вложенности), если больше то выделить подфункции.

Базовые логические структуры

Майер: Любой алгоритм можно реализовать с помощью трех логических структур:

  • следование,
  • развилка (ветвление)
  • повторение

Развилка (ветвление): выбор между двумя альтернативами, множественный выбор switch – ветви имеют const выражения.

Повторение: while, until, for, безусловный цикл loop.

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

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

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

Организация контрольных сессий. На контрольной сессии никогда не присутствует начальство (руководство), иногда приглашаются умные люди со стороны. Количество замечаний не влияет на программиста. Задачи контрольной сессии – выявить недостатки на ранних стадиях. Готовят плакаты с алгоритмами и архитектурными решениями.

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

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

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

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

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