Skip to content
This repository was archived by the owner on Apr 6, 2025. It is now read-only.

ООП Лекция 01. Технологии структурного программирования.

Vladislav Mansurov edited this page Apr 16, 2022 · 1 revision

Введение

  • технологи ООП выросла из недостатков Структурного Программирования(СП)
  • идеологи ООП и СП одни и те же люди
  • разрыв появления небольшой. СП появилось в 1961, а идеи про ООП в 1966

Технология состоит из двух слов:

  • Техно - искусство
  • логия - наука

Для чего нужна технология? Задачи технологии какие?

  • Упростить разработку какого-то продукта
  • Удешевить эту разработку
  • Повысить эффективность и надежность продукта
  • Стандартизировать процесс с разработки

Есть такое методология, оно объединяет в себе прием наборов и методов, которые используются при разработке ПО, объединенной какой-то общей философской идеей.

Технология должна чем-то поддерживаться, связано с инструментами. Например: чугун можно лить как может быть доменная печь, может быть мартеновская печь. Здесь то же самое должен быть инструмент разработки - язык программирования и возможно среда разработки. И под технологию создаются языки программирования. Если говорить про Структурное Программирование - то это процедурные языки программирования: C, Pascal, Fortan, в основе процедурных языков лежит алгоритмическая декомпозиция, т.е. разбиение задачи на подзадачи по действиям.

Декларативный подход (ПРОЛОГ - язык)

  • Устанавливайте правила и законы (декларируйте)
  • Задача накладывается на эти правила и законы
  • Назывались языками ИИ (Искусственный интеллект), так процесс программы неизвестен
  • Не подходит для больших задач (нет государств с идеальными законами)

Функциональный подход

  • Чистые (математические) функции - такие функции дают однозначный ответ
  • Работаем не с данными, а с функциями

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

(когда-то усовершенствованные методы программирования, иногда программирование черного ящика => ООП - белого ящика)

Идеолог, сформулировавший идеи структурного программирования и первый кто сформулировал идеи ООП ХУАР:

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

Эдсгер дейкстра основоположник структурного программирования (боролся с рекурсией - рекурсия это зло)

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

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

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

  • Анализ (оценка задачи, переработка технического задания)
  • Проектирование (разработка алгоритмов)
  • Кодирование
  • Тестирование

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

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

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

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

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

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

image

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

image

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

image

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

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

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

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

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

Написание кода программы с использованием заглушек:

Строится диаграмма иерархии алгоритма. Затем пишется код основной программы, в котором, вместо каждого блока диаграммы вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются заглушки. Программа тестируется, после успешных тестов начинается написание подпрограмм с заглушками и их тестирование. На каждой стадии процесса реализации уже созданная программа должна правильно работать по отношению к более низкому уровню. Полученная программа проверяется и отлаживается. Разработка заканчивается тогда, когда не останется ни одной заглушки. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна.

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

IBM решили стандартизировать конструкцию языка, свести количество этих конструкций к достаточному минимуму и этот набор был бы удобен написание программы.

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

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

Конструкции ветвления:

Конструкция из двух альтернатив if else и много switch, ограничив глубину вложенности не больше 3. В конструкциях проверка первых случаях должна быть короткой, а последних больше, то есть если проверка при if else, то в else кладем основной случай обработки.

Конструкции повторений:

  • Цикл while с предусловием
  • Цикл do while (untill) с постусловием
  • Цикл for с итерации
  • Новые языки for each (работа с конструкциями)

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

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

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

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

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

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

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

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

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

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

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

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

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

Clone this wiki locally