Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технологии разработки ПО Уебное пособие Глухова Лилия Александровна, БГУИР 2010 (Книга).pdf
Скачиваний:
1125
Добавлен:
15.06.2014
Размер:
2 Мб
Скачать
☆

4.6.2. Построение структур данных

Рассмотрим возможность формирования сложных структур данных на основе комбинации четырех описанных в п. 4.6.1 конструкций данных.

Пусть имеется некоторый файл F, состоящий из заголовка, за которым следует совокупность дат, завершающаяся признаком окончания. Заголовок может иметь один из двух типов, каждая дата представляет собой летнюю или зимнюю дату, завершитель состоит из восьми символов Z. Структуру файла F можно представить в виде иерархической структуры данных, базируясь на основных конструкциях данных Джексона (см. рис. 4.37).

На данном рисунке файл F представлен в виде конструкции последовательности данных, заголовок – в виде конструкции выбора, тело файла и завершитель – конструкции повторения, дата – конструкции выбора.

На первый взгляд кажется, что в вышеприведенной структуре компонент «Тело файла» является излишним (см. рис. 4.37). Однако если данный компонент убрать, то последовательность «Файл F» будет состоять из трех подкомпонентов, вторым среди которых будет являться «Дата». Подкомпонент «Дата» представляет собой повторяемый подкомпонент. Следовательно, «Дата» может присутствовать в файле любое число раз. Но в конструкции последовательности данных любой подкомпонент должен встретиться ровно один раз. Поэтому наличие компонента «Тело файла» в структуре данных, представленной на рис. 4.37, является обязательным.

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

Помимо иерархической структуры данных широко используется сетевая

иреляционная структуры данных.

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

Пример сетевой структуры данных иллюстрирует рис. 4.38 [26]. На рис. 4.39 показан возможный вариант преобразования этих данных к иерархическому виду.

При реляционном подходе структура данных представляется в виде совокупности таблиц. На рис. 4.40 представлена таблица, состоящая из пяти строк и шести столбцов. Очевидно, что сами таблицы имеют иерархическую структуру. На рис. 4.41 показаны два способа иерархического представления таблицы, состоящей из пяти строк и шести столбцов.

115

Организация

 

Клиент

 

Фамилия

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Счет Продукция

Транзакция

Рис. 4.38. Пример сетевой структуры данных

Организация

*

Клиент

*

Продукция

*

Счет

*

Транзакция

Рис. 4.39. Иерархический вид сетевой структуры данных

116

Строки

Столбцы

1

2

3

4

5

6

1

2

3

4

5

Рис. 4.40. Пример представления структуры данных при использовании реляционного подхода

Таблица Таблица

 

 

 

 

 

 

*

(5)

*

(6)

Строка

 

Столбец

 

 

 

 

 

 

 

 

 

 

 

 

 

Элемент *

(6)

Элемент * (5)

 

 

 

 

а

 

б

Рис. 4.41. Иерархическая структура таблиц:

а– представление таблицы в виде набора строк;

б– представление таблицы в виде набора столбцов

Таким образом, реальные наборы данных, как правило, могут быть представлены в виде иерархических структур.

Представление структур данных в виде иерархий является первым этапом проектирования программы по методу Джексона (методу JSP). На следующих этапах описывается взаимосвязь между структурами данных и программой.

117

Резюме

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

4.6.3. Проектирование структур программ

В соответствии с методом JSP конструкции, используемые для построения структур данных, применяются и для построения структур программ. Так же, как и данные, программы могут быть составлены из конструкций последовательности, выбора и повторения.

Большинство ПС предназначено для обработки некоторых входных данных и получения некоторых выходных данных. Структура выходных данных формируется программой в результате некоторого преобразования структуры входных данных. Таким образом, для проектирования структуры программы необходимо определить взаимосвязь между входными данными, выходными данными и процессом преобразования [26].

Пример 4.6

Рассмотрим простейший пример [26]. Пусть необходимо найти суммы элементов строк в массиве, состоящем из 15 строк и 10 столбцов.

Рис. 4.42 иллюстрирует структуры данных, представляющие входные и выходные данные разрабатываемой программы.

Входная

 

Выходная

структура

 

структура

данных

 

данных

 

 

 

 

 

Массив

 

Результат

 

 

 

 

 

 

 

 

 

 

 

 

*

 

 

*

Строка

(15)

Сумма

(15)

 

 

 

 

строки

 

 

 

 

 

 

 

 

 

 

 

 

* (10)

Элемент

Рис. 4.42. Структуры входных и выходных данных

Очевидно, что между обеими структурами имеется непосредственная взаимосвязь. Компонент «Сумма строки» в структуре «Результат» появляется

118

столько раз, сколько раз компонент «Строка» появляется во входной структуре «Массив», и в том же порядке.

Соответствия между компонентами входной и выходной структур данных принято изображать жирными линиями с двусторонними стрелками. Соответствие между структурами входных и выходных данных для рассматриваемого примера представлено на рис. 4.43.

Массив Результат

 

 

 

 

 

 

 

 

*

 

 

Сумма

*

 

Строка

(15)

 

(15)

 

 

 

 

строки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*

Элемент (10)

Рис. 4.43. Соответствие между структурами входных и выходных данных

Каждая пара соответствующих компонентов входных и выходных данных образует основу одного компонента программы. Поэтому проектирование упрощенной структуры программы (ее ядра) выполняется путем «слияния» соответствующих компонентов структур входных и выходных данных. Это значит, что на месте линий соответствия размещаются компоненты программы, которым присваивается соответствующее имя (рис. 4.44). Слияние двух повторяемых N раз компонентов данных сформирует один повторяющийся N раз компонент программы.

Пример 4.7

Рассмотрим более сложный пример [26]. Пусть результат предыдущего примера должен сопровождаться некоторым заголовком и некоторым завершителем. Структуры входных и выходных данных и соответствия между ними для данного случая представлены на рис. 4.45.

На первом подэтапе формирования структуры программы на основании линий соответствия формируется упрощенный вариант структуры (ядро программы, рис. 4.46).

119

 

Вход

 

Программа

Выход

 

 

 

 

 

 

 

 

 

 

 

Массив

 

Программа

 

 

Результат

 

 

 

обработки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

массива

 

(15)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*

 

 

*

 

 

*

(15) Строка

 

Обработка

 

Сумма

(15)

 

 

 

 

строки

 

строки

 

 

 

 

(10)

*

Элемент

 

 

 

Рис. 4.44. Соответствие данных и программы

Массив Результат

 

 

 

 

 

 

 

 

 

 

 

 

 

(15)

Строка

*

 

Заголовок

 

Содержимое

 

Завершитель

 

 

 

 

 

 

 

результата

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(10)

Элемент

*

 

 

 

 

 

 

 

 

 

 

 

 

 

Сумма

*

(15)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

строки

 

 

 

 

Рис. 4.45. Расширенные структуры входных и выходных данных

На следующих подэтапах ядро программы расширяется. При этом рассматриваются те компоненты структур данных, к которым не подходят линии соответствия.

На втором подэтапе анализируются компоненты во входной структуре данных, к которым не подходят линии соответствия.

120

Подэтап 1 Программа обработки массива

*

Обработка (15) строки

Рис. 4.46. Первый подэтап формирования структуры программы

Таким компонентом во входной структуре данных является «Элемент». Ему не соответствует ни один компонент в структуре выходных данных.

Но «Элемент» образует подкомпоненты, составляющие компонент «Строка». А «Строка» сливается с компонентом «Сумма строки», формируя компонент «Обработка строки». Поэтому компонент «Элемент» можно трактовать как повторяемый подкомпонент компонента «Обработка строки» и переименовать его в компонент «Обработка элемента» (рис. 4.47).

На третьем подэтапе рассматриваются компоненты в выходной структуре данных, к которым не подходят линии соответствия. Такими компонентами являются «Заголовок», «Содержимое результата», «Завершитель» (см.

рис. 4.45).

Подэтап 2 Программа обработки массива

*

Обработка (15) строки

*

Обработка (10) элемента

Рис. 4.47. Второй подэтап формирования структуры программы

121

По аналогии с компонентом «Элемент» каждый из этих компонентов помещается в то относительное положение в структуре программы, в котором он появляется в структурах данных. И соответственно меняется имя данных компонентов (добавляется слово «Получение», «Формирование», «Обработка» и т. п.). Рис. 4.48 иллюстрирует полученную в результате структуру программы.

Подэтап 3

 

Программа

 

 

 

 

обработки

 

 

 

 

массива

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Формирование

 

Обработка

 

Формирование

 

содержимого

 

заголовка

 

 

завершителя

 

результата

 

 

 

 

 

 

 

 

 

 

 

*

Обработка (15) строки

*

Обработка (10) элемента

Рис. 4.48. Формирование полной структуры программы

Таким образом, выше на простых примерах показан процесс генерации структуры программы из структур входных и выходных данных на основе метода Джексона. Следующий подраздел посвящен формализованному описанию данного процесса.

Резюме

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

122

4.6.4.Этапы проектирования программного средства

Метод JSP реализуется пятью этапами [26]:

1.Проектирование структур входных и выходных данных.

2.Идентификация соответствий между структурами данных.

3.Проектирование структуры программы.

4.Перечисление и распределение выполняемых операций.

5.Создание текста программы на метаязыке структурированного описания.

Рассмотрим правила выполнения данных этапов на конкретном примере.

Пример 4.8

Пусть имеется входной файл, состоящий из заголовка, за которым следует совокупность дат, завершающаяся признаком окончания (завершителем). Заголовок начинается символом Н (Heading), за которым следует содержимое заголовка, состоящее из типа файла и даты создания файла. Тип файла может иметь одно из двух значений – «Тип 1» или «Тип 2». Каждая дата представляет собой летнюю или зимнюю дату. Завершитель состоит из восьми символов Z.

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

Этап 1. Проектирование структур входных и выходных данных

Данный этап является самым важным этапом метода JSP, так как структуры данных образуют основу формируемой структуры программы.

При создании структур данных обычно принято использовать три вида документов:

А. Таблицы для идентификации компонентов данных. Б. Графическое представление структур данных.

В. Контрольные перечни вопросов для анализа структур данных.

А. Таблицы для идентификации компонентов данных

Формат таблицы для идентификации компонентов входных данных иллюстрирует табл. 4.2. Эта таблица содержит структуру входных данных, соответствующую примеру 4.8. Данная структура представлена в иерархическом виде и построена на базе конструкций Джексона. Аналогичная таблица заполняется для полного набора выходных данных (табл. 4.3).

123

 

Структура входных компонентов данных

Таблица 4.2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ссылочныйномер

 

Ссылочныйномер старшегокомпонента

 

-Повто рение

 

-Последо -ватель ность

 

 

 

 

 

 

 

 

Ссылочные номера

 

 

 

 

Имя компонента

составляющих компонентов

 

 

Тип

 

данных

 

 

 

 

 

 

 

компонента

 

(условие

 

 

 

 

 

 

 

 

 

появления)

 

 

 

Выбор

Элемен-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тарная

 

 

 

 

 

 

 

 

 

 

 

1

Последова-

—

Входной файл

1.2,

 

1.1

—

—

 

 

тельность

 

 

1.3

 

 

 

 

 

1.1

Последова-

1

Заголовок

—

 

1.1.2

—

1.1.1

 

 

тельность

 

 

 

 

 

 

 

 

1.2

Повторение

1

Тело файла

—

 

—

1.2.1

—

 

 

 

 

 

 

 

 

 

 

 

1.3

Повторение

1

Завершитель

—

 

—

—

1.3.1

 

 

 

 

 

 

 

 

 

 

 

1.1.1

Элементарная

1.1

Символ «Н»

—

 

—

—

—

 

 

 

 

 

 

 

 

 

 

 

1.1.2

Последова-

1.1

Содержимое

—

 

—

1.1.2.1

1.1.2.2

 

 

тельность

 

заголовка

 

 

 

 

 

 

1.2.1

Выбор

1.2

Дата (пока не за-

—

 

—

—

1.2.1.1,

 

вершитель)

 

1.2.1.2

 

1.3.1.

Элементарная

1.3

«Z» (пока <= 8)

—

 

—

—

—

 

 

 

 

 

 

 

 

 

 

 

1.1.2.1

Выбор

1.1.2

Тип файла

—

 

—

—

1.1.2.1.1,

 

 

1.1.2.1.2

 

1.1.2.2

Элементарная

1.1.2

Дата создания

—

 

—

—

—

 

файла

 

 

1.2.1.1

Элементарная

1.2.1

Летняя дата

—

 

—

—

—

 

 

 

 

 

 

 

 

 

 

 

1.2.1.2

Элементарная

1.2.1

Зимняя дата

—

 

—

—

—

 

 

 

 

 

 

 

 

 

 

 

1.1.2.1.1

Элементарная

1.1.2.1

Тип 1

—

 

—

—

—

 

 

 

 

 

 

 

 

 

 

 

1.1.2.1.2

Элементарная

1.1.2.1

Тип 2

—

 

—

—

—

 

 

 

 

 

 

 

 

 

 

 

124

 

Структура выходных компонентов данных

Таблица 4.3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ссылочныйномер

 

Ссылочныйномер старшегокомпонента

 

-Повто рение

 

-Последо -ватель ность

 

 

 

 

 

 

 

 

Ссылочные номера

 

 

 

 

Имя компонента

составляющих компонентов

 

 

Тип

 

данных

 

 

 

 

 

 

 

компонента

 

(с условием

 

 

 

 

 

 

 

 

 

появления)

 

 

 

Выбор

Элемен-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тарная

 

 

 

 

 

 

 

 

 

 

 

1

Последова-

—

Выходной файл

 

 

1.1, 1.2

—

—

 

тельность

 

 

 

 

 

 

 

 

 

 

 

 

1.1

Последова-

1

Заголовок

—

 

 

—

1.1.1,

 

 

тельность

 

 

 

 

 

 

1.1.2

 

1.2

Последова-

1

Тело файла

—

 

—

—

1.2.1,

 

 

тельность

 

 

 

 

 

 

1.2.2

 

1.1.1

Элементарная

1.1

Тип файла

—

 

—

—

—

 

 

 

 

 

 

 

 

 

 

 

1.1.2

Элементарная

1.1

Дата создания

—

 

—

—

—

 

файла

 

 

1.2.1

Элементарная

1.2

Количество

—

 

—

—

—

 

 

 

 

летних дат

 

 

 

 

 

 

1.2.2

Элементарная

1.2

Количество

—

 

—

—

—

 

зимних дат

 

 

Для заполнения таблиц необходимо выполнить следующие действия. 1-й шаг. Представить совокупность всех входных и выходных данных в

виде компонентов самого высокого уровня (например, «Файл», «Отчет» и т.д.). 2-й шаг. Перечислить подкомпоненты данных, которые содержит компонент из 1-го или 4-го шагов. Этот компонент должен быть либо последователь-

ностью, либо повторением, либо выбором.

3-й шаг. Снабдить иерархическими номерами все подкомпоненты. Указать имя, тип, номер и условие появления.

4-й шаг. Для каждого подкомпонента определить, можно ли его обрабатывать при каждом появлении одним и тем же набором действий независимо от условий. Если да, то компонент можно считать элементарным и исследовать следующий подкомпонент компонента более высокого уровня. Если нет, то необходим возврат ко 2-му шагу с целью дальнейшего разложения этого подкомпонента.

125

Б. Графическое представление структур данных

На основе разработанных таблиц, идентифицирующих компоненты входных и выходных данных, выполняется графическое построение их структур.

На рис. 4.49 содержится результат графического представления структуры входных данных. Основу для данного представления составляет табл. 4.2.

 

 

 

 

 

 

 

 

 

 

1

 

 

Входной

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

файл

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.1

Заголовок

 

1.2

 

Тело файла

 

 

1.3

Завершитель

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.1.1

 

 

 

 

 

 

 

1.1.2

 

 

 

 

 

 

1.2.1

1.3.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*

 

 

 

 

 

 

Символ Н

 

Содержимое

 

 

 

 

(8)

 

 

*

 

заголовка

 

 

 

Дата

 

 

 

Z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.1.2.1

 

 

 

 

 

 

1.1.2.2

 

1.2.1.1

 

 

 

1.2.1.2

 

 

 

 

 

 

 

 

 

 

 

 

Дата создания

 

 

 

 

О

 

 

 

О

 

 

 

 

Тип файла

 

 

 

 

Летняя дата

 

Зимняя дата

 

 

 

 

 

 

 

файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

О

 

 

 

 

О

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тип 1

 

 

Тип 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.1.2.1.1 1.1.2.1.2

Рис. 4.49. Графическое представление структуры входного файла

Рис. 4.50 содержит графическое представление структуры выходного файла. Данное представление получено на основе табл. 4.3.

В. Контрольный перечень вопросов для анализа структур данных

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

Первая часть перечня предназначена для проверки полноты структуры данных. Примеры вопросов, относящихся к данной части:

идентифицирован ли каждый вход и выход?

126

представляет ли компонент данных самого высокого уровня весь вход или выход?

идентифицирован ли каждый компонент данных именем?

идентифицированы ли все объекты прикладного уровня (заголовки, типы строк отчетов и т.п.)?

можно ли идентифицировать дополнительные структуры данных? Вторая часть перечня предназначена для оценки корректности структур

данных. Примеры вопросов, относящихся к данной части:

является ли каждый подкомпонент конструкции выбора взаимоисключающим среди других соответствующих подкомпонентов?

изображена ли структура данных сверху вниз и слева направо с точки зрения появления компонентов данных?

является ли каждый компонент данных корректной последовательностью, выбором, повторением или элементарным компонентом?

1

Выходной файл

 

1.1

 

 

 

 

 

 

1.2

 

 

Заголовок

 

 

 

Тело файла

 

1.1.1

 

 

 

 

1.2.1

 

 

 

 

 

1.1.2

 

1.2.2

Тип файла

 

Дата создания

 

Количество

 

Количество

 

файла

 

летних дат

 

зимних дат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.50. Графическое представление структуры выходного файла

Этап 2. Идентификация соответствий между структурами данных

Второй этап метода JSP Джексона заключается в идентификации соответствий между структурами входных и выходных данных, созданными на первом этапе. Общие правила установления соответствий между компонентами входной и выходной структур данных:

1)должно совпадать количество соответствующих друг другу компонентов данных;

2)соответствующие компоненты должны появляться в одинаковом

порядке;

3)должна быть возможной совместная обработка каждого набора соответствующих компонентов.

127

Наиболее эффективный способ идентификации всех соответствий состо-

ит в том, чтобы начать со структуры данных с наименьшим числом компонентов. В рассматриваемом примере такой структурой является структура выходных данных (сравните рис. 4.49 и рис. 4.50). Используя три приведенных выше правила, необходимо начинать с вершины структуры и при работе продвигаться вниз.

На рис. 4.51 представлен результат идентификации соответствий рассмотренных структур входных и выходных данных.

Этап 3. Создание структуры программы

Можно выделить три подэтапа создания структур программ.

Подэтап 1. Слияние соответствующих компонентов входных и выходных данных для формирования компонентов программы.

В результате получается упрощенная структура (ядро) программы. Каждый из ее сформированных компонентов снабжается соответствующим именем (например, вида «Обработка Х для создания Y»).

На рис. 4.52 показан результат данного подэтапа для рассматриваемого примера. В этом случае имеется пять линий соответствия между входными и выходными данными (см. рис. 4.51). Каждая линия заменяется соответствующим компонентом программы. Поэтому упрощенная структура программы также состоит из пяти компонентов.

Подэтап 2. Включение не имеющих соответствия компонентов структуры входных данных в формируемую структуру программы на те же относительные иерархические места и присвоение им соответствующих имен.

На рис. 4.53 содержится результат выполнения данного подэтапа. На данном рисунке двойной линией справа выделены добавленные на данном подэтапе компоненты программы. Повторяемые компоненты входной структуры стали повторяемыми компонентами программы. Выбираемые компоненты входной структуры стали выбираемыми компонентами программы. Однако, как будет видно при рассмотрении подэтапа 3, такое непосредственное преобразование возможно не всегда.

Подэтап 3. Включение не имеющих соответствия компонентов структуры выходных данных в формируемую структуру программы на те же относительные иерархические места и присвоение им соответствующих имен.

На рис. 4.54 представлен результат выполнения данного подэтапа. На данном рисунке двойной линией справа выделены добавленные на данном подэтапе компоненты программы.

128

129

Входной

 

 

 

Выходной

файл

 

 

 

файл

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заголовок

 

 

Тело файла

 

Завершитель

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(8)

Символ Н

 

Содержимое

 

*

 

 

*

 

 

заголовка

 

Дата

 

Z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заголовок

 

Тело файла

 

 

 

Тип

Дата соз-

Количество

Количество

файла

дания

летних дат

зимних дат

Тип

 

Дата созда-

 

О

 

О

 

 

Летняя дата

 

Зимняя дата

файла

 

ния файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ОО

Тип 1 Тип 2

Рис. 4.51. Идентификация соответствий между входной и выходной структурами данных

129

Программа подсчета дат

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

Обработка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

заголовка

 

 

тела файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

 

Обработка даты

 

 

 

 

 

 

 

 

 

 

 

 

 

типа файла

 

 

создания файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.52. Упрощенная структура программы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Программа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

подсчета

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

 

 

 

 

 

 

Обработка

 

 

 

 

 

 

 

Обработка

 

 

 

 

 

 

 

 

 

 

тела

 

 

 

 

 

 

 

 

 

заголовка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

завершителя

 

 

 

 

 

 

 

 

 

 

файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

 

Обработка

 

 

 

 

 

 

 

 

*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*

символа

 

 

содержимого

 

 

 

 

Обработка

 

 

 

 

 

 

(8)

Обработка Z

 

Н

 

 

 

 

заголовка

 

 

 

 

даты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

 

Обработка

 

 

 

 

 

 

О

 

 

 

 

 

О

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

типа

 

 

 

даты создания

 

 

Обработка

 

 

 

 

 

 

Обработка

 

 

 

файла

 

 

 

 

файла

 

 

летней даты

 

 

 

зимней даты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

О

 

 

 

 

 

 

О

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

 

Обработка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

типа 1

 

 

 

 

типа 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.53. Добавление не имеющих соответствия компонентов структуры входных данных

130

131

131

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Программа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

подсчета

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

 

 

 

 

 

 

 

Обработка

 

 

 

 

 

 

 

Обработка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тела

 

 

 

 

 

 

 

 

 

 

заголовка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

завершителя

 

 

 

 

 

 

 

 

 

 

 

 

 

файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

 

Обработка

 

 

 

 

 

Обработка

 

 

 

 

 

Обработка

 

(8)

 

 

*

 

символа

 

 

содержимого

 

 

 

 

 

набора

 

 

 

 

 

 

 

Обработка Z

 

 

 

 

 

 

 

 

 

 

 

 

 

количества

 

 

 

 

Н

 

 

 

заголовка

 

 

 

 

 

дат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

 

Обработка

 

 

 

*

 

 

 

 

Обработка

 

 

Обработка

 

 

 

 

 

 

типа

 

 

 

 

даты создания

 

Обработка

 

 

количества

 

 

количества

 

 

 

 

 

файла

 

 

 

 

 

файла

 

 

даты

 

 

 

летних дат

 

 

зимних дат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

О

 

 

 

 

 

 

 

О

 

 

 

О

 

 

 

 

 

О

 

 

 

 

 

 

 

 

Обработка

 

Обработка

 

 

Обработка

 

Обработка

 

 

 

 

 

 

 

 

 

 

 

типа 1

 

 

 

типа 2

 

летней даты

 

зимней даты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.54. Добавление не имеющих соответствия компонентов структуры выходных данных

В структуре выходных данных не имеют соответствия компоненты «Количество летних дат» и «Количество зимних дат». Это подкомпоненты компонента «Тело файла» выходных данных (см. рис. 4.50 и рис. 4.51). Следовательно, в проектируемой структуре программы компоненты, обрабатывающие «Количество летних дат» и «Количество зимних дат», должны стать подкомпонентами компонента «Обработка тела файла». Однако они не должны содержаться в подкомпоненте «Обработка даты» последнего (см. рис. 4.51 и рис. 4.53). Поэтому их нужно поместить вне этого подкомпонента. Так как подкомпоненты «Количество летних дат» и «Количество зимних дат» могут возникнуть только после обработки всего набора дат, то соответствующие компоненты программы нужно поместить за компонентом «Обработка даты». Поэтому в это место структуры программы добавляется компонент «Обработка количества».

Добавление изменяет структуру компонента «Обработка тела файла». Ранее этот компонент был повторением с повторяемой частью «Обработка даты». Теперь он стал последовательностью. Напомним, что среди последовательных подкомпонентов не должно быть повторяемых. Поэтому в структуру компонента «Обработка тела файла» добавляется подкомпонент «Обработка набора дат».

Таким образом, в результате трех подэтапов третьего этапа сформирована управляющая структура программы (см. рис. 4.54).

На следующем этапе необходимо снабдить управляющую структуру программы выполняемыми операциями.

Этап 4. Перечисление и распределение выполняемых операций

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

спецификацию того, что должно делать программное средство;

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

Для составления списка операций рекомендуется пользоваться контрольным перечнем операций. В состав данного перечня входят следующие группы операций.

I.Операции завершения, служащие для прекращения работы программы – по одной на программу (например «Стоп», «Конец» и т.п.).

II. Операции открытия и закрытия (например для файлов). III. Операции вывода результатов (например «Писать»). IV. Вычисления.

V. Операции ввода входных данных (например «Читать»).

VI. Управление внутренними переменными (например запоминание, инициализация и т.п.).

132

Ниже описан перечень операций для программы, управляющая структура которой представлена на рис. 4.54. При этом используется один из метаязыков,

называемый метаязыком структурированного изложения [26].

I. Операции завершения

Как уже отмечалось, для проектируемой программы необходима одна операция данной группы:

1.Стоп.

II.Операции открытия и закрытия

Врассматриваемой программе используется два файла – входной и выходной. Поэтому из операций данной группы для проектируемой программы необходимы следующие операции:

2.Открыть входной файл.

3.Открыть выходной файл.

4.Закрыть входной файл.

5.Закрыть выходной файл.

III.Операции вывода результатов

Для определения операций вывода исследуется структура выходных данных (см. рис. 4.50). Каждому элементарному компоненту данной структуры соответствует своя операция вывода:

6.Писать тип файла.

7.Писать дату создания файла.

8.Писать количество летних дат.

9.Писать количество зимних дат.

IV. Вычисления

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

Врассматриваемом примере для операций 6 и 7 вычислений не нужно – информация по условию задачи должна просто переписываться из входного файла в выходной (см. условие примера 4.8).

Для операций 8, 9 необходим подсчет количества летних (Кл) и зимних (Кз) дат. Поэтому появляются операции:

10.Кл := Кл + 1.

11.Кз := Кз + 1.

V. Операции ввода входных данных

Врассматриваемом примере используется один входной файл. Поэтому необходима одна операция ввода:

12.Читать из входного файла.

VI. Управление внутренними переменными

Внутренние переменные используются, как правило, в вычислениях. Переменными, участвующими в вычислениях, в рассматриваемом примере явля-

133

ются счетчики Кл и Кз (см. операции 10, 11). Вначале их нужно обнулить:

13.Кл := 0.

14.Кз := 0.

Итак, полный набор выполняемых операций в рассматриваемом примере содержит 14 операций.

Для размещения данных операций в нужные места структуры программы (см. рис. 4.54) по каждой из операций необходимо определить следующую информацию:

1)когда и какую часть данных обрабатывает операция (например один раз на файл, один раз на запись и т.п.);

2)где эта часть данных обрабатывается в структуре программы. В результате идентифицируется компонент программы, в который вносится анализируемая операция. Эта операция вносится как его последовательный подкомпонент;

3)на каком последовательном месте должна появиться операция в компоненте программы (слева или справа – в начале или в конце компонента).

Результат размещения выполняемых операций в структуре программы представлен на рис. 4.55. На данном рисунке двойной линией справа выделены добавленные на данном этапе компоненты программы.

Операция 1 (Стоп) встречается один раз на файл. Файл обрабатывается компонентом «Программа подсчета дат». Поэтому операция «Стоп» должна являться последовательным подкомпонентом этого компонента. Данная операция встречается в самом конце программы. Поэтому размещается на правом краю компонента «Программа подсчета дат».

По аналогии операции 2 – 5 (Открытие и закрытие файлов) также явля-

ются последовательными подкомпонентами компонента «Программа подсчета дат». Но операции 2, 3 (Открытие входного и выходного файлов) необходимо поместить вначале (слева) программы, а операции 4, 5 (Закрытие файлов) – справа, но перед операцией 1 (Стоп).

Операция 6 (Писать тип файла) выполняется один раз на тип файла. Тип файла обрабатывается компонентом «Обработка типа файла». Но у него уже есть два выбираемых подкомпонента «Обработка типа 1», «Обработка типа 2». Операция 6 должна появляться после любого из этих подкомпонентов. Таким образом, компонент «Обработка типа файла» должен превратиться из выбора в последовательность двух подкомпонентов: сначала выбор, затем операция 6. Поэтому в программу вводится дополнительный компонент «Обработка содержимого типа».

Очевидно, что операция 7 (Писать дату создания файла) является под-

компонентом компонента «Обработка даты создания файла».

Аналогично, операции 8, 9 (Писать количество летних дат, Писать ко-

личество зимних дат) распределяются по компонентам «Обработка количества летних дат», «Обработка количества зимних дат».

134

135 135

135 135

Программа подсчета дат

2 3 13 14

Обработка символа Н

Обработка типа файла

Обработка содержимого 6

типа

Обработка О

 

Обработка О

типа 1

 

типа 2

 

 

 

12

 

 

Обработка

 

 

 

Обработка

 

 

Обработка

 

4

5

1

 

 

 

 

заголовка

 

 

 

тела файла

 

 

завершителя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

Обработка

 

 

Обработка

 

 

Обработка *

(8)

 

содержимого

 

 

набора

 

 

количества

 

 

 

Z

 

 

 

 

заголовка

 

 

 

дат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

Обработка *

 

 

 

 

 

 

 

Обработка

 

 

Обработка

 

 

даты созда-

 

 

 

даты

 

 

 

 

 

 

 

количества

 

 

количества

 

 

ния файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

летних дат

 

 

зимних дат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

12

 

 

выбранной

 

 

8

 

 

 

 

 

9

 

 

 

 

 

 

 

 

даты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обработка О

 

Обработка О

 

 

 

 

 

 

 

 

 

 

 

 

летней даты

 

зимней даты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.55. Размещение выполняемых операций

Точно также операции 10, 11 (Кл := Кл + 1, Кз := Кз + 1) являются подкомпонентами компонентов «Обработка летней даты», «Обработка зимней даты».

Операции 13, 14 (Кл := 0, Кз := 0) выполняются один раз на всю программу. Поэтому они являются подкомпонентами компонента «Программа подсчета дат» и должны располагаться вначале (слева) программы.

Операция 12 (Читать из входного файла) должна появиться первый раз перед обработкой заголовка (один раз на всю программу). Поэтому операция 12 подключается к компоненту «Программа подсчета дат» перед подкомпонентом «Обработка заголовка» (слева от него). Затем операция 12 должна появляться перед обработкой каждой даты. Поэтому ее нужно подключить как последовательный подкомпонент компонента «Обработка даты». Таким образом, компонент «Обработка даты» из выбора превращается в последовательность и к нему добавляется подкомпонент «Обработка выбранной даты» (см. рис. 4.55).

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

Этап 5. Создание текста программы на метаязыке структурированного описания

Каждая из основных конструкций, используемых в методе JSP (последовательность, выбор, повторение), может быть записана на метаязыке структурированного описания, который является одной из разновидностей словесного описания алгоритма [26].

Рис. 4.56 иллюстрирует представление конструкции последовательности при использовании структурированного описания. Данное представление состоит из списка подкомпонентов последовательности в порядке слева направо с меткой посл (последовательность) в начале и с меткой конец в конце.

Рис. 4.57 содержит представление конструкции выбора в структурированном описании. Представление выбора начинается меткой выб (выбор) и заканчивается меткой конец. «Условие Р» – это условие, при истинности которого выполняется процесс Р. Аналогичное назначение имеют «Условие Q», «(Условие R)». Последнее условие берется в скобки, так как в программе, написанной на конкретном языке программирования, оно, как правило, не пишется (соответствует ветви «иначе»).

Рис. 4.58 иллюстрирует представление конструкции повторения в структурированном описании. Представление начинается меткой повт (повторение) и заканчивается меткой конец. «Пока условие Х» описывает условие, при котором повторяется выполнение процесса Х.

136

Последовательность

 

 

Структурированное описание

 

 

 

 

 

 

 

А посл

 

 

 

A

 

 

 

Выполнить В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполнить С

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполнить D

B

 

C

 

D

 

А конец

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.56. Конструкция последовательности

 

 

 

 

и ее структурированное описание

 

Выбор

 

 

Структурированное описание

 

 

 

 

 

 

 

Е выб Условие Р

 

 

Е

 

 

 

 

 

 

 

 

 

Выполнить Р

 

 

 

 

 

 

 

Е или

Условие Q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполнить Q

О

 

 

О

 

 

О

Е или

(Условие R)

Р

 

Q

 

R

 

 

 

 

 

Выполнить R

 

 

 

 

 

 

 

Е конец

 

 

 

 

 

 

 

Рис. 4.57. Конструкция выбора и ее структурированное описание

Повторение

Структурированное описание

 

 

 

 

I повт Пока условие Х

 

I

 

 

 

Выполнить Х

 

 

 

 

 

 

 

 

I конец

 

 

 

 

 

 

 

 

 

*

X

Рис. 4.58. Конструкция повторения и ее структурированное описание

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

137

Для обеих конструкций выбора «Обработка содержимого типа» и «Обработка выбранной даты» (см. рис. 4.55) условия непосредственно связаны с проверкой текущего содержимого обрабатываемых данных.

Для повторения «Обработка набора дат» условием повторения является отсутствие завершителя (8 символов Z). Таким образом, с завершителем ничего не нужно делать, кроме распознавания его появления.

Еще одним компонентом, не требующим выполнения операций, является компонент «Обработка символа Н».

Таким образом, структурированное описание программы подсчета дат,

схема которой представлена на рис. 4.55, имеет следующий вид:

Программа подсчета дат посл Открыть входной файл Открыть выходной файл Кл := 0 Кз := 0

Читать из входного файла Обработка заголовка посл Писать тип файла

Писать дату создания файла Обработка заголовка конец Обработка тела файла посл

Обработка набора дат повт пока не завершитель ((8) Z) Обработка даты посл

Читать из входного файла Обработка выбранной даты выб условие летней даты

Кл := Кл + 1 Обработка выбранной даты или (условие зимней даты)

Кз := Кз + 1 Обработка выбранной даты конец

Обработка даты конец Обработка набора дат конец Обработка количеств посл

Писать количество летних дат Писать количество зимних дат

Обработка количеств конец Обработка тела файла конец Закрыть входной файл Закрыть выходной файл Стоп

Программа подсчета дат конец.

138