пользователей: 21252
предметов: 10461
вопросов: 177855
Конспект-online
зарегистрируйся или войди через vk.com чтобы оставить конспект.
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Реализация объектной модели в Object Pascal. Наследование. Пример иерархии наследования. Виртуальные и динамические методы.

 

Объекный тип (класс) представляет собой объединение данных и правил их преобразования. Переменные объектного типа называются экземплярами класса или просто объектами. Класс – это тип объекта; объект – это конкретный экземпляр класса.

 

Наследование

Пример:

TMyObject = class(TObject);

TMyObject = class;

 

type

  TFirstObject = class(TObject)

     FMyField : extended;

     procedure SetData(AValue : extended);

   end;

  

  TSecondObject = class(TFirstObject)

     FMyField : integer;

     procedure SetData(AValue : integer);

   end;

procedure TFirstObject.SetData(AValue : extended);

  begin

  FMyField := 1.0;

  end;

 

procedure TSecondObject.SetData(AValue : integer);

  begin

  FMyField := 1;

  inherited SetData(0.99); //вызвали метод TFirstObject

  end;

Иерархия классов

Принцип наследования позволяет создавать сложные разветвленные иерархические системы объектов, каждый из которых может иметь одного родителя и несколько потомков.

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

 

Виртуальные и динамические методы

Директива Virtual позволяет методу класса быть заменой так же названным методом в производном классе.

Директива Abstract определяет метод класса, как осуществляемый только в наследуемых классах. В самом классе-родителе метод не реализуется.

Директива Override определяет метод класса как замену так же названного метода в родительском классе.

type

 TField = class(Object)

   function GetData : string; virtual; abstract;

 end;

 

 TStringField = class(TField)

   FData : string;

   function GetData : string; override;

 end;

 

 TIntegerField = class(TField)

   FData : integer;

   function GetData : string; override;

 end;

 

 TExtendedField = class(TField)

   FData : extended;

   function GetData : string; override;

 end;

 …


 

Динамические методы

Директива Dynamic позволяет методу класса быть замененным так же названным методом в производном классе.

Dynamic семантически эквивалентна Virtual. Первый оптимизирован для памяти, последний для скорости.

type

 TFirstClass = class(TObject)

   FMyField1 : integer;

   FMyField2 : LongInt;

   procedure StatMethod;

   procedure VirtMethod1; virtual;

   procedure VirtMethod2; virtual;

   procedure DynMethod1; dynamic;

   procedure DynMethod2; dynamic;

 end;

 TSecondClass = class(TFirstClass)

   procedure StatMethod;

   procedure VirtMethod1; override;

   procedure DynMethod1; override;

 end;

var

 Obj1 : TFirstClass;

 Obj2 : TSecondClass;

 

31.      


22.01.2015; 17:37
хиты: 20
рейтинг:0
Точные науки
информатика
Языки программирования
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2016. All Rights Reserved. помощь