Программирование COM в Delphi. Урок 2. Понятие об интерфейсах |
![]() |
![]() |
Автор megabax | ||||||||||||
30.07.2011 г. | ||||||||||||
Программирование COM в Delphi. Урок 2. Понятие об интерфейсахИсходники к уроку можно скачать здесь.. Интерфейсы появились в Delphi начиная с версии 3. На них строиться вся технология программирования под COM. Однако, интерфейсами можно пользоваться и без COM. Иными словами, интерфейсы, это самостоятельная технология, которая может быть применена для программирования COM-приложения, так и для приложений, никак не связанных с COM. Поэтому изучение COM мы начнем с интерфейсов. Что же такое интерфейс? По своей сути, он чем то похож на абстрактный класс. В Delphi можно объявить классы, для которых не все методы будут реализованы. Их предполагается реализовать в классах-потомках. Вот пример объявления абстрактного класса:
Мы можем создать экземпляр абстрактного класса (то есть, следующий код компилятор вполне пропустит):
он выдаст лишь предупреждения:
Даже если мы выполним этот код, ошибки не будет: Но стоит нам только попытается использовать этот объект:
и у нас "выскочит" сообщение об ошибке: Иными словами, мы не можем использовать абстрактный класс. Нам надо объявить от него потомка, а так же реализовать у него все методы:
Класс TFirstDriver мы можем смело использовать:
Данный код нормально отработает: Возникает вопрос, а для чего нужны эти самые абстрактные классы? Дело в том, что мы можем объявить переменную именем родительского класса, а присвоить ему объект дочернего класса. Тоесть, вот такой вот код:
будет вполне корректен: И эта особенность Delphi, то что можно присвоить переменной объект дочернего класса незаменима в том случае, если мы заранее не знаем, какой класс будем использовать. Например, это зависит от выбор пользователя. В этом случае мы для этих классов можем объявить общего абстрактного предка и использовать переменную его типа. Давайте проиллюстрируем это на примере. Сначала объявим еще один класс, дочерний от TMyDriver:
А теперь напишем пример использования в зависимости от выбора пользователя:
А вот теперь мы плавно переходим к понятию "Интерфейс". И так, чем же он отличается от абстрактного класса? Во первых, интерфейс объявляется ключевым словом interface, например так:
Далее, объявляемые интерфейсы прямо или косвенно наследуют IUnknown, который является предком всех интерфейсов с COM. Но о нем пойдет речь в будущих уроках. А пока я опишу следующие отличия интерфейса и абстрактного класса. И так, третье отличие: нельзя создать экземпляр интерфейса. То есть, вот такой код компилятор не пропустит:
Эта особенность интерфейса способствует сохранению безопасности программ при работе в сети. Следующее отличие - нельзя использовать директивы области видимости. Все методы интерфейса имеют область видимости public. Так же в интерфейсе нельзя объявлять переменные. Все методы интерфейса по умолчанию являются абстрактными виртуальными, так что не необходимости указывать это явно. Это и невозможно, так как методы интерфейса могут быть исключительно таковыми. Исходники к уроку можно скачать здесь.. (C) Шуравин Александр |
||||||||||||
Последнее обновление ( 04.09.2013 г. ) |
« След. | Пред. » |
---|