Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_ЛР1,2_A5_Часть1.doc
Скачиваний:
28
Добавлен:
08.11.2019
Размер:
1.7 Mб
Скачать

2.2 Объекты

В программе представители классаобъекты, объявляются в разделе var. Например, так:

var

student:TTPerson;

professor:TTPerson;

Примечание. В дальнейшем все основные понятия ООП рассматриваются на примере решения задачи составления списков преподавателей и студентов некоторой кафедры вуза. Здесь и далее приводятся фрагменты программы решения этой задачи.

Следует обратить особое внимание на то, что в Object Pascal объект — динамическая структура. Переменная-объект содержит не данные, а ссылку на данные объекта. Поэтому программист должен позаботиться о выделении памяти для этих данных и задании для них начальных значений.

Выделение памяти и инициализация объекта осуществляются с помощью специального метода класса — конструктора, которому обычно присваивают имя create (создать). Чтобы подчеркнуть особую роль и поведение конструктора, вместо ключевого слова procedure в заголовке конструктора используется слово constructor. Ниже приведено описание класса TTPerson, в состав которого введен конструктор.

TTPerson = class

private

fname:string[15];

faddress:string[35];

constructor create; // конструктор

public

procedure show; // метод

end;

Выделение памяти для данных объекта происходит присваиванием результата применения метода-конструктора к типу (классу) объекта. Например, после выполнения оператора

professor:=TTPerson.create;

выделяется необходимая память для данных объекта professor.

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

constructor TTPerson.create;

begin

fname:=’’;

faddress:=’’;

end;

Реализация конструктора несколько необычна. Во-первых, в теле конструктора нет привычных операторов New, обеспечивающих выделение динамической памяти (всю необходимую работу по выделению памяти выполняет компилятор). Во-вторых, формально конструктор не возвращает значения, хотя в программе обращение к конструктору осуществляется как к методу-функции.

После объявления и инициализации объект можно использовать, например установить значение поля объекта. Доступ к полю объекта осуществляется указанием имени объекта и имени поля, которые отделяются друг от друга точкой. Хотя объект является ссылкой, однако правило доступа к данным с помощью ссылки, согласно которому после имени переменной, являющейся ссылкой, надо ставить значок ^, на объекты не распространяется. Например, для доступа к полю fname объекта professor вместо

professor^.fname следует писать professor.fname

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

professor.free;

2.3. Методы

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

professor.show;

вызывает применение метода show к объекту professor. Фактически оператор применения метода к объекту — это специфический способ записи оператора вызова процедуры.

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

Ниже приведен пример определения метода show описанного выше класса ТТРегson.

// метод show класса TTPerson

procedure ТТРегson.show;

begin

ShowMessage(‘Имя:’+fname+#13+'Адрес:'+faddress);

end;

Следует обратить внимание на то, что в операторах метода доступ к полям объекта осуществляется без указания имени объекта.

Обычно методы применяются к ранее созданным объектам программы. Такие методы можно считать методами объектов. В DELPHI существует возможность создания методов, которые можно использовать даже тогда, когда ни один объект класса не создан. К таким методам относятся, например, конструкторы, которые вызываются для создания объектов. Подобные методы называются методами класса и особым образом оформляются (за исключением конструкторов, о которых сказано выше). Объявление такого метода начинается с зарезервированного слова class, после которого следует обычное объявление метода, например:

TMyForm = class(TForm)

class procedure MessageCreate;

end;

class procedure TMyForm.MessageCreate;

begin

end;

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