- •Технология программирования (pascal)
- •IV. Парадигмы программирования
- •6. Структура модуля
- •6.5. Пример реализации модуля.
- •3. Реализация модуля на языке pascal
- •7. Парадигма объектно-ориентированного программирования (ооп)
- •7.1. Программно-ориентированное программирование и абстракция данных.
- •7.2. Принципы ооп.
- •2. Ограничение доступа (инкапсуляция).
- •4. Иерархичность (наследование).
- •7.3. Структура объявления объектного типа.
- •4. Определение методов объекта point:
- •8. Свойства наследования и полиморфизма
- •8.1. Свойство наследования.
- •8.2. Свойство полиморфизма.
8.2. Свойство полиморфизма.
Свойство полиморфизма заключается в том, что в объявлении типа наследника могут быть методы, одноименные с именами методов родителя.
Объявление типа окружность 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.