WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 |
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИИ Томский политехнический университет _ УТВЕРЖДАЮ Декан АВТФ Мельников Ю.С.

“” 2002 г.

МЕТОДЫ В OBJECT PASCAL Методические указания к лабораторной работе № 135 по курсу “Программирование и основы алгоритмизации” для студентов направления 550200 “Автоматизация и управление” Томск - 2002 УДК 681.3 Методы в Object Pascal. Методические указания к лабораторной работе № 135 по курсу “Программирование и основы алгоритмизации” для студентов направления 550200 “Автоматизация и управление”.

Составитель Н.М. Семёнов Рецензент к.т.н., доцент Е.И. Громаков Методические указания рассмотрены и рекомендованы методическим семинаром кафедры интегрированных компьютерных систем управления “_” _ 2002 г.

Зав. кафедрой А.М. Малышенко ОГЛАВЛЕНИЕ 1 Введение в методы................................................................................. 4 1.1 Методы-функции и методы-процедуры..................................... 5 1.2 Конструкторы............................................................................. 6 1.3 Деструкторы................................................................................ 7 1.4 Классовые процедуры и функции.............................................. 8 1.5 Реализация методов.................................................................... 9 1.5.1 Скрытый параметр Self................................................ 9 1.5.2 Реализация методов-процедур..................................... 10 1.5.3 Реализация методов-функций...................................... 11 1.5.4 Реализация конструкторов.......................................... 12 1.5.5 Наследование конструкторов...................................... 13 1.5.6 Реализация деструкторов............................................. 17 1.5.7 Наследование деструкторов........................................ 18 1.5.8 Необходимость использования деструкторов.............. 1.5.9 Реализация классовых методов.................................... 2 Вызов методов........................................................................................ 2.1 Вызов конструктора.................................................................... 2.2 Вызов методов объектов............................................................ 2.3 Вызов деструкторов.................................................................... 2.4 Вызов классовых методов.......................................................... 2.5 Методы для доступа к полям..................................................... 3 Видимость элементов объекта............................................................... 4 Использование методов.......................................................................... 5 Контрольные вопросы............................................................................ 6 Задание..................................................................................................... 7 Литература............................................................................................... МЕТОДЫ В OBJECT PASCAL Цель лабораторной работы состоит в знакомстве студентов с началами объектноориентированного программирования, в частности, с методами. В процессе выполнения работы студенты узнают:

- как объявлять методы, в том числе конструкторы и деструкторы;

- как выполнять реализацию методов;

- как использовать методы;

- что из себя представляют методы класса;

- как “прятать” и защищать элементы класса.

1 Введение в методы Объект включает в себя данные и код. Код, в виде методов (т.е. подпрограмм, присоединенных к объекту), задает поведение объекта. Набор всех методов данного класса определяет операции, которые могут быть выполнены над представителем этого класса.

Оба термина -операции и методы - по существу обозначают одно и то же. И тот, и другой относятся к концепции действия и к процессу выполнения инструкций в программе.

Метод - это подпрограмма, которая определена как часть класса и включена внутрь этого класса.

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

В Object Pascal есть два вида самостоятельных программ: процедуры и функции. Они аналогичны процедурам - методам и функциям - методам соответственно. Для объектов также определяются и дополнительные категории методов. Всего существует шесть разновидностей методов объектов:

1) Методы - процедуры.

Методы - процедуры аналогичны самостоятельным процедурам, за исключением того, что они “присоединены” к тому классу, в котором заданы, и могут быть вызваны лишь через какого-либо действительного представителя этого класса.

2) Методы - функции.

Методы - функции возвращают значения и ведут себя также, как и обычные самостоятельные функции, с той разницей, что, как и все методы, они “присоединены” к тому классу, в котором заданы, и должны вызываться через действительного представителя этого класса.

3) Классовые процедуры.

Классовые процедуры концептуально даже более близки к обычным самостоятельным процедурам, чем методы - процедуры. Для вызова классовых процедур не требуется экземпляр объекта. Эти процедуры объявляются как часть класса и вызываются с использованием ссылки на сам класс, а не на представителя этого класса.

4) Классовые функции.

При использовании классовых функций также не требуется представитель класса. Эти функции вызываются посредством ссылки на сам класс.

5) Конструкторы.

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



6) Деструкторы.

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

1.1 Методы - функции и методы - процедуры Методы-процедуры и методы-функции объявляются так же, как и обычные процедуры и функции, с той разницей, что делается не в блоке объявлений языка Pascal, а в описании класса.

Заголовок метода выглядит так же, как и заголовок самостоятельной подпрограммы.

Заголовок метода-процедуры имеет следующий синтаксис:

type Имя Класса = class (Имя Родительского Класса)...

procedure ИмяМетода (<Список параметров>);

...

end;

Примеры:

type TDateList = class (TPersistent)...

procedure EndUpDate;

procedure LoadFromFile (const FileName: String);

procedure SaveToFile (const FileName: String);

...

end;

Общий синтаксис объявления метода-функции выглядит так:

type ИмяКласса = class (ИмяРодителя)...

function ИмяМетода (<Список параметров>): ВозвращаемыйТип;

...

end;

Примеры:

type TClientWindow = class(TWindow)...

function Hide;

function GetRect: Trect;

function GetProperty(const Aname: String): Thandle;

...

end;

Объявления методов-процедур могут быть перемешаны с объявлениями методов-функций и методов других видов (например, конструкторов). Объявления элементов класса могут быть сгруппированы в разделы (например, public). Единственное требование - чтобы в пределах каждого раздела в описании класса все поля появлялись до объявления методов.

Рассмотрим пример почти полного объявления класса, включающего в себя методы - функции, методы-процедуры и поля. Цель этого примера - показать, как объявляются обычные методы, поэтому среди объявленных в классе методов отсутствуют конструктор и деструктор.

type TBook = class FAuthor : TAuthor;

FTitle : String;

function GetAuthor : TAuthor;

procedure SetAuthor(const AnAuthor : TAuthor);

function GetTitle : String;

procedure SetTitle(ATitle : String);

end;

В объявлении класса TBook присутствуют два поля данных - FAuthor и FTitle, а также несколько методов - процедур и методов - функций.

1.2 Конструкторы Конструкторы объявляются почти так же, как и другие методы, только вместо слов procedure или function ставится зарезервированное слово constructor.

Конструктор - специальный вид подпрограммы, присоединенной к классу. Его роль - создавать представителей класса. Он ведет себя как функция, которая возвращает ссылку на вновь созданный экземпляр объекта.

Общий синтаксис для объявления конструктора объекта следующий:

type ИмяКласса = class(ИмяРодителя)...

constructor Имя(<Список параметров>);

...

end;

Примеры:

TClientWindow = class(TWindow)...

constructor Create(AnOwner: TWindow);

constructor CreateOffDesktor;

...

end;

В классе может определяться несколько конструкторов. Однако, у класса обычно бывает только один конструктор. Общепринятое имя для единственного конструктора - Сreate.

Объявление конструктора начинается с зарезервированного слова constructor, за которым следует тот же набор элементов - название, необязательный список параметров и точка с запятой - что и в случае объявления процедуры.

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

1.3 Деструкторы Деструкторы также объявляются аналогично процедурам. Деструктор - это специальная разновидность подпрограммы, присоединенной к классу. Его роль заключается в уничтожении представителя класса.

Синтаксис объявления деструктора следующий:

type ИмяКласса = class(ИмяРодителя)...

destructor Имя(<Список параметров >);

...

end;

Примеры:

type TClientWindow = class(TWindow)...

destructor Destroy;

destructor DestroyAndNotify(Receipient: TManager);

...

end;

В одном классе может объявляться несколько деструкторов. Обычно класс имеет только один деструктор без параметров с именем Destroy.

Объявление деструктора начинается с зарезервированного слова destructor, за которым следуют те же элементы, что и в случае объявления процедуры - имя, необязательный список параметров и точка с запятой.

Рассмотрим в качестве примера объявления конструкторов и деструкторов в полном описании класса TBook.





type TBook=class FAuthor : TAuthor;

FTitle : String;

constructor Create;

destructor Destroy; override;

function GetAuthor : TAuthor;

procedure SetAuthor (const AnAuthor : TAuthor);

function GetTitle : String;

procedure SetTitle (ATitle : String);

end;

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

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

Для начала деструктор Destroy всегда объявляйте как не имеющий параметров, а за его объявлением всегда должно следовать ключевое слово override:

destructor Destroy ; override;

1.4 Классовые процедуры и функции В языке Object Pascal можно объявлять классовые методы. Наиболее существенное отличие обычных методов класса от классовых методов заключается в том, что для вызова классового метода не требуется действительный представитель класса.

Классовые методы объявляются точно так же, как и обычные методы, но только перед их объявлением ставится зарезервированное слово class:

type ИмяКласса = class (ИмяРодителя)...

class procedure ИмяМетода(<Список параметров>);

...

end;

Рассмотрим пример:

type TDataList = class(TPersistent)...

class procedure FreeAll;

class procedure SetDelimiter(ASymbol : Char);

...

end;

Общий синтаксис объявления классовой функции следующий:

type ИмяКласса = class (ИмяРодителя)...

class function ИмяМетода(<Список параметров>): Возвращаемый Тип;

...

end;

Примеры:

type TClientWindow = class (TWindow)...

class function NumInstances;

class function DefaultCaption : String;

class function DefaultWidth : Integer;

...

end;

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

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

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

1.5.1 Скрытый параметр Self Между самостоятельными подпрограммами и методами существует существенное различие, заключающееся в способе доступа к данным представителя класса.

Самостоятельные подпрограммы могут работать с элементами данных, которые переданы подпрограммам предпочтительно в виде параметров.

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

С другой стороны, реализациям обычных (то есть не являющихся классовыми) методов доступны не только все те данные, которые были бы доступны подпрограмме. Методы также имеют неявный доступ к полям того представителя класса, который был использован в вызове.

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

Несмотря не то, что этот дополнительный параметр не виден в определении метода, он неявно присутствует в методе и называется Self. Параметр Self имеет тот же тип, что и класс, в котором определен метод.

Все тело метода заключено в неявный оператор with Self do, который предоставляет методу доступ к полям, свойствам и другим методам данного представителя класса.

Неявный оператор with действует примерно следующим образом:

begin with Self do begin...

{Код метода}...

end;

end;

Внешний блок begin - end представляет собой основной блок метода. Внутри метода можно непосредственно ссылаться на поля объекта, не используя при этом никаких префиксов.

Хотя и нет запрета на использование префикса Self при доступе к полям объекта внутри метода, обычно в этом нет необходимости. Внутри метода и так подразумевается использование префикса Self., поэтому можно просто напрямую ссылаться на поля объекта, как если бы это были локальные переменные.

Однако изредка возникают ситуации, когда приходится явно использовать параметр Self.

В частности, этот параметр может понадобиться для разрешения конфликтов идентификаторов внутри метода.

Для того, чтобы разрешить конфликт имен с помощью параметра Self, например, чтобы одновременно работать и с локальной переменной, и с полем объекта, имена которых совпадают, надо поставить перед именем поля объекта префикс Self с точкой (например, Self.FTitle).

Self - это предопределенный идентификатор внутри метода, поэтому, несмотря на то, что он не присутствует явно в определении метода, его можно использовать.

Большая разница между обычными и классовыми методами состоит в том, что у последних отсутствует неявный параметр Self.

Pages:     || 2 | 3 | 4 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.