Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МетООПЛР.doc
Скачиваний:
7
Добавлен:
28.03.2015
Размер:
126 Кб
Скачать
☆

3 Новые концепции ооп в object pascal

В языке Object Pascal, используемом в Delphi и Lazarus, произошел ряд изменений, по сравнению с последней версией Borland Pascal. Перечислим основные из них, позволившие назвать объектную модель Object Pascal новой объектной моделью:

  • изменения в синтаксисе объявления и использования объектов

  • введение указателей на методы (function … of object)

  • введение методов классов (class method)

  • введение ссылок на классы

  • изменения в организации определений и вызовов методов

  • введение раздела объявления интерфейса разработчика объектного типа - protected

  • введение раздела объявления design-time интерфейса (интерфейса времени проектирования) объектного типа - published

  • введение механизмов RTTI - информации о типах на этапе выполнения программ

  • введение поддержки процедурных полей

  • введение понятия "свойства" - property

В отличие от объявления старых объектных типов, использовавшего ключевое слово object, новые объектные типы определяются с помощью слова class.

Термины класс (class) и объект (object) используются достаточно часто, приведем определе­ние этих понятий.

Класс — это определенный пользователем тип данных, который обладает состо­янием (представление класса) и набором операций (поведение класса). Класс об­ладает некоторыми внутренними данными и некоторым набором методов. Мето­ды класса реализуются в форме процедур или функций. Данные и методы класса описывают универсальные характеристики и поведение некоторого набора похожих объектов.

Объект — это экземпляр класса или, иными словами, переменная, принадлежа­щая типу данных, являющемуся классом. Любой объект — это фактически суще­ствующая в памяти запись. В процессе исполнения программы каждый объект тре­бует для хранения своего внутреннего представления некоторый объем памяти. Объект относится к классу так же, как переменная относится к типу данных.

В новой объектной модели программист работает только с динамическими экземплярами классов (то есть с теми, для которых выделяется память в heap-области), в отличие от старой модели, где можно было работать как с динамическими, так и со статическими экземплярами. По этой причине изменен синтаксис обращения к полям и методам объектов. Если раньше для работы с динамическими экземплярами объектов (инициализированными с использованием обращения к конструктору в сочетании с функцией New) программист должен был использовать обращение "по адресу" ( ^ ), то теперь такой доступ подразумевается автоматически. В качестве примера сравним два следующих фрагмента исходного текста:

{ Старая объектная модель }

type

PMyObject = ^TMyObject;

TMyObject = object (TObject)

MyField : TMyType;

constructor Init;

end;

...

var

MyObject : PMyObject;

begin

MyObject:=New(PMyObject,Init);

MyObject^.MyField:= ...

end;

{ Новая объектная модель }

type

TMyObject = class (TObject)

MyField : TMyType;

constructor Create;

end;

...

var

MyObject : TMyObject;

begin

MyObject:=TMyObject.Create;

MyObject.MyField:= ...

end;

Как можно заметить, в Object Pascal расширен синтаксис использования “точечной нотации” для доступа к методам объектов. Кроме того, изменено соглашение и об именовании конструкторов и деструкторов. В старой объектной модели вызов New отвечал за распределение памяти, а обращение к конструктору инициализировало выделенную область памяти. В новой модели эти функции выполняет конструктор Create.