Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конструирование программ.doc
Скачиваний:
12
Добавлен:
05.05.2019
Размер:
12.37 Mб
Скачать

4.2 Классы и объекты

4.2.1 Структура класса

Синтаксис описания класса:

<имя класса> = class(<имя класса-родителя>)

private {закрытый }

{Данные и методы, доступные только в данном классе}

protected {защищенный}

{Данные и методы, доступные только в наследуемых классах}

public {открытый}

{Данные и методы доступные всем}

published {публикуемый}

{Данные и методы доступные в Инспекторе объектов Delphi }

end;

Имя класса в Object Pascal принято начинать с буквы Т, а имя данных (их называют полями) – с буквы F.

Базовый класс в Object Pascal – TObject. Этот абстрактный класс, объявленный в модуле System, является родителем всех других классов и содержит только спецификации методов, включая базовый конструктор и деструктор.

Если в объявлении класса не указан класс-родитель, то объявляемый класс будет считаться наследником класса TObject:

type

TMyClass = Class { эквивалентно TMyClass = Class(TObject) }

. . .

end;

4.2.2 Создание и уничтожение объектов

Главное отличие объектов в Object Pascal заключается в том, что все объекты создаются динамически.

Для создания объекта необходимо вызвать конструктор (в Object Pascal он обычно называется Create), который возвращает указатель – адрес созданного объекта.

Для уничтожения объекта рекомендуется вызывать метод Free, который проверяет существование объекта (не равен ли он nil), а затем вызывает деструктор (в Object Pascal он обычно называется Destroy).

Пример создания и уничтожения объекта:

type

ТМуClass = class (TObject)

private

. . .

public

. . .

constructor Create; // Конструктор

destructor Destroy; // Деструктор

end;

. . . // Реализация методов класса

var

МуObject: ТМуClass;

begin

МуObject := ТМуClass.Create; { Создание объекта:

  • имя объекта, МуObject – указатель, результат вызова конструктора

  • конструктор по синтаксису процедура, но вызывается как функция

  • конструктор вызывается c именем класса – ТМуClass.Create

}

. . .

МуObject.Free; // Уничтожение объекта

end.

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

Реализация деструктора должна завершаться вызовом деструктора класса-родителя – inherited.

4.2.3 Пример. Класс – динамический массив

В этом примере (рисунки 4.2, 4.3, 4.4) создается класс ТМуАггау для работы с динамическим массивом, который содержит целые значения [BYTE, март 2000, Cover Story –Языки программирования].

Исходные данные, используемые для формирования массива, находятся в файле TestFile.dat.

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

Данные класса ТМуАrrау:

FArray – массив целых чисел

FPoz – Текущее количество (счетчик) элементов массива

Методы класса ТМуАrrау:

AddElementдобавляет элемент в конец массива

Createконструктор, создает массив из delta элементов

Destroyдеструктор, освобождает память, выделенную для элементов массива

GetElementвозвращает значение элемента массива по указанному номеру

GetLastNumberвозвращает номер последнего элемента

Рисунок 4.2 – Программа ConsoleExample7. Описание класса ТМуАrrау

Рисунок 4.3 – Программа ConsoleExample7 (продолжение). Реализация методов класса ТМуАrrау

Рисунок 4.4 – Программа ConsoleExample7 (продолжение). Процедура ReadElementsFromFile и главная программа