Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laby_vse (1).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
71.68 Кб
Скачать

Лабораторная работа №1 Описание объекта

Для описания объекта используется синтаксис, аналогичный описанию записи: type <имя объекта>=object

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

....

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

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

...

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

end;

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

После описания объекта описываются методы: procedure <имя объекта>.<имя метода> <параметры>

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

Аналогично можно описать и метод-функцию. Методы (также как и обычные подпрограммы) могут не иметь параметров. Так как методы предназначены для работы с экземплярами объектов в них определена служебная переменная Self, являющаяся псевдонимом для текущего экземпляра (фактически Self - это скрытый параметр). Например, обращение к полю x из метода производится так: self.x. Если в методе нет одноимённой локальной переменной, к полям можно обращаться по названию, опуская Self и точку.

Первый пример

Приведём реализацию объекта "окно" (для реализации интерфейса с помощью модуля crt). Мы можем считать, что окно задаётся координатами левого верхнего угла и размерами по горизонтали и вертикали (с учётом рамки окна), а также иметь флаг видимости (true означает, что окно на экран выведено). 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.

Лабораторная работа №2 Наследование

Важнейшим элементом объектно-ориентированного стиля является наследование. Если вспомнить уже приводившийся пример с телевизором, то наследование можно проиллюстировать, рассмотрев новый "объект" - видеодвойку, которая наследует от телевизора все его свойства, но в ней также есть и новые. Также наследуюстя и методы (хотя, некоторые из них изменяются: при включении, например, надо активировать не только телевизор, но и плеер). Для видеодвойки характерны и свои собственные методы.

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

Приведу описание нового объекта: type CWindowText=object(CWindow);

str: string;

procedure Init (x,y,lenx: integer, str: string);

procedure Show;

end;

procedure CWindowText.Init (x,y,lenx: integer, str: string);

begin

CWindow.Init (x,y,lenx,3);

Self.str:=str;

end;

procedure CWindowText.Show;

begin

CWindow.Show;

gotoxy (x+1,y+1);

write (str);

end;

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]