Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Объектные типы

Объектный тип является структурой, состоящей из фиксирован-

ного числа компонентов. Каждый компонент является либо полем, со-

держащим данные строго определенного типа, либо методом, выполня-

ющим операции над объектом. По аналогии с описанием переменных,

описание поля указывает тип данного этого поля и идентификатор,

именующий поле: по аналогии с описанием процедуры или функции,

описание метода указывает заголовок процедуры, функции, конструк-

тора или деструктора.

Объектный тип может наследовать компоненты другого объектно-

го типа. Если T2 наследует от T1, то T2 является потомком T1, а

T1 является родителем T2.

Наследование является транзитивным, то есть если T3 наследу-

ет от T2, а T2 наследует от T1, то T3 наследует от T1. Область

(домен) объектного типа состоит из него самого и из всех его нас-

ледников.

------- -----------------

тип объекта-->¦object+-T------------------->¦список компонент+-

L------- ¦ ------------- ^ L----------------- ¦

L->¦Hаследование+-- ¦

L------------- ¦

---------------------------------------------

¦ ----

L-T----------------------------------T-+end+>

¦ -------- ----------------- ¦ L----

L-->¦private+-->¦список компонент+--

L-------- L-----------------

---- ------------------------------ ----

наследование -->¦ ( +->¦идентификатор объектного типа+->¦ ) +-->

L---- L------------------------------ L----

список компонент --T-----------------T------------------->

¦ --------- ^ ¦ ---------- ^

L->¦ список +--- L->¦ список +---

¦ полей ¦ ¦ методов ¦

L--------- L----------

----------------------- ---- ----- ----

список полей --->¦cписок идентификаторов+->¦ : +->¦type+>¦ ; +T>

^ L----------------------- L---- L----- L----¦

¦ ¦

L------------------------------------------------

---------- ----

список методов -->¦заголовок+-T--------------------------+ ; +T->

^ ¦ метода ¦ ¦ ---- -------- ^L----¦

¦ L---------- L>¦ ; +->¦virtual+T-------- ¦

¦ L---- L--------¦ ^ ¦

¦ ¦ L--------¦

¦ ¦ ----------¦¦

¦ L>¦ целая +-¦

¦ ¦константа¦ ¦

¦ L---------- ¦

L-----------------------------------------------

-------------------------

заголовок метода ----T--->¦ заголовок процедуры +------>

¦ L------------------------- ^

¦ ------------------------- ¦

+--->¦ заголовок функции +--+

¦ L------------------------- ¦

¦ ------------------------- ¦

+--->¦ заголовок конструктора +--+

¦ L------------------------- ¦

¦ ------------------------- ¦

L--->¦ заголовок деструктора +---

L-------------------------

Следующий исходный код приводит пример описания объектного

типа. Далее во всей этой главе на данное описание будут делаться

ссылки.

type

Point = object

X, Y: integer;

end;

Rect = object

A, B: TPoint;

procedure Init(XA, YA, XB, YB: Integer);

procedure Copy(var R: TRectangle);

procedure Move(DX, DY: Integer);

procedure Grow(DX, DY: Integer);

procedure Intersect(var R: TRectangle);

procedure Union(var R: TRectangle);

function Contains(P: Point): Boolean;

end;

StringPtr = ^String;

FieldPtr = ^TField;

TField = object

X, Y, Len: Integer;

Name: StringPtr;

constructor Copy(var F: TField);

constructor Init(FX, FY, FLen: Integer; FName: String);

destructor Done; virtual;

procedure Display; virtual;

procedure Edit; virtual;

function GetStr: String; virtual;

function PutStr(S: String): Boolean; virtual;

end;

StrFieldPtr = ^TStrField;

StrField = object(TField)

Value: PString;

constructor Init(FX, FY, FLen: Integer; FName: String);

destructor Done; virtual;

function GetStr: String; virtual;

function PutStr(S: String): Boolean;

virtual;

function Get: string;

procedure Put(S: String);

end;

NumFieldPtr = ^TNumField;

TNumField = object(TField)

private

Value, Min, Max: Longint;

public

constructor Init(FX, FY, FLen: Integer; FName: String;

FMin, FMax: Longint);

function GetStr: String; virtual;

function PutStr(S: String): Boolean; virtual;

function Get: Longint;

function Put(N: Longint);

end;

ZipFieldPtr = ^TZipField;

ZipField = object(TNumField)

function GetStr: String; virtual;

function PutStr(S: String): Boolean;

virtual;

end;

В отличие от других типов, объектные типы могут описываться

только в разделе описаний типов, находящемся на самом внешнем

уровне области действия программы или модуля. Таким образом, объ-

ектные типы не могут описываться в разделе описаний переменных

или внутри блока процедуры, функции или метода.

Тип компоненты файлового типа не может иметь объектный тип

или любой структурный тип, содержащий компоненты объектного типа.

Соседние файлы в предмете Программирование на Pascal