Основы технологии нисходящего структурного программирования
Основные определения
Различают два состояния программы. Первое, когда исходный текст программы представлен на листе бумаги или дисплее, называетсястатическим. После ввода программы в ЭВМ, ее трансляции и запуска на выполнение порядок исполнения команд уже не будет соответствовать порядку, представленному на дисплее. Это состояние называетсядинамическим.“Виновниками” такого нарушения, как правило, являются команды безусловного перехода GOTO и подпрограммы, обращения к которым могут быть из любого места как основной программы, так и из других подпрограмм.
Таким образом, динамическое и статическое состояния могут различаться. Одна из главных задач проектирования программы заключается в том, чтобы статическое и динамическое состояния, если и не совпадали, то отличие было бы объяснимым и наглядным. Это определяется выбранной технологией программирования.
Технология программирования- это система методов, способов и приемов обработки и выдачи информации.
Технология нисходящего структурного программированияпредставляет собой технологию, которая позволяет проектировать и кодировать программный комплекс таким образом, чтобы предотвратить большинство ошибок и обнаружить те, которые допущены. Данная технология включает три составляющие:
- нисходящую разработку;
- структурное кодирование (программирование);
- сквозной контроль (тестирование).
Нисходящая разработка - это подход к разработке программного комплекса, при котором он разбивается на программные модули (программы), образующие многоуровневую структуру. В языке Турбо Паскаль есть синтаксическая конструкция “Модуль”, которая означает автономно компилируемую программную единицу, включающую в себя различные компоненты раздела описаний и исполняемые операторы инициирующей части. Следует различать такие употребления термина модуль. Некоторые авторы для исключения путаницы вместо термина модуль используют термины блок, блочная программа и блочная структура.
Каждый программный модуль представляет собой короткую программу, решающую отдельную задачу (подзадачу). В процессе разработки программные модули ниже лежащих уровней заменяются “заглушками”. Таким образом, в любой момент разработки программного комплекса имеется его действующие вариант. Тестирование и отладка отдельных программных модулей и программного комплекса в целом ведется по ходу его проектирования.
При нисходящей разработке проектирование программного комплекса и кодирование программных модулей, входящих в программный комплекс, ведется сверху вниз.
В языках программирования высокого уровня одним из основных средств реализации модульной (блочной) структуры являются подпрограммы, реализованные в виде процедур и функций.
Использование небольших программных модулей имеет определенные преимущества. С такими модулями легче работать, они позволяют разрабатывать программные комплексы, которые легко модифицировать; небольшие модули проще и эффективнее тестируются, поэтому как опытным, так и начинающим программистам целесообразно использовать модульную организацию программных комплексов.
Проектирование сверху вниз. В чем особенность такого проектирования? Рассмотрим пример.
Необходимо разработать программный комплекс, который проектирует автомобиль. Дадим программному комплексу название “Автомобиль”.
Укажем в виде схем, которые называются структурными диаграммами, составные элементы комплекса:
При расчете кузова можно выделить следующие элементы:
Расчет двигателя имеет следующие элементы:
Детализация может быть продолжена.
Если объединить все приведенные структурные диаграммы, то получим первый вариант изображения структурной диаграммы программного комплекса, показанный на рис 4.1.
Рис. 4.1. Первый вариант структурной диаграммы
На рис. 4.1 и 4.2 отмечены уровни, занимаемые программными модулями. Каждый ниже лежащий уровень соответствует более полной детализации программного комплекса. Модули, не имеющие детализации, являются процедурами или функциями, реализующими решение соответствующей подзадачи. Разбиение программы на модули представляет одну из достаточно ответственных и сложных задач, так как влияет на дальнейший ход разработки программного комплекса, его надежность, эффективность, продолжительность тестирования и отладки, сопровождение и возможность использования стандартных программных процедур. Выражение “программный модуль”, несмотря на частое его использование, не имеет четкого толкования в литературе. В одних источниках утверждается, что объем модуля не должен превышать пятидесяти строк. Модульность - это совокупность свойств, которыми обладают некоторые единицы программирования.
Перечислим основные свойства программных модулей:
1) программный модуль должен иметь один вход и один выход;
2) программный модуль должен решать самостоятельную задачу по принципу один программный модуль - одна функция (процедура);
3) работа программного модуля не должна зависеть:
- от входных данных;
- от того, какому программному модулю предназначены его выходные данные;
- от предыстории вызовов программного модуля;
4) программный модуль должен возвращать управление тому программному модулю, который его вызвал;
5) программный модуль может вызвать другой программный модуль;
6) размер программного модуля желательно ограничить одной-двумя страницами исходного текста (листинга);
7) программный модуль должен иметь спецификацию.