- •2. Ввод данных из окна ввода (диалоговое окно)
- •3. Вывод данных в окно сообщения с помощью процедуры ShowMessage и в поле диалогового окна.
- •5. Окна среды Delphi. Панель инструментов, палитра компонентов. Компоненты Edit, Label, их свойства.
- •6. Основные события Windows. Процедура обработки события.
- •7. Проект Delphi. Файл проекта. Добавление новых форм. Сохранение проекта.
- •8. Компиляция приложения. Ошибки времени компиляции. Подсказки (Hints) и предупреждения (Warnings) компилятора.
- •9. Запуск приложения из среды программирования и из Windows. Ошибки времени выполнения приложения. Создание и изменение значка приложения в ImageEditor.
- •10. Компоненты Button, BitBtn, их свойства
- •11. Консольное приложение. Инструкции read, write.
- •12. Символы, их коды. Сравнение символов. Совместимость типов Char и String.
- •13. Компонент Memo, его свойства. Ввод одномерного массива с помощью компонента Memo.
- •14. Компонент ListBox, его свойства. Компонент ComboBox, его свойства.
- •15. Компонент Image, его свойства. Компоненты Bevel, Shape, их свойства.
- •16. Методы класса tStrings
- •17. Обработка исключительных ситуаций.
- •18. Многомерные массивы. Компонент StringGrid, его свойства. Ошибки при использовании массивов.
- •25. Концепция объектно-ориентированного программирования. Класс. Объект. Метод. Динамическое создание компонента на форме.
- •28. Полиморфизм и виртуальные методы
- •Абстрактные виртуальные методы
- •Динамические методы
- •Методы обработки сообщений
- •48. Логические связки условий, итоговые вычисления, группировка, сортировка.
- •Вывод результатов запроса
28. Полиморфизм и виртуальные методы
Вызов виртуального метода осуществляется следующим образом:
Через объектную переменную выполняется обращение к занятому объектом блоку памяти;
Далее из этого блока извлекается адрес таблицы виртуальных методов (он записан в четырех первых байтах);
На основании порядкового номера виртуального метода извлекается адрес соответствующей подпрограммы;
Вызывается код, находящийся по этому адресу.
Абстрактные виртуальные методы
При построении иерархии классов часто возникает ситуация, когда работа виртуального метода в базовом классе не известна и наполняется содержанием только в наследниках. Так случилось, например, с методом ParseLine, тело которого в классе TTextReader объявлено пустым. Конечно, тело метода всегда можно сделать пустым или почти пустым (так мы и поступили), но лучше воспользоваться директивой abstract. Директива abstract записывается после слова virtual и исключает необходимость написания кода виртуального метода для данного класса. Такой метод называется абстрактным, т.е. подразумевает логическое действие, а не конкретный способ его реализации. Абстрактные виртуальные методы часто используются при создании классов-полуфабрикатов. Свою реализацию такие методы получают в законченных наследниках.
Динамические методы
Разновидностью виртуальных методов являются так называемые динамические методы. При их объявлении вместо ключевого слова virtual записывается ключевое слово dynamic
В наследниках динамические методы перекрываются так же, как и виртуальные — с помощью зарезервированного слова override.
По смыслу динамические и виртуальные методы идентичны. Различие состоит только в механизме их вызова. Методы, объявленные с директивой virtual, вызываются максимально быстро, но платой за это является большой размер системных таблиц, с помощью которых определяются их адреса. Размер этих таблиц начинает сказываться с увеличением числа классов в иерархии. Методы, объявленные с директивой dynamic вызываются несколько дольше, но при этом таблицы с адресами методов имеют более компактный вид, что способствует экономии памяти. Таким образом, программисту предоставляются два способа оптимизации объектов: по скорости работы (virtual) или по объему памяти (dynamic).
Методы обработки сообщений
Специализированной формой динамических методов являются методы обработки сообщений. Они объявляются с помощью ключевого слова message, за которым следует целочисленная константа — номер сообщения. Следующий пример взят из исходных текстов библиотеки VCL
Метод обработки сообщений имеет формат процедуры и содержит единственный var-параметр. При перекрытии такого метода название метода и имя параметра могут быть любыми, важно лишь, чтобы неизменным остался номер сообщения, используемый для вызова метода. Вызов метода выполняется не по имени, как обычно, а с помощью обращения к специальному методу Dispatch, который имеется в каждом классе (метод Dispatch определен в классе TObject).
Методы обработки сообщений применяются внутри библиотеки VCL для обработки команд пользовательского интерфейса и редко нужны при написании прикладных программ.