Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
проектирование.rtf
Скачиваний:
9
Добавлен:
01.05.2015
Размер:
178.34 Кб
Скачать

9. Проектирование компьютерной программы

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

Проект КОМПЬЮТЕРНОЙ программы =

= проект структур данных + проект алгоритма обработки этих данных

В соответствии со спецификацией программы.

9.1. Характеристика исполнителя кп

В разделе 4.1. исполнитель алгоритма был определен своей характеристикой – набором видов данных, с которыми он мог работать, и набором операций, которые он мог выполнять над этими данными. Исполнителем КП является система программирования, установленная на компьютере, поэтому характеристика исполнителя КП (ИКП) зависит от языка, на котором предполагается писать КП, и от среды, в которой ведется разработка КП.

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

Наборы операций, которые ИКП может выполнять над данными сконструированных типов, состоят из операций ЯП и из тех операций, которые нужны для решения задачи и которые можно смоделировать в виде функций и/или процедур ЯП.

Различные ЯП представляют различные типы данных и различные средства для конструирования сложных типов данных. При проектировании КП очень важно подобрать подходящий ЯП и подходящую среду разработки КП на этом языке. Среда разработки КП обычно содержит средства для расширения множества типов данных (например, для добавления файлов в число объектов, с которыми может работать ИКП) и множества операций над данными (например, для добавления операций ввода и вывода данных в перечень операций над данными, которые может выполнять ИКП).

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

Данные представляют собой абстракции реальных объектов и, как правило, формулируются первоначально как абстрактные структуры, не обязательно реализованные в распространенных ЯП. В процессе разработки КП представление данных постепенно уточняется вслед за уточнением алгоритма, всё более подчиняясь ограничениям, которые накладывает конкретная система программирования.

Существуют несколько элементарных (“неделимых”) структур данных: числа (целые и вещественные) и символы. В ЯП они представлены простыми типами: целый, вещественный, символьный.

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

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

Слова "спроектировать структуру данного" означают:

  • сопоставить этому данному переменную ЯП, тип которой наиболее подходит для этого данного (с учётом области его определения),

  • подобрать для этой переменной мнемоническое имя в соответствии со смыслом сопоставленного ей данного.

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

Например, при составлении КП для решения задачи о выборе максимального из трех заданных чисел (см. 4.? ) каждому из трех чисел (данных элементарной структуры) сопоставляется переменная со своим именем (A, B или C), но все эти переменные имеют один и тот же тип – натуральное число. При проектировании структур данных КП для решения другой задачи – о нахождении максимального элемента в числовой матрице размером 2×6 - данному фундаментальной структуры “матрица” сопоставляется М - переменная типа массив [2,6] ЯП.

    1. проектирование алгоритма обработки данных

Языки проектирования КП

Для описания процесса проектирования КП используются специализированные языки, называемые языками проектирования (Project Design Language - PDL). PDL в общем случае позволяет описывать проекты КП с точки зрения логики и без учёта специфики конкретной вычислительной системы и расположения программ и данных в физической памяти компьютера. Это не полностью формализованный язык; он обычно легко понимается, так как сохраняет особенности естественного языка. Он способствует установлению взаимопонимания между разработчиками программы и во многих случаях допускает почти прямую трансляцию на традиционные языки программирования.

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

Например, проект КП для решения задачи о выборе максимального из трех заданных чисел на языке PDL может выглядеть так:

Ввод исходных данных:

A <первое число >, B <второе число >, C <третье число >;

Обработка данных:

MAX max(A,B,C)

Вывод результатов:

<Ответ > MAX

В этом тексте использованы в качестве ключевых слов конструкции “Ввод исходных данных с контролем”, “Вывод результатов:”, “Обработка данных:”, “”, “<” , “>”. На естественном русском языке записан смысл вводимых и выводимых данных. Язык математики используется для формальной записи правил обработки данных: max(A,B,C).

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

методом пошагового уточнения

Существует несколько методов проектирования компьютерных программ, среди которых выделяются методы нисходящего ("сверху вниз" или Up-Down) и восходящего ("снизу вверх" или Down-Up) проектирования. Метод нисходящего проектирования называют также методом функциональной декомпозиции []. Ниже будет изложен этот метод, базирующийся на стратегии пошагового уточнения (Stepwise Refinement) и использующий при этом базовые управляющие структуры: ЛУЧ, ВЕТВЛЕНИЕ и ЦИКЛ, - применительно к проектированию КП.

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

Внешний синтаксис языка PDL, предназначенного для проектирования КП на каком-либо процедурном ЯП высокого уровня (целевом ЯП) методом пошагового уточнения, зависит от того, на каком именно ЯП должна быть написана эта КП. Эта зависимость выражается в виде ограничений на вид конструкций, которые разрешено использовать на шаге уточнения обобщённых операторов. Все ограничения входят в состав внешнего синтаксиса этого PDL.

Проект программы, записанный на таком PDL, представляет собой совокупность названия проектируемой КП и описаний шагов уточнения. Описание одного шага уточнения имеет вид правила вывода в некоторой КС-грамматике, которую строит сам проектировщик. В левой части каждого правила вывода в качестве нетерминального символа записывается имя обобщённого оператора, который предназначен для выполнения некоторой подфункции. И только в описании одного из шагов детализации (по смыслу - первом при проектировании) в левой части записывается имя (название) самой КП. В правой части каждого правила записывается (с использованием средств ЯП) одна из управляющих конструкций целевого ЯП, выбранная проектировщиком для уточнения обобщённого оператора, имя которого стоит в левой части этого правила.

По тексту такого проекта можно будет "собрать" текст КП на целевом ЯП, используя название КП как аксиому, а описания шагов уточнения - как правила вывода в построенной в ходе проектирования КС-грамматике. Терминальный словарь в этой грамматике состоит из цепочек основных символов целевого ЯП, а нетерминальный - из имён обобщённых операторов и имени проектируемой КП. Отметим особенности этой КС-грамматики, вытекающие из определения правила как описания шага уточнения:

  • каждый нетерминальный символ встречается в левой части одного и только одного правила,

  • аксиома не входит в правые части правил.

Если запретить рекурсию при уточнении, то получится, что построенная в ходе проектирования КС-грамматика порождает одну единственную цепочку терминальных символов, которая и является текстом проектируемой КП.

В качестве примера рассмотрим схемы правил PDL, предназначенного для проектирования КП на языке Паскаль. Ниже приводятся схемы записей шагов уточнения, использующие управляющие конструкции языка Паскаль. Всюду под нетерминалом <оператор> понимается либо оператор ЯП Паскаль, либо обобщенный оператор.

Схема ЛУЧ:

<имя обобщённого оператора> <оператор1>[;<оператор2>;…;<операторn>]

Схемы ВЕТВЛЕНИЕ:

<имя обобщённого оператора> if <условие> then <оператор> [ else <оператор>]

<имя обобщённого оператора> case <параметр выбора> of

<список1 значений параметра>: <оператор1>;

<список2 значений параметра >: <оператор2>;

… ;

<списокn значений параметра >: <операторn>;

end

Схемы ЦИКЛ:

<обобщённый оператор> while <условие> do

begin <оператор1; оператор2; … ; операторn> end

<обобщённый оператор> repeat begin <оператор1; оператор2; … ; операторn> end

until <условие>

<обобщённый оператор> for <параметр цикла> := <начальное значение>

[down]to <конечное значение> [by <шаг изменения параметра>] do

begin <оператор1; оператор2; … ; операторn> end

Использование такого PDL при проектировании КП позволяет получить при "сборке" (порождении из аксиомы) структурированную КП [Хьюз и Мичтом, Йодан].