Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Для классов, связанных наследованием, существует расширенная совместимость типов (совместимы по представлению в памяти).

Модульное программирования | Понятие класса | Когда начинается работа с объектом, то он размещается в памяти. | Информация о типе времени выполнения программы | Атрибуты доступа к элементам объектов | Механизм вызова виртуального метода | Абстрактный виртуальный метод | Методы обработки сообщений | Понятие ссылки на метод объекта | Понятие события |


Читайте также:
  1. I. Вещь существует, но явления и, следовательно, имени ее не существует.
  2. II. Явление и, след(овательно), имя существует, но сущность, вещь не существует.
  3. III. Вещь, сущность вещи существует, и явление, имя вещи тоже существует, но между ними лежит непроходимая и ничем не заполняемая бездна.
  4. Oslash; Розрізняють такі види навчальних програм:типова, робоча
  5. Биологическая совместимость различных продуктов с нашим организмом. Фрукты
  6. В ресторане существует единый формат причесок для длинных и коротких волос.
  7. Виробництво кормової мікробної біомаси як типовий приклад біотехнологічного процесу

 

Наследование – возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (прародителя, иногда его называют суперклассом) и добавляя, при необходимости, новые свойства и методы.

Иерархия – набор классов, связанных отношением наследования. Наследование призвано отобразить такое свойство реального мира, как иерархичность.

 

Порожденный класс (потомок) – класс, который наследует атрибуты другого класса.

Базовый класс (предок) – класс, от которого происходит наследование.

 

Примером иерархии классов является библиотека VCL; с ее помощью в среде Delphi обеспечивается разработка GUI-приложений.

 

Существование «прародителя» всех классов

В языке Delphi существует предопределенный класс TObject, который служит неявным предком тех классов, для которых предок не указан. Это означает, что объявление

 

type type

TTextReader = class ~ TTextReader = class(TObject)

... …

 

end; end;

Класс TObject – корень любой иерархии классов. Он содержит ряд методов, которые по наследству передаются всем остальным классам. Среди них конструктор Create, деструктор Destroy, метод Free и некоторые другие методы.


 

TObject = class

constructor Create;

procedure Free;

class function InitInstance(Instance: Pointer): TObject;

procedure CleanupInstance;

function ClassType: TClass;

class function ClassName: ShortString;

class function ClassNameIs(constName: string): Boolean;

class function ClassParent: TClass;

class function ClassInfo: Pointer;

class function InstanceSize: Longint;

class function InheritsFrom(AClass: TClass): Boolean;

class function MethodAddress(constName: ShortString): Pointer;

class function MethodName(Address: Pointer): ShortString;

function FieldAddress(constName: ShortString): Pointer;

function GetInterface(constIID: TGUID; out Obj): Boolean;

class function GetInterfaceEntry(constIID: TGUID): PInterfaceEntry;

class function GetInterfaceTable: PInterfaceTable;

function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; virtual;

procedure AfterConstruction; virtual;

procedure BeforeDestruction; virtual;

procedure Dispatch(var Message); virtual;

procedure DefaultHandler(var Message); virtual;

class function NewInstance: TObject; virtual;

procedure FreeInstance; virtual;

destructor Destroy; virtual;

end;

Create – стандартный конструктор.

Free – уничтожает объект: вызывает стандартный деструктор Destroy, если значение псевдопеременной Self не равно nil.

InitInstance(Instance: Pointer): TObject – при создании объекта инициализирует нулями выделенную память. На практике нет необходимости вызывать этот метод явно.

CleanupInstance ­– освобождает память, занимаемую полями с типом string, Variant, динамический массив и интерфейс. На практике нет необходимости вызывать этот метод явно.

ClassType: TClass – возвращает описатель класса (метакласс).

ClassName: ShortString – возвращает имя класса.

ClassNameIs(const Name: string): Boolean – проверяет, является ли заданная строка именем класса.

ClassParent: TClass – возвращает описатель базового класса.

ClassInfo: Pointer – возвращает указатель на соответствующую классу таблицу RTTI (от англ. Runtime Type Information). Таблица RTTI используется для проверки типов данных на этапе выполнения программы.

InstanceSize: Longint – возвращает количество байт, необходимых для хранения в памяти одного объекта соответствующего класса. Заметим, что значение, возвращаемое этим методом и значение, возвращаемое функцией SizeOf при передаче ей в качестве аргумента объектной переменной – это разные значения. Функция SizeOf всегда возвращает значение 4 (SizeOf(Pointer)), поскольку объектная переменная – это ни что иное как ссылка на данные объекта в памяти. Значение InstanceSize – это размер этих данных, а не размер объектной переменной.

InheritsFrom(AClass: TClass): Boolean – проверяет, является ли класс AClass базовым классом.

MethodAddress(const Name: ShortString): Pointer – возвращает адрес published-метода, имя которого задается параметром Name.

MethodName(Address: Pointer): ShortString – возвращает имя published-метода по заданному адресу.

FieldAddress(const Name: ShortString): Pointer – возвращает адрес published-поля, имя которого задается параметром Name.

GetInterface(const IID: TGUID; out Obj): Boolean – возвращает ссылку на интерфейс через параметр Obj; идентификатор интерфейса задается параметром IID.

GetInterfaceEntry(const IID: TGUID): PInterfaceEntry – возвращает информацию об интерфейсе, который реализуется классом. Идентификатор интерфейса задается параметром IID.

GetInterfaceTable: PInterfaceTable – возвращает указатель на таблицу с информацией обо всех интерфейсах, реализуемых классом.

AfterConstruction – автоматически вызывается после создания объекта. Метод не предназначен для явного вызова из программы. Используется для того, чтобы выполнить определенные действия уже после создания объекта (для этого его необходимо переопределить в производных классах).

BeforeDestruction ­– автоматически вызывается перед уничтожением объекта. Метод не предназначен для явного вызова из программы. Используется для того, чтобы выполнить определенные действия непосредственно перед уничтожением объекта (для этого его необходимо переопределить в производных классах).

Dispatch(var Message) – служит для вызова методов, объявленных с ключевым словом message.

DefaultHandler(var Message) – вызывается методом Dispatch в том случае, если метод, соответствующий сообщению Message, не был найден.

NewInstance: TObject – вызывается при создании объекта для выделения динамической памяти, чтобы разместить в ней данные объекта. Метод вызывается автоматически, поэтому нет необходимости вызывать его явно.

FreeInstance – вызывается при уничтожении объекта для освобождения занятой объектомдинамической памяти. Метод вызывается автоматически, поэтому нет необходимости вызывать его явно.

Destroy – стандартный деструктор.

 


Дата добавления: 2015-11-16; просмотров: 71 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Свойства-массивы| Перекрытие элементов класса в производных классах

mybiblioteka.su - 2015-2024 год. (0.008 сек.)