Название: Алгоритмы и программы (Афанасьева Т. В.)

Жанр: Информационные системы и технологии

Просмотров: 1326


13.1. описание объекта в turbo pascal

 

Программная реализация объекта представляет собой объединение данных и процедур их обработки. В Turbo Pascal имеется тип object, который  можно  считать  обобщением  структурного  типа  record. Переменные объектного типа называются экземплярами объекта. Здесь требуется уточнение – экземпляр лишь формально можно назвать переменной. Его описание дается в предложении описания переменных, но в действительности экземпляр – нечто большее, чем обычная переменная.

Для      описания        объекта           используется  синтаксис,      аналогичный

описанию записи:

type <имя объекта>=object

<список имён полей>: <тип полей>;

....

<список имён полей>: <тип полей>;

<объявление метода>

...

<объявление метода>

end;

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

 

procedure <имя объекта>.<имя метода> <параметры>

 

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

 

Аналогично можно описать и метод-функцию. Методы (также как и обычные подпрограммы) могут не иметь параметров.

Вот пример описания объекта:

 

type

Location = object

X, Y: Integer;

procedure Init (InitX, Inity: Integer);

function GetX: Integer;

function GetY: Integer;

end;

 

Здесь описывается объект, который может использоваться в дальнейшем, скажем, в графическом режиме и который предназначен для определения положения на экране произвольного графического элемента. Объект описывается с помощью зарезервированных слов object…end, между которыми находятся описания полей и методов. В нашем примере объект содержит два поля для хранения значений графических координат, а также описания процедуры и двух функций – это методы данного объекта.  Процедура  предназначена  для  задания  первоначального положения объекта, а функции – для считывания его координат.

Зарезервированное слово  private  позволяет  ограничить  доступ  к

полям  объекта.  В  следующем  примере  доступ  к  переменным  X  и  Y

возможен только через методы объектного типа Location:

 

type

Location = object

procedure Init (InitX, Inity: Integer);

function GetX: Integer;

function GetY: Integer;

private

X, Y: integer;

end;

 

В секции private могут находится и методы объекта.

Полное описание методов, то есть описание их реализации, должно находится после описания объекта. Имена методов составные и скла- дываются из имени объекта и имени метода, разделенных точкой:

 

procedure Location. Init (InitX, Inity: Integer);

begin

X : = InitX; Y : = InitY;

end;

fuction Location. GetX: Integer;

begin

GetX : = X;

end;

fuction Location. GetY: Integer;

begin

GetY : = Y;

end;

 

После того как объект описан, в программе можно использовать его экземпляры, то есть переменные указанного объектного типа:

var

GrMarket : Location;

 

Приведем реализацию объекта «окно» (для реализации интер- фейса с помощью модуля crt). Мы можем считать, что окно задается координатами левого верхнего угла и размерами по горизонтали и вертикали (с учетом рамки окна), а также иметь флаг видимости (true означает, что окно на экран выведено).

 

Пример 13.1. type СWindow=object

x,y:       integer; {координаты окна} lenx,leny: integer; {размеры окна} visible:                      boolean; {флаг видимости} procedure Init (x,y,lenx,leny: integer); procedure Show;

function isVisible: boolean;

end;

procedure СWindow.Init (x,y,lenx,leny: integer);

{Задает начальные параметры окна}

begin Self.x:=x; Self.y:=y; Self.lenx:=lenx; Self.leny:=leny; visible:=true;

end;

 

procedure СWindow.show;

{Рисует окно} var i,j: integer; begin

textbackground (BLUE);

gotoxy (x,y);

write ('╔'); {ALT+201}

for i:=1 to lenx–2 do write ('═'); {ALT+205}

write ('╗') {ALT+187}

 

for j:=y+1 to y+leny–2 do begin

gotoxy (x,j);

write ('║'); {ALT+186}

for i:=1 to lenx–2 do write (' '); {ALT+205}

write ('║'); {ALT+186}

end;

 

gotoxy (x,y+leny–1);

write ('╚'); {ALT+200}

for i:=1 to lenx–2 do write ('═'); {ALT+205}

write ('╝') {ALT+188}

 

visible:=true;

end;

 

function CWindow.isVisible: boolean;

begin isVisible:=visible;

end;

 

Для создания экземпляра данного объекта можно использовать стандартные способы объявления переменных и создания динамических переменных.

 

var Window: CWindow;

begin

Window.Init (20,5,40,10); Window.Show;

end.