TURBO PASCAL |
Новости
|
Объектные типыОбъектный тип является структурой, состоящей из фиксирован- ного числа компонентов. Каждый компонент является либо полем, со- держащим данные строго определенного типа, либо методом, выполня- ющим операции над объектом. По аналогии с описанием переменных, описание поля указывает тип данного этого поля и идентификатор, именующий поле: по аналогии с описанием процедуры или функции, описание метода указывает заголовок процедуры, функции, конструк- тора или деструктора. Объектный тип может наследовать компоненты другого объектно- го типа. Если T2 наследует от T1, то T2 является потомком T1, а T1 является родителем T2. Наследование является транзитивным, то есть если T3 наследу- ет от T2, а T2 наследует от T1, то T3 наследует от T1. Область (домен) объектного типа состоит из него самого и из всех его нас- ледников. ┌──────┐ ┌────────────────┐ тип объекта──>│object├─┬───────────────────>│список компонент├─┐ └──────┘ │ ┌────────────┐ ^ └────────────────┘ │ └─>│Hаследование├─┘ │ └────────────┘ │ ┌───────────────────────────────────────────┘ │ ┌───┐ └─┬──────────────────────────────────┬─┤end├> │ ┌───────┐ ┌────────────────┐ │ └───┘ └──>│private├──>│список компонент├─┘ └───────┘ └────────────────┘ ┌───┐ ┌─────────────────────────────┐ ┌───┐ наследование ──>│ ( ├─>│идентификатор объектного типа├─>│ ) ├──> └───┘ └─────────────────────────────┘ └───┘ список компонент ──┬─────────────────┬───────────────────> │ ┌────────┐ ^ │ ┌─────────┐ ^ └─>│ список ├──┘ └─>│ список ├──┘ │ полей │ │ методов │ └────────┘ └─────────┘ ┌──────────────────────┐ ┌───┐ ┌────┐ ┌───┐ список полей ───>│cписок идентификаторов├─>│ : ├─>│type├>│ ; ├┬> ^ └──────────────────────┘ └───┘ └────┘ └───┘│ │ │ └───────────────────────────────────────────────┘ ┌─────────┐ ┌───┐ список методов ──>│заголовок├─┬──────────────────────────┤ ; ├┬─> ^ │ метода │ │ ┌───┐ ┌───────┐ ^└───┘│ │ └─────────┘ └>│ ; ├─>│virtual├┬───────┘ │ │ └───┘ └───────┘│ ^ │ │ │ └────────┐│ │ │ ┌─────────┐││ │ └>│ целая ├┘│ │ │константа│ │ │ └─────────┘ │ └──────────────────────────────────────────────┘ ┌────────────────────────┐ заголовок метода ────┬───>│ заголовок процедуры ├──────> │ └────────────────────────┘ ^ │ ┌────────────────────────┐ │ ├───>│ заголовок функции ├──┤ │ └────────────────────────┘ │ │ ┌────────────────────────┐ │ ├───>│ заголовок конструктора ├──┤ │ └────────────────────────┘ │ │ ┌────────────────────────┐ │ └───>│ заголовок деструктора ├──┘ └────────────────────────┘ Следующий исходный код приводит пример описания объектного типа. Далее во всей этой главе на данное описание будут делаться ссылки. 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; В отличие от других типов, объектные типы могут описываться только в разделе описаний типов, находящемся на самом внешнем уровне области действия программы или модуля. Таким образом, объ- ектные типы не могут описываться в разделе описаний переменных или внутри блока процедуры, функции или метода. Тип компоненты файлового типа не может иметь объектный тип или любой структурный тип, содержащий компоненты объектного типа. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |