Объекты
Объектно-ориентированное программирование (ООП) – методология программирования, основанная на объектах.
Тип object – это структура данных, которая содержит поля и методы.
Описание объектного типа:
type <имя типа> = object;
<поле>;
……….
<поле>;
<метод>;
………..
<метод>;
end;
<описание методов – алгоритмы для методов>;
var <имя> : <имя типа объекта>;
Под методами понимают процедуры и функции, объявление которых включено в описание объекта и которые выполняют действия.
Объект обладает следующими свойствами: инкапсуляцией, наследованием и полиморфизмом.
Правила работы с объектами:
1. объект обладает свойством наследования. Объект-потомок наследует поля и методы объекта-предка.
Пример. Рассмотрим объект koor (координаты) и point (точка):
type koor:=object
x,y:real;
end;
point=object(koor) {все, что объявлено в типе koor, наследует тип point}
vis: boolean;
end;
2. Переменная типа объект может быть статической и динамической (вторая форма для объектов предпочтительнее). Для создания динамического объекта используют процедуру new.
3. Обращение к полям объекта нежелательно. Действия над полями выполняются через процедуры и функции (методы). Объединение в объекте полей и методов (только заголовных методов!), применяемых к ним, называется свойством инкапсуляции. Применяя инкапсуляцию, мы защищаем данные, принадлежащие объекту, от внешнего вмешательства и неправильного использования.
4. Алгоритмы методов записываются после описания объекта. Имена методов состоят их двух частей:
имя объекта. имя метода
Например:
procedure koor.init; {установка координат}
brgin
x:=xp; y:=yp;
end;
5. Полиморфизм – это свойство, по которому метод с одним именем может применятся к различным родственным объектам.
Например, чтобы показать на экране или стереть точку, круг и т.д. можно использовать методы yesris, noris:
point. yesris;
cir. yesris;
(один метод yesris используется для решения разных задач).
6. Можно использовать виртуальные методы (аналог указателей). Во время трансляции создается таблица виртуальных (динамических) методов, в которую будут записаны адреса тех процедур и функций которые необходимо выполнить в конкретной программе. Во всех объектах, использующих виртуальные методы, должны быть заголовки:
<имя метода>; virtual;
Например:
procedure yesris; virtual;
procedure noris; virtual;
7. Выделение памяти под динамические переменные и методы должно произойти до первого использования такого метода.
В заголовке такого метода слово procedure заменяется на constructor. Для освобождения памяти используется метод с заголовком destructor.
Следовательно, до вызова любого виртуального метода должен быть выполнен какой-либо конструктор.
Пример. Даны три объекта: координата (koor), точка (point), окружность (cir). Методы: инициализация (init), рисование на экране
(yesris), стирание с экрана (noris).
В программе:
рисуется окружность;
стирается окружность;
в случайных точках экрана появляются разноцветные окружности.
Программа:
uses graph, crt;
type koor=object {объект koor}
x,y:integer;
end;
point=object(koor) {объект point наследует поля и методы koor}
vis: boolean;
end;
cir=object(point) {объект cir наследует поля и методы point}
rad:integer;
constructor init (xp,xy,rp: integer);
procedure yesris;virtual;
procedure noris;virtual;
end;
{описание методов-алгортмы}
constructor cir.init; {задаем координаты окружности}
begin
x:=xp; y:=yp;
rad: =rp;
end;
procedure cir.yesris; {рисование окружности}
var c:integer;
begin
vis:=true; circle(x,y,rad);
end;
procedure cir.noris; {стирание окружности}
var с:integer;
begin
vis:false; с:=getcolor;
setcolor(getbkcolor);
circle(x,y,rad]; setcolor(c);
end;
var vcir:cir;
dr,mo,x,y:integer;
begin {основная программа}
randomize;
dr:=detect;
initgraph (dr,mo,'с:\prg\tp\bgi'); .
vcir.init(320,240,50) ; {устанавливаем координаты и радиус}
vcir.yesris; {рисуем окружность}
readln;
vcir.noris; {стираем окружность}
readln;
repeat {в случайных точках рисуем разноцветные окр-ти}
x:=random(getmaxx-2*50)+50;
у:=random(getmaxy-2*50)+50; .
vcir.init (x,y, 50) ; delay (5000) ;
setcolor (x) ; vcir.yesris;
until keypressed;
end.
