Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯВУ лекции.doc
Скачиваний:
18
Добавлен:
27.10.2018
Размер:
592.38 Кб
Скачать

Концепция объектно-ориентированного программирования

      

Определим некоторые базовые понятия объектно-ориентированного программирования.

Класс - это категория объектов, обладающих одинаковыми свойствами и поведением. При этом объект представляет собой просто экземпляр какого-либо класса. Например, в Delphi тип "форма" (окно) является классом, а переменная этого типа - объектом.

Класс в программировании это неоднородная структура. Он также как и запись содержит поля. Также он содержит методы и свойства.

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

Класс в Delphi, предназначенный для визуальной разработки программ, называется компонентом. Такие классы содержат обработчики событий. Обработчик события это свойство, в которое связывается с методом данного класса, который будет вызываться для обработки события.

Метод - это процедура, которая определена как часть класса и инкапсулирована (содержится) в нем.

Методы классов позволяют обращаться к внутренней информации о классе, без создания экземпляров класса - объектов.

Методы манипулируют полями и свойствами классов (хотя могут работать и с любыми переменными) и имеют автоматический доступ к любым полям и методам своего класса. Доступ к полям и методам других классов зависит от уровня "защищенности" этих полей и методов.

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

Объектно-ориентированный стиль позволяет определить новые методы со старыми именами, переопределив тем самым методы класса-предка. Такое свойство называется полиморфизмом. Остальные элементы класса не могут быть переопределены.

Проблемой реализации объектной ориентированности языка является проблема диспетчеризации вызовов методов объектов.

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

Существует три способа диспетчеризации методов:

- статический,

- виртуальный

- динамический.

Статический – в объекте хранится адрес метода. Метод жестко связан с первым классом и классах-наследниках будет вызываться этот же метод.

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

Таблица виртуальных методов (VMT) - структура, содержащая ссылки на виртуальные методы. При инициализации экземпляра объекта происходит так называемое "позднее связывание", то есть установление связи между "автоматическим" полем Self объекта и VMT. Self передается в качестве дополнительного неявного параметра в любой из виртуальных методов для определения - какой из них к какому уровню иерархии наследования относится.

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

В отличие от виртуальных методов и самой идеологии VMT, таблица динамических методов (DMT) содержит входы только для методов, объявленных или перекрытых для данного класса. На каждый динамический метод приходится только одна ссылка, представленная так называемым "индексом", по которому и происходит поиск метода для вызова.