TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

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

             Объектный тип является структурой,  состоящей из фиксирован-
        ного числа компонентов. Каждый компонент является либо полем, со-
        держащим данные строго определенного типа, либо методом, выполня-
        ющим  операции над объектом.  По аналогии с описанием переменных,
        описание поля указывает тип данного этого поля  и  идентификатор,
        именующий  поле:  по  аналогии с описанием процедуры или функции,
        описание метода указывает заголовок процедуры, функции, конструк-
        тора или деструктора.

             Объектный тип может наследовать компоненты другого объектно-
        го типа.  Если 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;

             В отличие от других типов,  объектные типы могут описываться
        только  в  разделе  описаний типов,  находящемся на самом внешнем
        уровне области действия программы или модуля. Таким образом, объ-
        ектные  типы  не  могут описываться в разделе описаний переменных
        или внутри блока процедуры, функции или метода.

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

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz