
Лекция 18 (2 часа)
18. Технология программирования. Модульное и структурное программирование.
Технология программирования
Структурный подход к проектированию программ
Модульное программирование
18.1. Технология программирования.
Технология программирования включает в себя написание программ на языках программирования и организацию их выполнения с использованием комплекса программно-технических средств ЭВМ.
При разработке программ используется технология двух видов:
-
сверху вниз – вначале разрабатывается главная программа, а затем входящих в нее составных компонентов (подпрограмм);
-
снизу вверх – вначале разрабатываются подпрограммы (начиная с элементарных), а затем разрабатывается главная программа, использующая разработанные программные компоненты.
Важное звено технологии – выбор языка программирования и соответствующей программной среды (операционной системы). Он проводится на этапе разработки алгоритма с учетом особенностей последнего и возможностей имеющихся средств ЭВМ, а также с учетом простоты написания программы, удобства отладки, эффективности и надежности программы.
Эффективность программ определяется затрачиваемым машинным временем и требуемым объемом памяти ЭВМ и другими ресурсами.
При разработки программ необходимо помнить, что программа должна быть:
-
универсальной, т.е. не зависеть от конкретного набора данных;
-
гибкой, т.е. легко настраиваться на изменение параметров решаемой задачи;
-
мобильной, т.е. легко переносимой на другие типы ЭВМ с учетом их прикладного обеспечения;
-
надежной, т.е. иметь средства защиты от неправильного ввода данных, неопределенных параметров и случайных сбоев.
При составлении и отладке программ целесообразно использовать в операторах языка программирования переменные, а не константы; в тексте программы – комментарии, позволяющие легко проследить за функциями и логической взаимосвязью отдельных частей программы; приемы, повышающие эффективность программы такие, как: 1. использование операций умножения вместо возведения в степень; 2. исчисление часто используемого арифметического выражения один раз с присвоением его значения переменной для последующего использования в программе; 3. использование при организации циклов в качестве границ индексов переменных, а не выражений, которые вычислялись бы при каждом прохождении цикла; 4. выполнение всех повторяющихся с одинаковыми данными вычислений до входа в цикл.
Кроме того, следует проводить тестирование и отладку отдельно для логически самостоятельных частей программы, предусматривать в программе вспомогательные операторы STOP и вывода для отладки; использовать для тестирования небольшие контрольные примеры.
К современным методам программирования относятся:
-
автоматизация программирования;
-
модульное программирование;
-
структурное программирование.
Автоматизация программирования предусматривает использование готовых программ, в частности, пакетов прикладных программ и библиотек стандартных программ; дальнейшее развитие – составление программ для ЭВМ самой ЭВМ.
Модульное программирование – независимое программирование каждого модуля. Включение модуля в основную программу проводится после его полной отладки и тестирования.
Структурное программирование – процесс программирования на алгоритмическом языке с использованием определенных конструкций. При структурном программировании программа составляется на базе линейной, разветвленной или циклической алгоритмической структур и между этими структурами передача управления производится только вперед (сверху вниз в блок-схеме); использование команд безусловной передачи управлению недопустимо.
18.2. Структурный подход к проектированию программ.
Надо отметить, что компьютер выполняет только то, что заложит в него человек.
От качества разработанного алгоритма, а затем программы зависят функции компьютера, его возможности.
На начальном этапе развития вычислительной техники, когда задачи носили преимущественно расчетный характер и использовались простейшие формулы, процесс алгоритмизации и программирования носил сугубо индивидуальный характер.
Критерием качества программ служили два показателя:
-
обеспечение наиболее высокой скорости работы;
-
использование минимальных размеров памяти.
Это было обусловлено низким быстродействием ЭВМ, малыми объемами памяти, ограниченным количеством сеансов связи при работе пользователя на ЭВМ
Занимались программированием исключительно только специалисты по вычислительной технике, чаще всего математики-программисты. Квалификация программиста определялась, прежде всего, тем, насколько он мог хорошо составлять программы в соответствии с критериями того времени. В таких случаях практически всегда программы были сложными, кроме разработчика в них никто не мог разобраться.
С течением времени программное обеспечение стало настолько дорогим, что подчас превышало стоимость компьютера в несколько раз. Кроме того, при программировании на современном компьютере, обладающем высоким быстродействием и большими объемами памяти, становятся уже несущественными, какой объем занимает программа и сколько времени она решается в компьютере.
Второй важный аспект, который некоторые профессиональные программисты, работающие по традиционной схеме, стараются не замечать – отладка программ.
Необходимо было кардинально изменить подход к проектированию программ, чтобы создание программ стало технологическим процессом, как и производство любого технического устройства. Однако разработать технологический процесс создания программ, поставить его на промышленную основу оказалось делом нелегким и по сей день не решенным.
Существенным шагом на пути снижения трудоемкости создания программ при одновременном повышении их качества, надежности и возможности использования в массовом порядке является структурное проектирование.
Основные принципы структурного проектирования:
-
нисходящее проектирование;
-
модульное программирование;
-
структурное программирование (кодирование);
-
структурный контроль.
Нисходящее проектирование основано на иерархическом подходе к решению задач, целесообразно применять на первом и втором этапах, когда формируется постановка задачи и выбирается математический аппарат.
Вначале на верхнем уровне иерархии выделяем главную функцию, которую надо решить; чаще всего этой функцией служит цель поставленной задачи. Затем происходит постепенная детализация функции. На следующем уровне иерархии располагаются функции, которые позволяют выполнить главную функцию. На следующем уровне – функции, которые позволяют выполнить функции верхнего уровня иерархии и т.д.
Каждая функция заключается в прямоугольник и с помощью линий связывается с функциями предыдущего и последующих уровней. В дальнейшем эти функции, имеющие самостоятельное значение, принято называть модулями.
Уровень
1…………………. Главная функция
Модуль 1
Модуль 2
Модуль 3
2……………………
Модуль А
Модуль К
Модуль М
Модуль Р
3…………
Модуль В
Модуль С
Модуль А
Модуль К
4……………….
При построении иерархической схемы надо придерживаться следующих правил:
1. каждый модуль может быть связан только с одним модулем верхнего уровня и несколькими модулями нижнего уровня. При этом он имеет один вход. Выход на модули нижнего уровня тоже один, так как если модуль верхнего уровня вызывает модуль нижнего уровня, то после его выполнения управление может быть передано в модуль верхнего уровня, который уже может вызвать другой модуль нижнего уровня. Наличие нескольких выходов из модуля верхнего уровня означает, что модули нижнего уровня подчиняются модулям верхнего уровня.
2. связи между модулями организуются сверху вниз.
-
если следует организовать обращение к одному модулю, то его надо нарисовать столько раз и в тех местах, где он необходим. Такой модуль специально помечается двумя вертикальными чертами справа и слева и будет реализован в виде одной программы.
Надо отметить, чем более тщательно и подробно проведено нисходящее проектирование, тем проще осуществить программирование и отладку программ.
Модульное программирование - независимое программирование каждого модуля. Программирование обычно ведут начиная с верхнего уровня. Вначале составляется программа для ограниченного числа модулей верхнего уровня и производится тестирование всей задачи, при этом остальные модули не программируются, а для них делают так называемые заглушки. Например, часто используется оператор печати.
Недопустимо вводить в программу одновременно несколько модулей. После разработки очередного модуля он подключается к основной программе и производится тестирование.
Каждый новый модуль включается в основную программу только после того, как проведено его полное тестирование.
Структурное программирование (кодирование) – процесс программирования на алгоритмическом языке с использованием определенных конструкций. Основные положения структурного программирования:
1. любая программа составляется на базе основных алгоритмических структур трех видов: линейного, разветвляющего и циклического.
2. между этими структурами производится передача управления только вперед, что соответствует в блок-схеме направлению линий сверху вниз.
3. недопустимо пользоваться в программе специальной командой безусловной передачи управления из одного места программы в другое (например, GOTO).
Структурное кодирование применяется для программирования отдельных модулей. Вначале на основе положений 1, 2, 3 разрабатывается алгоритм, а затем базовые алгоритмические конструкции заменяются соответствующими конструкциями конкретного языка.
Структурный контроль необходим при разработке сложных задач, включающих десятки и сотни модулей. Это новая форма контроля процесса разработки программ, в которой участвует несколько человек. По мере продвижения в разработке задачи периодически определенной группе сотрудников раздаются рабочие материалы по данной задаче. Они знакомятся с ними, а затем на совместном обсуждении выявляются недостатки данного этапа, которые разработчик программы должен в ближайшее время устранить.
Особенно эффективен такой контроль при постановке и алгоритмизации задачи, когда закладываются основы всей системы.