Принципы проектирования и разработки программ

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

Решение задачи(выполняется совместно с проектированием программы)

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

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

3. Анализируйте и осуждайте свою стратегию решения.На каждом уровне детализации ищите простейшие пути решения задачи. Не является ли оно более сложным, нежели требуется?

4. Организуйте свое решение путем написания улучшенного проекта.Не требуется ли реорганизация отдельных разделов проекта для лучшей понятности? Могут ли быть обнаружены подобные операции и организованы в общих разделах проекта?

Проектирование программы(выполняется совместно с решением задачи)

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

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

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

4. Пишите и переписывайте разделы вашего проекта и вашу стратегию решения.Решите задачу, отложите ее решение, и попытайтесь его улучшить.

 

 

Организация программ с процедурами (подпрограммами).

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

Простые процедуры

PROCEDURE Copy;

BEGIN

READ(Ch);

WRITE(Ch);

END

PROGRAM UsingCopy(INPUT, OUTPUT);

{Копирует 2 символа из INPUT в OUTPUT. Выполнение программы прекращается, если INPUT пуст}

VAR

Ch: CHAR;

PROCEDURE Copy;

BEGIN

READ(Ch);

WRITE(Ch);

END;

BEGIN

Copy;

Copy;

WRITELN

END.

 

INPUT :ABCDE

OUTPUT:AB

SR6. <блок> ::= <оператор BEGIN>

| <раздел объявлений> ; <оператор BEGIN >

| <список процедур> ; <оператор BEGIN >

|<раздел объявлений> ; < список процедур> ; <оператор BEGIN >

SR11. <оператор> ::= <оператор READ>

| <оператор WRITE>

| <оператор присвоения>

| <пустой оператор>

| <оператор BEGIN>

| <оператор IF>

| <оператор WHILE>

| <оператор вызова процедуры>

SR26. <список процедур> ::= <описание процедуры>

| <список процедур> ; <описание процедуры>

SR27. <описание процедуры> ::= PROCEDURE <идентификатор> ; <оператор BEGIN>

SR28. <оператор вызова процедуры> ::= <идентификатор>

CR3. Любой идентификатор в операторе, не являющийся <оператором вызова процедуры>, отличный от стандартных идентификаторов вроде READ, WRITE и т.д. должен присутствовать в <списке идентификаторов> <раздела объявлений>.

CR4. Правило появления. <Идентификатор> <оператора вызова процедуры> должен появиться в роли идентификатора, следующего за словом PROCEDURE в <описании процедуры>, до своего появления в <операторе вызова процедуры>. Иными словами, процедура должна быть описана в тексте программы до своего первого использования.

Подсчет символов.

PROGRAM CountChars2(INPUT,OUTPUT);

VAR

Ch, Overflow, Ones, Tens, Hundreds: CHAR;

 

PROCEDURE BumpHundreds;

BEGIN

Tens := '0'

IF Hundreds = '0' THEN Hundreds := '1' ELSE

IF Hundreds = '1' THEN Hundreds := '2' ELSE

IF Hundreds = '2' THEN Hundreds := '3' ELSE

IF Hundreds = '3' THEN Hundreds := '4' ELSE

IF Hundreds = '4' THEN Hundreds := '5' ELSE

IF Hundreds = '5' THEN Hundreds := '6' ELSE

IF Hundreds = '6' THEN Hundreds := '7' ELSE

IF Hundreds = '7' THEN Hundreds := '8' ELSE

IF Hundreds = '8' THEN Hundreds := '9' ELSE

IF Hundreds = '9'

THEN

Overflow := 'Y'

END;

 

PROCEDURE BumpTens;

BEGIN

Ones := '0'

IF Tens = '0' THEN Tens := '1' ELSE

IF Tens = '1' THEN Tens := '2' ELSE

IF Tens = '2' THEN Tens := '3' ELSE

IF Tens = '3' THEN Tens := '4' ELSE

IF Tens = '4' THEN Tens := '5' ELSE

IF Tens = '5' THEN Tens := '6' ELSE

IF Tens = '6' THEN Tens := '7' ELSE

IF Tens = '7' THEN Tens := '8' ELSE

IF Tens = '8' THEN Tens := '9' ELSE

IF Tens = '9'

THEN

BumpHundrends

END;

 

 

PROCEDURE BumpOnes;

BEGIN

IF Ones = '0' THEN Ones := '1' ELSE

IF Ones = '1' THEN Ones := '2' ELSE

IF Ones = '2' THEN Ones := '3' ELSE

IF Ones = '3' THEN Ones := '4' ELSE

IF Ones = '4' THEN Ones := '5' ELSE

IF Ones = '5' THEN Ones := '6' ELSE

IF Ones = '6' THEN Ones := '7' ELSE

IF Ones = '7' THEN Ones := '8' ELSE

IF Ones = '8' THEN Ones := '9' ELSE

IF Ones = '9'

THEN

BumpTens

END;

 

 

PROCEDURE BumpCounter;

BEGIN

BumpOnes

END;

 

BEGIN

Overflow := 'N';

Ones := '0';

Tens := '0';

Hundreds := '0';

READ(Ch);

WHILE Ch <> '#'

DO

BEGIN

BumpCounter;

READ(Ch)

END;

 

IF Overflow = 'N'

THEN

WRITE('Number of characters is ', Hundreds, Tens, Ones)

ELSE

WRITE('Number of characters exceeds 999')

END.

Фаза разработки.

Разработка программ (совместно с тестированием программы)

1. Разработайте план сборки. Составьте части проекта (начав с простейшей программы) в последовательность все более сложных программ. План должен позволять выполнение программы на каждом шаге.

2.Как правило, на каждом шаге добавляйте не более 50 строк из проекта в разработку.

3. Не начинайте с первых 50 строк до тех пор, пока ваш проект не будет завершен.Записан должен быть ваш последний проект, а не первый.

4. Каждые 50 строк программы должны работать без ошибок с первого раза.Сосредоточенность в настоящем сохранит время и нервы в будущем.

 

Тестирование программы (совместно с разработкой программы)

1. Думайте серьезно о вашем плане сборки и о вашей конечной программе.Составьте правильную последовательность программ для получения положительной обратной связи на каждом этапе сборки программы.

2. Разработайте план тестирования. Создайте программы с временными операторами WRITE для получения выразительных результатов выполнения, несмотря на то, что это не окончательные результаты, необходимые вам.

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