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

3. Объявление объектного типа точка:

type

POINT=object

X, Y: integer; {координаты}

V: boolean; {признак видимости: TRUE-видима; FALSE-невидима}

function GET_X: integer; { получение координаты Х }

function GET_Y: integer; { получение координаты Y }

function GET_V: boolean; { получение признака видимости }

procedure INIT(X0, Y0: integer); { задание координат }

procedure TURN_ON; { рисование точки – получение видимой точки }

procedure TURN_OFF; { стирание точки – получение невидимой точки}

procedure MOVE(XN, YN: integer); { перемещение точки }

end;

4. Определение методов объекта point:

function POINT.GET_X; { получение координаты Х }

begin

GET_X:=X;

end;

function POINT.GET_Y; { получение координаты Y }

begin

GET_Y:=Y;

end;

function POINT.GET_V; { получение признака видимости }

begin

GET_V:=V;

end;

procedure POINT.INIT; { задание координат }

begin

X:=X0;

Y:=Y0;

V:=false;

end;

procedure POINT.TURN_ON; { получение видимой точки }

begin

if not V then

begin

PutPixel(X,Y,GetColor); { GetColor возвращает текущий цвет }

V:=true;

end;

end;

procedure POINT.TURN_OFF; { получение невидимой точкистирание точки }

begin

if V then

begin

PutPixel(X,Y,GetBkColor); { GetBkColor возвращает фоновый цвет }

V:=false;

end;

end;

procedure POINT.MOVE; { перемещение точки }

var

F: boolean;

begin

F:=V;

if F then

TURN_OFF;

X:=XN;

Y:=YN;

if F then

TURN_ON;

end;

5. Свойство наследования.

Кроме точки, можно задать другие объекты, описывающие геометрические фигуры, например, объект типа окружность, который определяется радиусом, координатой центра, признаком видимости, и с ним возможны такие же действия, как с точкой: получение видимой окружности; получение невидимой окружности; перемещение окружности (изменение координат центра). Чтобы этот объект привязать к координатной сетке экрана, необходимо определить объектный тип PLACE (место), который будет иметь данные, общие для всех геометрических фигур, – координаты привязки объекта к экрану X и Y:

type

PLACE=object

X, Y: integer;

procedure INIT(X0, Y0: integer);

function GET_X: integer;

function GET_Y: integer;

end;

{ далее следует описание методов }

Каждый новый объектный тип может строиться на основе ранее определенного типа, называемого родительским типом, от которого наследуются все поля и методы. Чтобы произошло наследование, в объявлении объектного типа после OBJECT в скобках указывается имя родительского типа.

Используя тип PLACE как родительский, можно определить объектный тип POINT таким образом:

type

POINT=object(PLACE)

V: boolean;

procedure INIT(X0, Y0: integer);

function GET_V:boolean;

procedure TURN_ON;

procedure TURN_OFF;

procedure MOVE(XN, YN: integer);

end;

{ далее следует описание методов }

6. Свойство полиморфизма заключается в том, что в объявлении типа наследника могут быть методы, одноименные с именами методов родителя.

Объявление типа окружность c использованием в качестве родителя типа POINT будет следующим:

type

CIRCL=object(POINT)

R: integer;

procedure INIT(X0, Y0, R0: integer); { задание окружности }

procedure TURN_ON; { получение видимой окружности }

procedure TURN_OFF; { получение невидимой окружности }

procedure MOVE(XN, YN: integer); { перемещение окружности}

function GET_R: integer; { получение радиуса }

end;

Определение методов с использованием наследования при полиморфизме:

procedure CIRCL.INIT;

begin

X:=X0; Y:=Y0;

R:=R0;

V:=false;

end;

procedure CIRCL.TURN_ON;

begin

V:=true;

CIRCLE(X,Y,R);

end;

procedure CIRCL.TURN_OFF;

var

C: byte;

begin

C:=GetColor;

SetColor(GetBkColor); { установка цвета рисования }

Circle(X,Y,R);

V:=false;

SetColor(C);

end;

procedure CIRCL.MOVE;

var

F: boolean;

begin

F:=V;

if F then

TURN_OFF;

X:=XN;

Y:=YN;

if F then

TURN_ON;

end;

function CIRCL.GET_R;

begin

GET_R:=R;

end;

В результате текст процедуры CIRCL.MOVE совпадает с текстом процедуры POINT.MOVE, но машинные коды у этих процедур будут разные; CIRCL.MOVE при своем исполнении обращается к адресам процедур CIRCL.TURN_ON и CIRCL.TURN_OFF, а процедура POINT.MOVE – к адресам процедур POINT.TURN_ON и POINT.TURN_OFF.

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