- •Федеральное агентство по образованию
- •Государственное образовательное учреждение высшего профессионального образования
- •«Орловский государственный технический
- •Университет»
- •Учебно-научно-исследовательский институт информационных технологий
- •Печатается по решению редакционно-издательского совета ОрелГту орел 2010
- •302030, Г. Орел, ул. Московская, 65
- •3 Новые концепции ооп в object pascal
- •4 Задания к лабораторным работам
- •5 Контрольные вопросы
- •6 Содержание отчета
- •7 Список литературы
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.
