- •Аннотация.
- •Введение.
- •Средства объектно-ориентированного программирования. . Определение объекта. Компоненты: поля и методы.
- •. Определение экземпляров объектов. Операция присваивания над объектами. Обращение к компонентам объекта из программы и методов. Неявный параметр Self.
- •Var a:Troom;
- •. Инициализация полей объектов.
- •Var l,w,s:real;
- •Var l,w,s:real;
- •Var l,w,s:real;
- •. Наследование.
- •Var a:tName; b:tPenson;
- •. Полиморфизм.
- •. Раннее и позднее связывание. Виртуальные методы. Конструкторы. Определение типа объекта.
- •Var I:integer; s:real;
- •Var I:integer;
- •Var a:tRoom; b:tFlat;
- •. Динамические объекты. Деструкторы.
- •Var p:pTObj;
- •Var p:pTObj;
- •Var a:tObj;
- •Использование технологии ооп. . Использование объектов при создании новых структур данных.
- •Interface
- •Implementation
- •Var next:pElement;
- •Var n:tSpisok; k:integer;p:pNum;
- •. Использование объектов при создании меню.
- •Риc. 2. 7. Библиотечные оконные формы.
- •Interface
- •Inp.Init(bx1,by1,bx2,by2,battr,bxt,byt,'');
- •Inp.Draw;
- •Inp.Draw;
- •Var w1:array[1..10] of tWin absolute p1;
- •I:integer;
- •Var I:integer;
- •Var I:integer;
- •Var I:integer;
- •Interface
- •Implementation
- •Var k:boolean;
- •If Compare(fam) then
- •Var a:tMainMenu; b:tAddMenu; c:tOpenBase;
- •1:Begin
- •Var l:integer;
- •Inp:(x1:34;y1:8;x2:46;y2:8;attr:112;xt:1;yt:1;text:'')),
- •Inp:(x1:34;y1:10;x2:46;y2:10;attr:112;xt:1;yt:1;text:'')));
- •. Использование объектов при создании движущихся изображений.
- •Var color:word;
- •Var driver,mode:integer;
Средства объектно-ориентированного программирования. . Определение объекта. Компоненты: поля и методы.
Объектпредставляет собой описание нового типа данных. В отличие от описания обычного (не объектного) типа объект может включать описание не только полей данных, но и заголовков процедур и функций, работающих с этими полями данных. Применительно к объектам такие процедуры и функции получили названиеметодов.
Type
<имя объектного типа> = Object
<описание полей объекта>
<заголовки методов объекта>
end;
Например:
Type TRoom=Object
length,wight:real;
Function Square:real;
end;
Примечание.С точки зрения синтаксиса языка программирования объект представляет собой усложненную запись (record), в которую в частности разрешается включать заголовки процедур и функций.
Тела методов, объявленных в объекте, располагаются после определения объекта с указанием перед именем метода имени объекта (причем, как и в других случаях с предописанием, заголовок метода можно приводить без списка параметров).
Например:
Function TRoom.Square;
Begin Square:=length*wight; end;
. Определение экземпляров объектов. Операция присваивания над объектами. Обращение к компонентам объекта из программы и методов. Неявный параметр Self.
В программе по мере надобности объявляются переменные (экземпляры объектов) определенных ранее объектных типов.
Например:
Var A,B:TRoom; {экземпляры объекта}
pS:^TRoom; { указатель на объект}
C:array[1..10] of TRoom; { массив объектов}
Для экземпляров одного объекта разрешена операция присваивания, при этом выполняется копирование полей одного экземпляра объекта в другой, например:a:=b; {поляaкопируются вb}
Доступ к полям и методам объектов из программы осуществляется с указанием конкретного экземпляра объекта, для чего используется точечная нотация или операторwith(аналогично доступу к полям записей). Например:
а) Ss:=A.Square; {вызов функции-метода объектаTRoom}
б) ReadLn(A.length); {обращение к полю объекта}
в) with A do begin ReadLn(length); Ss:=Square; end; {использование оператораwith }
Поскольку данные и методы инкапсулированы в одном объекте, все данные автоматически становятся глобальными по отношению к методам, и, соответственно, доступны внутри них без дополнительных уточнений.
При вызове каждый метод неявно получает в качестве параметра указатель на тот экземпляр объекта, для которого он вызван - Self.Этот параметр используется для доступа к полямконкретного объекта, т. е. каждый раз, когда мы обращаемся внутри метода к тому или иному полю объекта, обращение выглядит как
Self.length Self.wight
В некоторых случаях параметр Selfиспользуется внутри методов явно.
Пример 1. Использование параметра Self.
{ Программа определения части адреса - смещения экземпляра объекта в памяти}
Program ex;
Type TRoom=Object
length:real;
wight:real;
Function getAddr:Word;
end;
Function TRoom.getAddr;
Begin
getAddr:=ofs(Self); {в данном случае безSelfобойтись нельзя}
end;
Var a:Troom;
Begin writeln('Смещение = ',a.getAddr); end.
. Инициализация полей объектов.
Для записи исходной информации в поля объекта можно использовать три способа:
а) занести необходимую информацию, используя оператор присваивания в основной программе;
б) написать специальную подпрограмму (метод), которая будет инициализировать поля объекта;
с) использовать типизированные константы.
Продемонстрируем вышесказанное на примере.
Пример 2. Доступ к полям данных из основной программы.
{ Программа определения суммарной площади заданных комнат. Вариант 1.}
Program ex;
Type TRoom=Object
length, wight:real;
function square:real;
end;
function TRoom.square:real;
begin
square:=length*wight;
end;