logo
Лекции_ПиОА[1]

5.6. Пошаговая детализация и понятие о псевдокоде

Структурное программирование отвечает на вопрос, каким должен быть текст модуля. Но возникает другой вопрос, как должен действовать программист, чтобы построить такой текст. Часто программирование модуля начинают с построения его блок-схемы, описывающей в общих чертах логику его работы. Однако современная технология программирования не рекомендует этого делать без компьютерной поддержки. Хотя блок-схемы позволяют наглядно представить логику работы модуля, при его ручном кодировании на языке программирования возникает специфический источник ошибок - отображение двумерных структур, каковыми являются блок-схемы, на линейный текст, представляющий модуль, содержит опасность искажения логики работы модуля. Исключением является случай, когда блок-схемы формализованы до уровня графической редакции и автоматической генерации текста на языке программирования, как, например, в Р-технологии.

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

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

Головным описанием на псевдокоде является внешнее оформление модуля на базовом языке программирования, которое содержит: 1) начало модуля на базовом языке, т.е. первое предложение или заголовок этого модуля; 2) раздел описаний на базовом языке, причем вместо описаний процедур и функций  только их внешнее оформление; 3) неформальное обозначение последовательности операторов тела модуля как одного обобщенного оператора, а также неформальное обозначение тела каждого описания процедуры или функции как одного обобщенного оператора; 4) последнее предложение (конец) модуля на базовом языке. Внешнее оформление описания процедуры или функции представляется аналогично. По Дейкстра раздел описаний лучше представить неформальным обозначением, произведя его детализацию в виде отдельного описания.

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

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

П

ИСКЛЮЧЕНИЕ имя исключения

обобщенный оператор

ВСЕ ИСКЛЮЧЕНИЕ

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

Рекомендуется на каждом шаге детализации создавать содержательное, но легко обозримое описание, так чтобы оно размещалось на одной странице текста. Такое описание является композицией пяти-шести конструкций структурного программирования. Рекомендуются вложенные конструкции смещать на несколько позиций вправо (рис. 13). В результате будет получено описание логики работы по наглядности конкурентное с блок-схемами, но обладающее существенным преимуществом  сохраняется его линейность.

Наряду с пошаговой детализацией Дейкстра предложил еще две принципиальные и перспективные идеи. Во-первых, вместе с уточнением операторов пошагово уточнять используемые структуры данных. Во-вторых, создавать на каждом шаге некоторую виртуальную машину и в ее терминах производить детализацию всех уточняемых понятий. Таким образом, Дейкстра, по существу, предложил горизонтально-слоевую деталировку, что является развитием его идеи о слоистых системах на уровне разработки модулей. Метод разработки модуля, предложенный Дейкстра, поддерживается пакетами языка АДА и средствами объектно-ориентированного программирования.