ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Проектирование информационных систем
Добавлен: 21.10.2018
Просмотров: 10762
Скачиваний: 8
56
Рис.
4.5
—
Примеры
простых
программ
Используя
указанное
определение,
нисходящую
разработ-
ку
можно
представить
в
виде
следующего
алгоритма:
Пусть программа представлена одним
функциональным узлом;
do while
(
проектирование не окончено);
Заменить некоторый узел простой программой;
end
;
Этот
алгоритм
не
позволяет
использовать
оператор
goto
и
требует
от
программиста
больших
временных
затрат
на
раз-
работку,
чем
обычно.
Однако
для
реализации
метода
пошагово-
го
совершенствования
разработан
соответствующий
аппарат,
ускоряющий
этот
процесс.
Определим
элементарную
программу
как
простую
про-
грамму,
которая
не
включает
простых
программ,
состоящих
более
чем
из
одного
узла.
Обычно
программист,
анализируя
программу,
изучает
от-
дельные
операторы
и,
разобрав
группу
операторов,
объединяет
их
вместе.
Такой
процесс
изучения
программы
диаметрально
противоположен
методу
пошагового
совершенствования.
Неко-
торый
функциональный
узел
обязательно
окажется
оператором
присвоения,
и
определить
его
функцию
относительно
просто.
57
Если
небольшое
количество
узлов
объединено
в
элементарные
программы,
то
понять
их
функции
также
относительно
неслож-
но.
Конструкция
if
—
then
—
else
состоит
из
трех
узлов
(один
предикат
и
две
функции);
для
нее
можно
определить
функцию,
включающую
в
себя
функции,
соответствующие
час-
тям
then
и
else
оператора.
Изучение
сложных
программ
основано
на
объединении
сведений
о
более
мелких
составных
частях
программы.
Рис.
4.6
—
Примеры
непростых
программ
Рассмотрим
программу,
которая
имеет
несколько
опера-
торов
goto
.
В
этом
случае
вся
программа
(или
большая
ее
часть)
мо-
жет
быть
элементарной.
Таким
образом,
разбор
программы
можно
начать
с
просмотра
всех
узлов,
поскольку
непростых
программ
в
ней
не
может
быть.
Для
структурного
проектирования
обычно
используются
следующие
операторы:
if
—
then
—
else
,
while
—
do
,
по-
следовательность.
Указанные
управляющие
структуры
помога-
ют
программистам
создать
простые
программы
(функцию,
ко-
торая
преобразует
входные
данные
в
выходные).
Пусть
f(x)
—
58
сегмент
программы,
состоящей
из
оператора
if
—
then
—
else
(рис.
4.7).
if
p(x) then g(x) else h(x)
Рис.
4.7
—
Разбиение
на
элементарные
программы
Функции
g(x)
и
h(x)
проще,
чем
функция
f(x);
таким
обра-
зом,
их
спецификации
должны
быть
проще.
Если
их
специфи-
кации
известны,
то
функция
f(x)
определяется
следующим
обра-
зом:
( )
( )
( )
(
)
( )
( )
(
)
.
f x
p x
g x
p x
h x
=
⇒
∪ ¬
⇒
Программист
может
формально
определить
f(x),
зная
бо-
лее
простые
функции
g(x)
и
h(x)
(рис.
4.8).
Рис.
4.8
—
Сложная
программа
В
языке
PDL
используются
элементарные
подпрограммы
с
наименьшим
числом
узлов.
Операторы
if
и
do
while
явля-
IF – THEN – ELSE
59
ются
минимальным
набором,
поскольку
было
доказано,
что
любая
программная
функция
может
быть
представлена
про-
граммой
с
указанными
двумя
управляющими
структурами.
Од-
нако
вместо
них
можно
использовать
другие
конструкции,
на-
пример
repeat
—
until
.
repeat
набор операторов;
until
(
выражение);
Что
эквивалентно
следующему:
набор операторов;
do while
(
выражение);
набор операторов;
end
;
Кроме
того,
такие
же
функции
может
реализовывать
опе-
ратор
do
—
case
с
произвольным
числом
узлов.
Для
передачи
управления
предназначен
оператор
leave
.
При
его
использо-
вании
передача
управления
принимает
вид
«остановить
выпол-
нение
данной
функции».
Заметим,
что
«интеллектуальная
управляемость»,
а
не
«отсутствие
операторов
goto
»
является
движущей
силой
про-
цесса
проектирования.
4.3
Данные
4.3.1 Обзор структур данных
Любая
программа
—
это
формальное
описание
решения
некоторой
задачи
реального
мира.
Как
часть
этого
решения
конкретные
данные
тоже
должны
быть
формализованы
таким
образом,
чтобы
программа
могла
проводить
вычисления.
Для
облегчения
процесса
формализации
задачи
в
языки
программи-
рования
включены
наборы
различных
типов
данных.
Но
так
как
ни
один
разработчик
языка
не
сможет
предвидеть
всех
возмож-
ных
применений
последнего,
набор
типов
данных
неизбежно
окажется
неполным.
60
Основным
атрибутом
переменной
является
ее
тип
или
множество
значений,
которые
может
принимать
переменная.
Кроме
того,
существует
набор
операторов,
который
может
опе-
рировать
с
переменной
данного
типа.
Так
как
программы
все
более
усложняются,
требуются
все
более
новые
типы
данных
для
того,
чтобы
моделировать
задачи
реального
мира.
Новые
типы
данных
должны
создавать-
ся
программистом
на
основе
уже
существующих.
Переменные,
объявленные
как
элементарные
типы
дан-
ного
языка,
называются
скалярными
переменными,
а
перемен-
ные,
состоящие
из
наборов
существующих
типов
данных,
назы-
ваются
агрегативными
переменными.
Из
агрегативных
пере-
менных
можно
строить
новые
типы
данных,
для
работы
с
кото-
рыми
создаются
специальные
операторы.
Цель
наших
исследо-
ваний
—
понять,
по
какой
концепции
строятся
абстрактные
(определенные
пользователем)
типы
данных
из
агрегативных
структур.
4.3.1.1 Массивы
Массивы
—
это
простейшие
агрегативные
данные
в
язы-
ках
программирования.
Массивом
называется
упорядоченный
набор
данных
одного
типа
declare
A(10) FIXED BINARY;
Объявлен
массив
A
из
десяти
двоичных
переменных
с
фик-
сированной
точкой
с
именами
A(1),
A(2),
A(3),…, A(9),
A(10).
Аналогично
declare
B(5:10) FIXED BINARY;
объявлен
массив
B
из
шести
элементов
с
именами
B(5),
B(6),
...,
B(10).
Массивы
могут
быть
как
одномерными,
так
и
многомер-
ными.
4.3.1.2 Структуры
Самой
сложной
разновидностью
данных
в
языках
про-
граммирования
являются
структуры.
Структурой
называют
поименованную
совокупность
различных
типов
данных.