Файл: Технология раработки програмного обеспечения УП.pdf

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

 

 
 

56

 

Рис.

 

4.5

 

 

Примеры

 

простых

 

программ

 

Используя

 

указанное

 

определение,

 

нисходящую

 

разработ-

ку

 

можно

 

представить

 

в

 

виде

 

следующего

 

алгоритма:

 

Пусть программа представлена одним 
  

функциональным узлом; 

do while 

(

проектирование не окончено); 

  

Заменить некоторый узел простой программой; 

end

Этот

 

алгоритм

 

не

 

позволяет

 

использовать

 

оператор

 

goto

 

и

 

требует

 

от

 

программиста

 

больших

 

временных

 

затрат

 

на

 

раз-

работку,

 

чем

 

обычно.

 

Однако

 

для

 

реализации

 

метода

 

пошагово-

го

 

совершенствования

 

разработан

 

соответствующий

 

аппарат,

 

ускоряющий

 

этот

 

процесс.

 

Определим

 

элементарную

 

программу

 

как

 

простую

 

про-

грамму,

 

которая

 

не

 

включает

 

простых

 

программ,

 

состоящих

 

более

 

чем

 

из

 

одного

 

узла.

 

Обычно

 

программист,

 

анализируя

 

программу,

 

изучает

 

от-

дельные

 

операторы

 

и,

 

разобрав

 

группу

 

операторов,

 

объединяет

 

их

 

вместе.

 

Такой

 

процесс

 

изучения

 

программы

 

диаметрально

 

противоположен

 

методу

 

пошагового

 

совершенствования.

 

Неко-

торый

 

функциональный

 

узел

 

обязательно

 

окажется

 

оператором

 

присвоения,

 

и

 

определить

 

его

 

функцию

 

относительно

 

просто.

 


background image

 

 

 
 

57

Если

 

небольшое

 

количество

 

узлов

 

объединено

 

в

 

элементарные

 

программы,

 

то

 

понять

 

их

 

функции

 

также

 

относительно

 

неслож-

но.

 

Конструкция

 

if

 

 

then

 

 

else

 

состоит

 

из

 

трех

 

узлов

 

(один

 

предикат

 

и

 

две

 

функции);

 

для

 

нее

 

можно

 

определить

 

функцию,

 

включающую

 

в

 

себя

 

функции,

 

соответствующие

 

час-

тям

 

then 

и

 

else 

оператора.

 

Изучение

 

сложных

 

программ

 

основано

 

на

 

объединении

 

сведений

 

о

 

более

 

мелких

 

составных

 

частях

 

программы.

 

 

Рис.

 

4.6

 

 

Примеры

 

непростых

 

программ

 

Рассмотрим

 

программу,

 

которая

 

имеет

 

несколько

 

опера-

торов

 

goto

.

 

В

 

этом

 

случае

 

вся

 

программа

 

(или

 

большая

 

ее

 

часть)

 

мо-

жет

 

быть

 

элементарной.

 

Таким

 

образом,

 

разбор

 

программы

 

можно

 

начать

 

с

 

просмотра

 

всех

 

узлов,

 

поскольку

 

непростых

 

программ

 

в

 

ней

 

не

 

может

 

быть.

 

Для

 

структурного

 

проектирования

 

обычно

 

используются

 

следующие

 

операторы:

 

if

 

 

then

 

 

else

,

 

while

 

 

do

,

 

по-

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

 

Указанные

 

управляющие

 

структуры

 

помога-

ют

 

программистам

 

создать

 

простые

 

программы

 

(функцию,

 

ко-

торая

 

преобразует

 

входные

 

данные

 

в

 

выходные).

 

Пусть

 

f(x)

 

 


background image

 

 

 
 

58

сегмент

 

программы,

 

состоящей

 

из

 

оператора

 

if

 

 

then

 

 

else

 

(рис.

 

4.7).

 

 

if

 

p(xthen g(xelse 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


background image

 

 

 
 

59

ются

 

минимальным

 

набором,

 

поскольку

 

было

 

доказано,

 

что

 

любая

 

программная

 

функция

 

может

 

быть

 

представлена

 

про-

граммой

 

с

 

указанными

 

двумя

 

управляющими

 

структурами.

 

Од-

нако

 

вместо

 

них

 

можно

 

использовать

 

другие

 

конструкции,

 

на-

пример

 

repeat

 

 

until

. 

repeat 

  

набор операторов; 

until 

(

выражение); 

Что

 

эквивалентно

 

следующему:

 

набор операторов; 
do while 

(

выражение); 

  

набор операторов; 

end

Кроме

 

того,

 

такие

 

же

 

функции

 

может

 

реализовывать

 

опе-

ратор

 

do

 

 

case 

с

 

произвольным

 

числом

 

узлов.

 

Для

 

передачи

 

управления

 

предназначен

 

оператор

 

leave

.

 

При

 

его

 

использо-

вании

 

передача

 

управления

 

принимает

 

вид

 

«остановить

 

выпол-

нение

 

данной

 

функции».

 

Заметим,

 

что

 

«интеллектуальная

 

управляемость»,

 

а

 

не

 

«отсутствие

 

операторов

 

goto

»

 

является

 

движущей

 

силой

 

про-

цесса

 

проектирования.

 

4.3 

Данные

 

4.3.1 Обзор структур данных 

Любая

 

программа

 

 

это

 

формальное

 

описание

 

решения

 

некоторой

 

задачи

 

реального

 

мира.

 

Как

 

часть

 

этого

 

решения

 

конкретные

 

данные

 

тоже

 

должны

 

быть

 

формализованы

 

таким

 

образом,

 

чтобы

 

программа

 

могла

 

проводить

 

вычисления.

 

Для

 

облегчения

 

процесса

 

формализации

 

задачи

 

в

 

языки

 

программи-

рования

 

включены

 

наборы

 

различных

 

типов

 

данных.

 

Но

 

так

 

как

 

ни

 

один

 

разработчик

 

языка

 

не

 

сможет

 

предвидеть

 

всех

 

возмож-

ных

 

применений

 

последнего,

 

набор

 

типов

 

данных

 

неизбежно

 

окажется

 

неполным.

 


background image

 

 

 
 

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 Структуры 

Самой

 

сложной

 

разновидностью

 

данных

 

в

 

языках

 

про-

граммирования

 

являются

 

структуры.

 

Структурой

 

называют

 

поименованную

 

совокупность

 

различных

 

типов

 

данных.