|
Graph.Circle(x,y,r);
f:=true
END;
PROCEDURE CIRCLE.OFF;
BEGIN
SetColor(0);
Graph.Circle(x,y,r);
f:=false
END;
Аналогічним чином можна побудувати наступного нащадка „круг” на основі класу „коло”, при цьому структура класу буде та ж сама, тільки зміниться реалізація двох методів.
Аналогічно класу point можна побудувати класи „прямокутник” та „рівнобедрений трикутник”
VAR
a1,a2:POINT;
b1,b2:CIRCLE;
.........
BEGIN
.........
With a1 do
Begin
SETCOORD(100,100);
SETCOL(5);
ON
End;
With b1 do
Begin
SETCOORD(200,200);
SETCOL(6);
SETR(20);
ON
End;
a2:=a1;
A2.ON;
b2:=b1;
B2.ON;
a1:=b2;
b1:=a2;
Стосовно даного прикладу можна зробити наступні зауваження:
Подібно до записів в іменах полів даних і методів об’єктів використовують складені ідентифікатори. З метою зменшення кількості узагальнюючого імені об’єкта можна користуватися оператором над записів with do.
Об’єкт-нащадок b1 використовує методи від об’єкта класу точка, а також перевизначений метод ON.
Між об’єктами одного класу можна виконувати операцію присвоєння, при цьому об’єкт, якому присвоюється деяке значення a2, b2 отримує той самий стан, що і об’єкт, від якого здійснюється присвоєння.
При присвоєнні копіюється лише стан, а сама поведінка повинна бути реалізована явним викликом відповідних методів.
Операцію присвоєння можна виконувати не лише між об’єктами одного класу, а також можна виконувати присвоєння між екземплярами різних класів, але якщо вони пов’язані принципом наслідування, причому лише від нащадка до предка і не навпаки. Це означає, що при операції присвоєння, повинні бути передані дані до всіх полів об’єкта, якому присвоюється деяке значення. Надлишок даних від об’єкта, від якого здійснюється присвоєння є несуттєвим.
В розглянутому прикладі вже з'явилися перші прояву ефективності ООП, зокрема побудова ієрархії класів за принципом наслідування. Наслідування дозволило використовувати один раз оголошену структуру батьківського класу у всіх класів нащадка.
Ще один важливий момент ООП пов’язаний із використанням такої властивості об’єктів, як поліморфізм.
Тема: Поліморфізм. Віртуальні методи.
Розглянутий раніше приклад побудови нащадка Circle на перший погляд є довершений і правильним. Особливо ефективним видається метод ruh, який оголошений у структурі класу предка.
Цей метод повністю успадковується нащадками. Реалізація його використовує два методи, що перевизначаються у кожному класі нащадка.
Виконаємо цей метод для двох об’єктів класу point та circle.
VAR
a:POINT;
b:SIRCLE;
BEGIN
......
A.SETCOORD(100, 100);
A.SETCOL (5);
A.ON;
A.RUH (50,50)
END.
Така послідовність команд переведе в активний стан об’єкт „точка” в положення з координатами (100,100) з кольором (5), потім починається виконуватися метод рух, який у свою чергу передбачає виклик методів ON, OFF.
Точка переміститься на 50 пікселів вліво і вниз.
Дата добавления: 2015-09-11; просмотров: 15 | Поможем написать вашу работу | Нарушение авторских прав |