Выбрать главу

8.2. Замена вызова старой процедуры на вызов новой также неэффективна, так как старые процедуры также подключаются к объектному коду программы, что приводит к загромождению программы.

8.3. Использовать оператор выбора. Те же ограничения.

8.4. Комментирование измененного кода программы.

8.5. Использование директив компилятора {$IFDEF <условие>} и {$IFOPT <опция>}.

9. ТЕСТИРОВАНИЕ ПРОГРАММ

9.1. Заменить восходящее проектирование тестов нисходящим.

9.2. Инверсия приема.

9.3. Использовать метод большого скачка.

9.4. Использовать метод "сандвича".

9.5. Организовать входные данные для тестирования во внешнем файле. Это исключит повторный ввод данных при каждом тестировании, что позволит сэкономить время.

9.6. Использовать генератор входных данных.

10. ОТЛАДКА ПРОГРАММ

10.1. Использовать встроенный отладчик системы (трассировка программы).

10.2. Использовать директивы компилятора {$D} и {$L} при компиляции модулей с целью иметь непосредственный доступ к переменным и процедурам модуля.

10.3. Использовать отладочную печать. Выводить значения отдельных ключевых переменных и массивов непосредственно на экран или во внешний файл на диске.

10.4. Вставить "заглушки" на те модули программы, которые не подвергаются в настоящий момент отладке.

10.5. Использовать процедуру halt в случае исключительной ситуации.

10.6. Использовать возвращение функцией или процедурой специального значения в случае исключительной ситуации.

10.7. Использовать код возврата в виде отдельной глобальной переменной.

11. ОРГАНИЗАЦИЯ ДИАЛОГА С ПОЛЬЗОВАТЕЛЕМ

11.1. Заменить горизонтальное меню вертикальными меню.

11.2. Инверсия приема.

11.3. Использовать скроллинг меню.

11.4. Заменить выпадающее меню всплывающим меню.

11.5. Инверсия приема.

11.6. Организовать меню, активизирующееся по горячим клавишам.

11.7. Использовать кнопки и панели диалога.

11.8. Организовывать громоздкие экранные формы в виде многостраничных форм.

11.9. Использовать скроллинг экранных форм.

11.10. Использовать всплывающие экранные формы.

11.11. Использовать гипертекстовую систему в качестве системы помощи.

Приложение 4

ЭЛЕМЕНТЫ ЯЗЫКА OBJECT PASCAL

1. МОДУЛЬ В OBJECT PASCAL

Язык объектно-ориентированного программирования Object Pascal применяется при работе в среде визуального программирования Delphi. Язык Object Pascal в основном включает "старый" язык Borland Pascal.

Программы на языке Object Pascal состоят из нескольких файлов: файла проекта (Delphi Project) с расширением *.dpr, одного или нескольких файлов модулей (Unit) с расширением *.pas и файлов дизайнера экранных форм с расширением *.dfm.

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

Рассмотрим организацию исходного текста модуля:

unit MyUnit1;

interface

uses

Unit1, Unit2, Unit3;

const

Pi = 3.14;

type

MyType =. .;

var

var1: MyType;

procedure Proc1;

function Func: MyType;

implementation

uses

Unit4, Unit5, Unit6;

const

…;

type

…;

var

…;

procedure Proc1;

begin

{ Операторы}

end;

function Func: MyType;

begin

{Операторы}

end;

initialization

{Операторы}

finalization

{Операторы}

end.

Модуль начинается с описательного оператора заголовка модуля:

unit MyUnit1;

Имена файлов MyUnit1.pas, MyUnit1.dfm должны совпадать с именем, описанным в заголовке модуля MyUnit1. Наличие файла MyUnit1.dfm не является обязательным.

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

За зарезервированным словом implementation находятся описательные операторы секции реализации. В отличие от описаний секции интерфейса описания из секции реализации недоступны для других модулей, но доступ к ним возможен из данного модуля. Как и в секции интерфейса, может следовать оператор uses, а за ним объявления констант, типов, переменных. В отличие от секции интерфейса процедуры и функции описываются вместе с их выполняемыми операторами. В секции должны быть определены как процедуры и функции из секции реализации, так и процедуры и функции, прототипы которых были объявлены в секции интерфейса. Код процедур и функций модуля, описанный в секции implementation, подключается (линкуется или связывается) к основной программе или к точкам вызова подпрограмм и функций в других модулях (через механизм линкера, работа которого определяется uses).

В необязательном разделе initialization размещаются операторы, которые выполняются сразу после запуска программы.

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

2. ОБЪЕКТЫ И КЛАССЫ В ЯЗЫКЕ OBJECT PASCAL

В обычном языке Pascal существует тип-запись:

type

TmyRecord = record

MyField1: String;

MyField2: Integer;

end;

Тип-запись позволяет описывать структурированные переменные, содержащие несколько значений как одного, так и разных типов. В приведенном примере запись TmyRecord содержит поля MyField1 и MyField2, которые соответственно имеют типы String и Integer.