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

Объекты

Объектно-ориентированное программирование (ООП) – методология программирования, основанная на объектах.

Тип 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).

В программе:

  1. рисуется окружность;

  2. стирается окружность;

  3. в случайных точках экрана появляются разноцветные окружности.

Программа:

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.

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