-
Notifications
You must be signed in to change notification settings - Fork 2
ООП Лекция 01. Технологии структурного программирования.
- технологи ООП выросла из недостатков Структурного Программирования(СП)
- идеологи ООП и СП одни и те же люди
- разрыв появления небольшой. СП появилось в 1961, а идеи про ООП в 1966
Технология состоит из двух слов:
- Техно - искусство
- логия - наука
- Упростить разработку какого-то продукта
- Удешевить эту разработку
- Повысить эффективность и надежность продукта
- Стандартизировать процесс с разработки
Есть такое методология, оно объединяет в себе прием наборов и методов, которые используются при разработке ПО, объединенной какой-то общей философской идеей.
Технология должна чем-то поддерживаться, связано с инструментами. Например: чугун можно лить как может быть доменная печь, может быть мартеновская печь.
Здесь то же самое должен быть инструмент разработки - язык программирования и возможно среда разработки. И под технологию создаются языки программирования.
Если говорить про Структурное Программирование - то это процедурные языки программирования: C, Pascal, Fortan, в основе процедурных языков лежит алгоритмическая декомпозиция, т.е. разбиение задачи на подзадачи по действиям.
- Устанавливайте правила и законы (декларируйте)
- Задача накладывается на эти правила и законы
- Назывались языками ИИ (Искусственный интеллект), так процесс программы неизвестен
- Не подходит для больших задач (нет государств с идеальными законами)
- Чистые (математические) функции - такие функции дают однозначный ответ
- Работаем не с данными, а с функциями
(когда-то усовершенствованные методы программирования, иногда программирование черного ящика => ООП - белого ящика)
Идеолог, сформулировавший идеи структурного программирования и первый кто сформулировал идеи ООП ХУАР:
Систематическая использование абстракций для управления массой деталей и способ документирования, которые помогает комментировать программу
Эдсгер дейкстра основоположник структурного программирования (боролся с рекурсией - рекурсия это зло)
Задача технологии структурного программирования - предложить набор методов, которые позволят решать сложные задачи (повышать надежность кода, увеличивать производительность труда). В основе лежит алгоритмическая декомпозиция.
Алгоритмическая декомпозиция - идея разделения задачи по подзадачи по действию ("Что нужно делать?").
Этапы разработки ПО в структурном программировании:
- Анализ (оценка задачи, переработка технического задания)
- Проектирование (разработка алгоритмов)
- Кодирование
- Тестирование
Три технологии структурного программирования:
- 1 - Нисходящая разработка.
- 2 - Использование базовых логических структур.
- 3 - Сквозной структурный контроль.
В нисходящей разработке используются алгоритмы декомпозиции – разбиение задачи на подзадач (из принципа "разделяй и властвуй"). Выделенные подзадачи разбиваются дальше на подзадачи. Таким образом, формируется иерархическая структура: данные нисходящие, логика восходящая, разработка нисходящая

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

После выделения подзадач можно разработать алгоритм основной задачи (планировщик), используя подзадачи

Тестирование:

- Данные на низком уровне, на высшем логика.
- Для каждой полученной подзадачи создаем отладочный модуль. Готовятся тестирующие пакеты (до этапа кодирования). Принцип полного недоверия к данным.
- Возврат результата наверх и анализ последующего результата там.
- Явная передача данных через список параметров (не более 3х).
- Функция может возвращать не более одного параметра. Не более 7 подзадач у задачи.
- Глубина вложенности конструкций - не больше трёх.
- Иерархия уровня абстракции должна соответствовать иерархии данных [Нельзя работать с полями полей структур].
- Чем больше уровней абстракции, тем лучше.
- Сегментирование (функция разбивается на логические куски).
- Пошаговая реализация.
- Вложенные конструкции (глубина не более 3х).
Заглушка - то, что должна выдавать функция при данных входных данных.
Строится диаграмма иерархии алгоритма. Затем пишется код основной программы, в котором, вместо каждого блока диаграммы вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются заглушки. Программа тестируется, после успешных тестов начинается написание подпрограмм с заглушками и их тестирование. На каждой стадии процесса реализации уже созданная программа должна правильно работать по отношению к более низкому уровню. Полученная программа проверяется и отлаживается. Разработка заканчивается тогда, когда не останется ни одной заглушки. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна.
IBM решили стандартизировать конструкцию языка, свести количество этих конструкций к достаточному минимуму и этот набор был бы удобен написание программы.
- Последовательность (однократное выполнение операций в том порядке, в котором они записаны)
- Ветвление (однократное выполнение одной из двух или более операций, в зависимости от выполнения заданного условия) [if, switch]
- Повторение (многократное исполнение одной и той же операции до тех пор, пока выполняется условие продолжения цикла) [while, until, for, loop - безусловный цикл]
Конструкция из двух альтернатив if else и много switch, ограничив глубину вложенности не больше 3.
В конструкциях проверка первых случаях должна быть короткой, а последних больше, то есть если проверка при if else, то в else кладем основной случай обработки.
- Цикл
whileс предусловием - Цикл
do while (untill)с постусловием - Цикл
forс итерации - Новые языки
for each(работа с конструкциями)
- Выход из цикла должен быть один.
- Не использовать оператора безусловного перехода goto.
- Любая программа строится из трёх базовых управляющих конструкций: последовательность, ветвление, цикл.
- В программе базовые управляющие конструкции могут быть вложены друг в друга произвольным образом.
- Повторяющиеся фрагменты программы можно оформить в виде подпрограмм (процедур и функций).
- Все перечисленные конструкции должны иметь один вход и один выход.
IBM предложила идею организации контрольных сессий.
Суть контрольных сессий: перенос контролирующей функции на плечо самих программистов, чтобы они контролировали друг друга. Сколько было контрольных сессий - не влияет на оценку работы. А сколько недочетов найдут в коде - влияет. Участвуют только программисты (без руководства).
Подробнее: Есть проект, количество программистов в проекте, сталкиваемся с ситуацией управление, разделяя их на группы на 7 человек, где руководитель (озадачить и проконтролировать их, в создании не участвует в таком случаи, так как технологии развиваются, а руководитель нет, то ответственность и контроль переложить на программистов)
- Самые серьезные логические ошибки исправляются на ранних стадиях разработки.
- Объединение этапов - проектирования, кодирования, тестирования (примечание в ООП будут проблемы)
- Взаимодействие с заказчиком на ранней стадии
- Легко распределяются задачи между программистами
- При таком подходе нет "кода в корзину".
- Начиная с самых ранних стадий идет взаимодействие с заказчиком.
- Объединение этапов кодирования, проектирования и тестирования (параллельно происходит).
- Комплексная отладка - тесты пишутся до этапа проектирования на основе ТЗ.
- Удобное распределение работы между программистами.
- Из-за многоуровневой абстракции возникают естественные контрольные точки за наблюдением за проектом.
- Локализация ошибок. (много уровней абстракции, легко выявить где)
- Вероятность невыполнения проекта сводится к нулю.
- Повторное использование кода, выделяются библиотеки.
- Плавное распределение ресурсов при разработке программного продукта. Нет аврала в конце проекта.
- На начальном этапе используется иерархический подход (на этапе распределения ролей), а потом операционный(разработка).
- Проще писать код, проще читать код
Иерархический - порядок программирования и тестирования модулей определяется их расположением в схеме иерархии
Операционный - модули разрабатываются в порядке их выполнения при запуске готовой программы.
Сложно модифицировать код:
- Понижение надежности за счет внесения изменений в написанный чужой код (плюс трата времени на разбор чужого кода).
- Изменение данных, следовательно программа сыпется. Возникают моменты, когда легче написать свою программу с нуля.
- Исключительные ситуации обрабатываются вперемешку с логикой кода - это приводит к большому количеству проверок и необходимости "протаскивать" ошибку чрез весь код до того места, где её можно будет обработать.