Лабораторная работа № 2 Структурный подход к программированию. Стадия «Эскизный проект»
Цель занятия:научиться создавать формальные модели и на их основе определять спецификации разрабатываемого программного обеспечения.
Теория:
Анализ требований и определение спецификаций при структурном подходе
На этом этапе необходимо построить модели ПО во взаимодействии с окружающей средой. Поскольку разные модели описывают проектируемое программное обеспечение с разных сторон, рекомендуется использовать сразу несколько моделей и сопровождать их описаниями. Структурный подход к проектированию программных продуктов предполагает разработку следующих моделей:
диаграмм потоков данных (DFD – Data Flow Diagrams), описывающих взаимодействие источников и потребителей информации через процессы, которые должны быть реализованы в системе;
диаграмм «сущность-связь» (ERD – Entity-Relationship Diagrams), описывающих базы данных разрабатываемой системы;
диаграмм переходов состояний (STD – State Transition Diagrams), характеризующих поведение системы во времени;
функциональных диаграмм (методология SADT);
спецификаций процессов;
словаря терминов.
1. Спецификации процессов
Спецификации процессов могут быть представлены в виде псевдокодов, блок-схем алгоритмов, Flow-форм, диаграмм Насси-Шнейдермана или просто краткого текстового описания.
При структурном программировании различают три вида вычислительного процесса: линейный, разветвленный и циклический.
Линейная структура– выполнение операторов последовательно.
Разветвленная структура– в зависимости от выполнения некоторого условия выполняется та или иная последовательность операторов.
Циклическая структура– многократное выполнение одинаковой последовательности операторов.
Схемы алгоритмов
Для изображения схем алгоритмов разработан ГОСТ 19.701-90 (см. табл. 1)
Любой, сколь угодно сложный алгоритм, можно представить с использованием трех основных конструкций, которые получили название базовых:
следование – обозначает последовательное выполнение действий (рис. 1 а);
Таблица 1
Название |
Обозначение |
Назначение |
Терминатор |
Начало, завершение программы или подпрограммы | |
Процесс |
Обработка данных (вычисления, пересылки и т. п.) | |
Данные |
Операции ввода-вывода | |
Решение |
Ветвление, выбор, поисковые и итерационные циклы | |
Подготовка |
Счетные циклы | |
Граница цикла |
Конец |
Любые циклы |
Предопределенный процесс |
Вызов процедур | |
Соединитель |
Маркировка разрывов линий | |
Комментарий |
Пояснения к операциям |
ветвление – соответствует выбору одного из двух вариантов действий (рис. 1, б);
цикл-пока – определяет повторение действий, пока не будет нарушено некоторое условие, выполнение которого проверяется в начале цикла (рис. 1, в).
Рис 1. Базовые алгоритмические структуры:
а - следование; б - ветвление; в - цикл-пока
Помимо базовых, процедурные языки программирования высокого уровня обычно используют еще три конструкции, которые можно составить из базовых:
выбор – обозначает выбор одного варианта из нескольких в зависимости от значения некоторой величины (рис. 2, а);
цикл-до – обозначает повторение некоторых действий до выполнения заданного условия, проверка которого осуществляется после выполнения действий в цикле (рис. 2, б);
цикл с заданным числом повторений (счетный цикл) – обозначает повторение некоторых действий указанное количество раз (рис. 2, в).
Любая из дополнительных конструкций легко реализуется с помощью базовых. Перечисленные шесть конструкций были положены в основу структурного программирования.
Рис. 2. Дополнительные структуры алгоритмов:
а - выбор; б - цикл-до; в - цикл с заданным числом повторений
Псевдокоды.
Псевдокод – формализованное текстовое описание алгоритма (текстовая нотация). В литературе были предложены несколько вариантов псевдокодов. Один из них приведен в табл. 2.
Таблица 2
Структура |
Псевдокод |
Структура |
Псевдокод |
Следование |
<Действие1> <Действие2> |
Выбор |
Выбор<код> <код1>:<Действие1> <код2>: <Действие2> … Все-выбор |
Ветвление |
Если<Условие> то<Действие1> иначе<Действие2> Все-если |
Цикл с заданным количеством повторений |
Для <индекс> = <n>,<k>,<h> <Действие> Все-цикл |
Цикл-пока |
Цикл-пока<Условие> <Действие> Все-цикл |
Цикл-до |
Выполнять <Действие> До<Условие> |
Flow-формы.
Flow-формы представляют собой графическую нотацию описания структурных алгоритмов, которая иллюстрирует вложенность структур. Каждый символ Flow-формы имеет вид прямоугольника и может быть вписан в любой внутренний прямоугольник любого другого символа. Нотация Flow-форм приведена на рис. 3.
Рис. 3. Условные обозначенияFlow-форм для основных конструкций:
а - следование; б - ветвление; в - выбор; г - цикл-до; е - счетный цикл
Диаграммы Насси-Шнейдермана
Диаграммы Насси-Шнейдермана являются продолжением Flow-форм. Отличие их от Flow-форм состоит в том, что область обозначения условий изображают в виде треугольников (рис. 4). Это обозначение обеспечивает большую наглядность представления алгоритма.
При использовании псевдокодов, Flow-форм и диаграмм Насси-Шнейдермана описать неструктурный алгоритм, невозможно (для неструктурных передач управления в этих нотациях просто отсутствуют условные обозначения).
а |
б |
в | |||||||||||||
г |
д |
Рис. 4. Условные обозначения диаграмм Насси-Шнейдермана для основных конструкций: а - следование; б - цикл-пока; в - цикл-до; г - ветвление; д - выбор
По сравнению с псевдокодами Flow-формы и диаграммы Насси-Шнейдермана, являясь графическими, лучше отображают вложенность конструкций.
Общим недостатком Flow-форм и диаграмм Насси-Шнейдермана является сложность построения изображений символов, что затрудняет практическое применение этих нотаций для описания больших алгоритмов.