ооп 1. Структурное программирование: нисходящая разработка, использование базовых логических структур, сквозной структурный контроль. - keykranz/oop_ex GitHub Wiki
Структурное программирование: нисходящая разработка, использование базовых логических структур, сквозной структурный контроль.
Задача технологии структурного программирования - предложить набор методов, которые позволят решать сложные задачи (повышать надежность кода, увеличивать производительность труда). В основе лежит алгоритмическая декомпозиция.
Алгоритмическая декомпозиция - идея разделения задачи по подзадачи по действию ("Что нужно делать?").
Этапы разработки ПО в структурном программировании:
- Анализ (оценка задачи, переработка тз)
- Проектирование (разработка алгоритмов)
- Кодирование
- Тестирование
Технологии структурного программирования
Три технологии структурного программирования:
- Нисходящая разработка.
- Использование базовых логических структур.
- Сквозной структурный контроль.
Нисходящая разработка
Этапы создание программного продукта:
- Анализ. (Оцениваем задачу, переработка ТЗ)
- проектирование
- кодирование
- тестирование
- сопровождение
- модификация 2-4 используют нисходящий подход.
В нисходящей разработке используются алгоритмы декомпозиции – разбиение задачи на подзадач (из принципа "разделяй и властвуй"). Выделенные подзадачи разбиваются дальше на подзадачи. Таким образом, формируется иерархическая структура: данные нисходящие, логика восходящая, разработка нисходящая.
Нисходящая разработка используется в трех этапах разработки (проектировании, кодировании, тестировании).
Правила структурного программирования:
- Данные на низком уровне, на высшем логика.
- Для каждой полученной подзадачи создаем отладочный модуль. Готовятся тестирующие пакеты (до этапа кодирования). Принцип полного недоверия к данным.
- Возврат результата наверх и анализ последующего результата там.
- Явная передача данных через список параметров (не более 3х).
- Функция может возвращать не более одного параметра. Не более 7 подзадач у задачи.
- Глубина вложенности конструкций - не больше трёх.
- Иерархия уровня абстракции должна соответствовать иерархии данных [Нельзя работать с полями полей структур].
- Чем больше уровней абстракции, тем лучше.
Принципы работы с кодом:
- Сегментирование (функция разбивается на логические куски).
- Пошаговая реализация.
- Вложенные конструкции (глубина не более 3х).
Использование базовых логических структур.
Базовые управляющие конструкции:
- Последовательность
- Ветвление [if, switch]
- Повторение [while, until, for, loop - безусловный цикл]
Принципы структурного программирования:
- Выход из цикла должен быть один.
- Не использовать оператора безусловного перехода goto.
- Любая программа строится из трёх базовых управляющих конструкций: последовательность, ветвление, цикл.
- В программе базовые управляющие конструкции могут быть вложены друг в друга произвольным образом.
- Повторяющиеся фрагменты программы можно оформить в виде подпрограмм (процедур и функций).
- Все перечисленные конструкции должны иметь один вход и один выход.
Сквозной структурный контроль
IBM предложила идею организации контрольных сессий.
Суть контрольных сессий: перенос контролирующей функции на плечо самих программистов, чтобы они контролировали друг друга. Сколько было контрольных сессий - не влияет на оценку работы. А сколько недочетов найдут в коде - влияет. Участвуют только программисты (без руководства).
Преимущества этой технологии:
- Самые серьезные логические ошибки исправляются на ранних стадиях разработки.
- При таком подходе нет "кода в корзину".
- Начиная с самых ранних стадий идет взаимодействие с заказчиком.
- Объединение этапов кодирования, проектирования и тестирования (параллельно происходит).
- Комплексная отладка - тесты пишутся до этапа проектирования на основе ТЗ.
- Удобное распределение работы между программистами.
- Из-за многоуровневой абстракции возникают естественные контрольные точки за наблюдением за проектом.
- Локализация ошибок. (много уровней абстракции, легко выявить где)
- Вероятность невыполнения проекта сводится к нулю.
- Повторное исправление кода, выделяются библиотеки.
- Плавное распределение ресурсов при разработке программного продукта. Нет аврала в конце проекта. На начальном этапе используется иерархический подход (на этапе распределения ролей), а потом операционный(разработка).
Иерархический - порядок программирования и тестирования модулей определяется их расположением в схеме иерархии
Операционный - модули разрабатываются в порядке их выполнения при запуске готовой программы.
Недостатки этой технологии:
Сложно модифицировать код:
- Модификацией занимаются другие люди
- Понижение надежности за счет внесения изменений в написанный чужой код (плюс трата времени на разбор чужого кода).
- Изменение данных, следовательно программа сыпется. Возникают моменты, когда легче написать свою программу с нуля.
- Исключительные ситуации обрабатываются вперемешку с логикой кода - это приводит к большому количеству проверок и необходимости "протаскивать" ошибку чрез весь код до того места, где её можно будет обработать.