-
Notifications
You must be signed in to change notification settings - Fork 0
ООП 01. Структурное программирование: нисходящая разработка, использование базовых логических структур, сквозной структурный контроль.
Дейкстра, Милдс выделили три идеи структурного программирования:
- Нисходящая разработка
- Использование базовых логических структур
- Сквозной структурный контроль
Этапы создание программного продукта:
- Анализ (Оцениваем задачу, переработка ТЗ)
- Проектирование
- Кодирование
- Тестирование
2-4 используют нисходящий подход.
Используются алгоритмы декомпозиции – разбиение задачи на подзадачи, выделенные подзадачи разбиваются дальше на подзадачи, формируется иерархическая структура (данные нисходящие, логика восходящая, разработка нисходящая).
Правила структурного программирования:
- Данные на низком уровне, на высшем логика.
- Для каждой полученной подзадачи создаем отладочный модуль. Готовятся тестирующие пакеты (до этапа кодирования). Принцип полного недоверия к данным.
- Возврат результата наверх и анализ последующего результата там.
- Явная передача данных через список параметров (не более 3х).
- Функция может возвращать не более одного параметра.
- Не более 7 подзадач у задачи.
- Глубина вложенности конструкций - не больше трёх.
- Иерархия уровня абстракции должна соответствовать иерархии данных [Нельзя работать с полями полей структур].
- Чем больше уровней абстракции, тем лучше.
Принципы работы с кодом:
- Сегментирование (функция разбивается на логические куски).
- Пошаговая реализация.
- Вложенные конструкции (глубина не более 3х).
Заглушка - то, что должна выдавать функция при данных входных данных.
Блок, функция, файл – уровни абстракции. Ограничения вложенности – 3 (глубина вложенности), если больше то выделить подфункции.
Майер: Любой алгоритм можно реализовать с помощью трех логических структур:
- следование,
- развилка (ветвление)
- повторение
Развилка (ветвление): выбор между двумя альтернативами, множественный выбор switch
– ветви имеют const выражения.
Повторение: while
, until
, for
, безусловный цикл loop
.
Принципы структурного программирования:
- Выход из цикла должен быть один.
- Не использовать оператора безусловного перехода
goto
. - Любая программа строится из трёх базовых управляющих конструкций: последовательность, ветвление, цикл.
- В программе базовые управляющие конструкции могут быть вложены друг в друга произвольным образом.
- Повторяющиеся фрагменты программы можно оформить в виде подпрограмм (процедур и функций).
- Все перечисленные конструкции должны иметь один вход и один выход.
Организация контрольных сессий. На контрольной сессии никогда не присутствует начальство (руководство), иногда приглашаются умные люди со стороны. Количество замечаний не влияет на программиста. Задачи контрольной сессии – выявить недостатки на ранних стадиях. Готовят плакаты с алгоритмами и архитектурными решениями.
- Самые серьезные логические ошибки исправляются на ранних стадиях разработки.
- Объединение этапов - проектирования, кодирования, тестирования (примечание в ООП будут проблемы)
- Взаимодействие с заказчиком на ранней стадии
- Легко распределяются задачи между программистами
- При таком подходе нет "кода в корзину".
- Начиная с самых ранних стадий идет взаимодействие с заказчиком.
- Объединение этапов кодирования, проектирования и тестирования (параллельно происходит).
- Комплексная отладка - тесты пишутся до этапа проектирования на основе ТЗ.
- Удобное распределение работы между программистами.
- Из-за многоуровневой абстракции возникают естественные контрольные точки за наблюдением за проектом.
- Локализация ошибок. (много уровней абстракции, легко выявить где)
- Вероятность невыполнения проекта сводится к нулю.
- Повторное использование кода, выделяются библиотеки.
- Плавное распределение ресурсов при разработке программного продукта. Нет аврала в конце проекта.
- На начальном этапе используется иерархический подход (на этапе распределения ролей), а потом операционный(разработка).
- Проще писать код, проще читать код
Сложно модифицировать код:
- Понижение надежности за счет внесения изменений в написанный чужой код (плюс трата времени на разбор чужого кода).
- Изменение данных, следовательно программа сыпется. Возникают моменты, когда легче написать свою программу с нуля.
- Исключительные ситуации обрабатываются вперемешку с логикой кода - это приводит к большому количеству проверок и необходимости "протаскивать" ошибку через весь код до того места, где её можно будет обработать.