Создание библиотек объектов.
При создании библиотек объектов целесообразно скрыть детали реализации объектов. В этом случае описание объектов можно выполнить в интерфейсном разделе модуля, а тела методов определить в разделе реализации. Также можно описывать внутренние объекты, которые полностью определяются в разделе реализации. В свою очередь объект, определенный в интерфейсном разделе модуля, может иметь потомков в разделе реализации модуля.
В случае, когда модуль В использует модуль А, модуль В может определять производные объекты от любого объекта, экспортируемого модулем А.
Созданные модули могут поставляться в виде подключаемых (.tpu) файлов с распечаткой объектов, их полей и методов, определенных в интерфейсном разделе модуля. Пользователи такого модуля могут, используя механизмы наследования и полиморфизма, создавать на его основе новые объекты.
Библиотека может экспортировать не только объекты, но и экземпляры этих объектов. Если необходимо экспортировать экземпляры, содержащие виртуальные методы, то для таких переменных в разделе инициализации можно разместить вызовы конструкторов.
С помощью стандартной директивы private можно объявить часть полей и методов скрытыми от пользователей модуля. Они будут доступны только внутри модуля, где объявлен объект.
Все, что объявлено после директивы private, становится недоступным извне. Использование только данной директивы накладывает ограничения на последовательность писания объектов, где используются как общедоступные, так и скрытые поля и методы.
Чтобы описание объекта сделать более гибким, используют директиву public. Данная директива делает поля и методы объекта общедоступными вне модуля.
Структура модуля с описанием объекта и экспортируемых методов выглядит следующим образом:
unit < имя модуля>;
interface
type
< имя объекта>=object
private < скрытые поля> ;
public < доступные поля>;
private < скрытые методы>;
public < доступные методы>;
end;
var
< объявление экспортируемых экземпляров>;
implementation
{реализация методов}
begin
{вызовы конструкторов экспортируемых экземпляров}
end.
Рассмотрим пример, в котором описание объекта размещается в модуле.
Программа формирует окно с заданным цветом фона и текста.
unit ObjUnit;
interface
uses crt;
type
vaw=array[1..6] of byte;
APtr=^vaw; {указатель на массив}
WinPtr=^WinD; {указатель на объект}
WinD=Object
private
A:APtr; {массив атрибутов окна}
public
constructor Init (an:Vaw);
destructor Done;virtual;
procedure MakeWin; {изображение окна}
private
procedure ColorWin; {установка цвета фона и символов}
end;
implementation
constructor WinD.Init;
begin
new (A);
if A=nil then
begin
WinD.Done;
Fail
end;
A^:=An;
end;
destructor WinD.Done;
begin
if A<>nil then dispose (A);
end;
procedure WinD.MakeWin;
begin
window (A^[1],A^[2],A^[3],A^[4]);
self.colorWin
end;
procedure WinD.ColorWin;
begin
Textbackground (A^[5]);
TextColor (A^[6]);
clrscr;
end;
end.
Основная программа.
uses objunit;
var
v:winptr;
a:vaw;
begin
a[1]:=1;
a[2]:=1;
a[3]:=80;
a[4]:=25;
a[5]:=4;
a[6]:=3;
new (v,init (a));
if v=nil then halt (2);
v^.MakeWin;
dispose (v,done);
end.
Похожие записи
- No related posts found
| Путешествие 2: Таинственный остров смотреть фильм бесплатно Путешествие 2: Таинственный остров смотреть фильм бесплатно www.smotri-kino.com |