Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обзорная лекция по курсу ООП.docx
Скачиваний:
5
Добавлен:
01.04.2025
Размер:
48 Кб
Скачать
☆

8 Конструкторы и деструкторы

Конструктор – это метод особого вида, который создает объекты и делает для них начальные установки. Заголовок конструкторов начинается с ключевого слова constructor.

Отметим, что в качестве имен конструкторов, в отличие от Borland Pascal, в котором применялся идентификатор Init, в Object Pascal рекомендуется использовать идентификатор Create. При создании нового объекта конструктор всегда вызывается с помощью ссылки на имя класса.

SimpleVar := TSimpleClass.Create;

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

Аналогично конструкторам, для которых рекомендуется использовать одинаковый идентификатор Create, для всех деструкторов рекомендуется использовать имя Destroy.

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

9 Наследование в Object Pascal. Правила наследования.

Наследование – это такое соотношение между классами, когда один класс использует структурную или функциональную часть одного или нескольких других классов (соответственно простое или множественное наследование).

В Object Pascal реализовано простое наследование, при котором у класса может быть только один родитель, но сколь угодно потомков.

Любой класс можно объявить потомком ранее описанного класса. Потомок наследует все данные и методы класса родителя и дополняет их своими данными и методами.

В результате использования механизма наследования отпадает необходимость заново описывать уже существующие в классе-родителе поля и методы. Требуется описать только те поля и методы, которых недостает в классе-родителе.

Факт наследования каким-либо типом характеристик родительского типа обозначается указанием после ключевого слова class имени непосредствен­ного родителя, которое заключается в круглые скобки.

Наследование дочерними типами информационных полей и методов их родительских типов выполняется согласно следующим правилам:

Правило 1: Информационные поля и методы родительского типа наследуются всеми его дочерними типами независимо от числа промежуточных уровней ие­рархии.

Правило 2: Доступ к полям и методам родительских типов в рамках описания любых дочерних типов выполняется так, как будто бы они описаны в самом дочернем типе.

Правило 3: В дочерних типах могут использоваться идентифи­каторы полей, и свойств совпадающие с идентификаторами полей или свойств какого-либо из роди­тельских типов. Однако перекрытое (одноименное) поле или свойство не доступны в потомке. Идентификаторы методов в дочерних типах также могут совпадать с именами методов в родительских типах. В этом случае говорят, что дочерний метод подавляет или перекрывает од­ноименный ему родительский, и в рамках дочернего типа, при указании имени такого метода, будет вызываться именно дочерний метод, а не родительский. Если метод объявлен как статический, то он может иметь другие параметры, если же он объявлен как абстрактный, виртуальный или динамический, то параметры должны совпадать.

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

Правило 4: Дочерний тип может доопределить произвольное число собствен­ных методов, полей и свойств.

Правило 5: Любое изменение текста в родительском методе автоматически ока­зывает влияние на все методы порожденных дочерних типов, которые его вы­зывают.

Важным аспектом, касающимся наследования, является механизм поиска метода в иерархии классов:

  1. В первую очередь компилятор устанавливает тип объекта;

  2. Он ищет метод в классе объекта и если находит, то подключает его;

  3. Если метод в классе объекта не найден, то идет поиск в классе-родителе. В случае успеха вызывает метод родителя;

  4. Если метод в классе-родителе не найден, то поиск продолжается в классах-предках до тех пор, пока вызванный метод не будет найден. Если компилятор не обнаруживает метод, то он фиксирует ошибку компиляции.\

  5. Если этот наследуемый ро­дительский метод вызывает еще и другие методы, то вызываться уже будут только родительские или вышележащие методы, так как вызовы методов из ни­жележащих по иерархии типов не допускают.