- •Оглавление
- •Введение
- •Основные этапы решения задач на эвм
- •Анализ постановки задачи и ее предметной области
- •Формальное решение задачи
- •Алгоритмизация
- •Основные средства представления алгоритмов
- •Визуальные алгоритмы
- •Процесс программирования
- •Языки программирования
- •Язык программирования Pascal
- •Среда программирования Delphi
- •Событийная модель ос Windows
- •Концепция объектно-ориентированного программирования
- •Delphi. Основные характеристики продукта
- •Высокопроизводительный компилятор в машинный код
- •Быстрая разработка приложения из прототипов
- •Структурное объектно-ориентированное программирование
- •Создание приложения в Delphi
- •Свойства в Delphi
- •События в Delphi
- •Основные понятия алгоритмического языка Состав языка
- •Основные символы
- •Элементарные конструкции
- •Выражения
- •Комментарии
- •Директивы компилятора
- •Тип данных
- •Приведение типов
- •Простые типы данных Целые типы данных
- •Битовая арифметика
- •Вещественные типы данных
- •Логический тип данных
- •Символьный тип данных
- •Структура программы
- •Константы
- •Переменные
- •Операторы Оператор присваивания
- •Оператор перехода
- •Структурные операторы
- •Операторы управления выполнением цикла
- •Оператор варианта
- •Подпрограммы
- •Перечисляемый тип данных
- •Интервальный тип данных
- •Структурированные типы данных Массивы
- •Строковой тип данных (строки)
- •Множества
- •Файлы. Файловый тип
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Последовательный и прямой доступ к компонентам файла
- •Процедурный тип
- •Вариантный тип
- •Адресный тип. Указатели
- •Динамические переменные
- •Динамические структуры данных
- •Динамические массивы
- •Очереди
- •Статические методы
- •Виртуальные методы
- •Динамические методы
- •Методы обработки сообщений
- •Конструкторы и деструкторы
- •Замещенные методы
- •Абстрактные методы
- •Свойства
- •Обработчики событий
- •Список рекомендуемой литературы
Концепция объектно-ориентированного программирования
Определим некоторые базовые понятия объектно-ориентированного программирования.
Класс - это категория объектов, обладающих одинаковыми свойствами и поведением. При этом объект представляет собой просто экземпляр какого-либо класса. Например, в Delphi тип "форма" (окно) является классом, а переменная этого типа - объектом.
Класс в программировании это неоднородная структура. Он также как и запись содержит поля. Также он содержит методы и свойства.
Свойства так же, как и поля, определяют атрибуты класса. Но в отличие от полей свойства реализуют механизм доступа для чтения или изменения данных в полях объекта при помощи методов класса.
Класс в Delphi, предназначенный для визуальной разработки программ, называется компонентом. Такие классы содержат обработчики событий. Обработчик события это свойство, в которое связывается с методом данного класса, который будет вызываться для обработки события.
Метод - это процедура, которая определена как часть класса и инкапсулирована (содержится) в нем.
Методы классов позволяют обращаться к внутренней информации о классе, без создания экземпляров класса - объектов.
Методы манипулируют полями и свойствами классов (хотя могут работать и с любыми переменными) и имеют автоматический доступ к любым полям и методам своего класса. Доступ к полям и методам других классов зависит от уровня "защищенности" этих полей и методов.
Принцип наследования заключается в том, что можно определить новый класс как потомок другого ранее определенного класса. Это означает, что новый класс автоматически получает все поля и методы ранее определенного типа, который в этом случае называется предком или родительским классом.
Объектно-ориентированный стиль позволяет определить новые методы со старыми именами, переопределив тем самым методы класса-предка. Такое свойство называется полиморфизмом. Остальные элементы класса не могут быть переопределены.
Проблемой реализации объектной ориентированности языка является проблема диспетчеризации вызовов методов объектов.
Под "диспетчирезацией" вызовов методов объектов понимается то, каким образом приложение будет определять, какой код требуется выполнить при вызове того или иного метода.
Существует три способа диспетчеризации методов:
- статический,
- виртуальный
- динамический.
Статический – в объекте хранится адрес метода. Метод жестко связан с первым классом и классах-наследниках будет вызываться этот же метод.
Виртуальный - один и тот же метод будет работать по разному в зависимости от того, какой объект этот метод вызывает. При этом во всех потомках класса одноименные методы должны также специфицироваться как виртуальные и все они должны иметь точно такой же набор формальных параметров, что и самый первый виртуальный метод.
Таблица виртуальных методов (VMT) - структура, содержащая ссылки на виртуальные методы. При инициализации экземпляра объекта происходит так называемое "позднее связывание", то есть установление связи между "автоматическим" полем Self объекта и VMT. Self передается в качестве дополнительного неявного параметра в любой из виртуальных методов для определения - какой из них к какому уровню иерархии наследования относится.
Динамические (dynamic) методы, по возможностям наследования и перекрытия, аналогичны виртуальным, но в отличие от последних не имеют входов в таблицу VMT. Такой подход позволяет снизить расход памяти при большом количестве этих методов и самих классов.
В отличие от виртуальных методов и самой идеологии VMT, таблица динамических методов (DMT) содержит входы только для методов, объявленных или перекрытых для данного класса. На каждый динамический метод приходится только одна ссылка, представленная так называемым "индексом", по которому и происходит поиск метода для вызова.