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

38 Позднее связывание.

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

1) одно и то же имя метода может быть использована различными классами

2) класс переменной объекта (тип) может быть неизвестен до времени выполнения (когда язык не поддерживает определенный тип данных или переменная связана с объектами разных типов в одной программе).

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

39 Полиморфизм

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

40 Расширенная совместимость типов.

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

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

41 Конструкторы/Деструкторы.

Чтобы использовать виртуальные методы, необходимо в описании объекта после заголовка метода добавить ключевое слово virtual. Заголовки виртуальных методов родителя и наследника должны в точности совпадать. Инициализация экземпляра объекта, имеющего виртуальные методы, должна выполняться с помощью специального метода — конструктора. Конструктор обычно присваивает полям объекта начальные значения и выполняет другие действия по инициализации объекта. В заголовке метода-конструктора слово procedure заменяется словом constructor. Действия, обратные действиям конструктора, выполняет еще один специальный метод — деструктор. Он описывается словом destructor.

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

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

Замечу, что конструктор и деструктор могут быть и «пустыми», то есть не содержать операторов. Весь необходимый код в этом случае создается при трансляции ключевых слов constructor и destructor.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]