- •Основы алгоритмических языков программирования Понятие о языках программирования. Современные языки программирования высокого уровня
- •Лексические единицы языков программирования
- •Интегрированные среды разработки программ
- •История развития технологии vba
- •Интегрированная среда разработки vba
- •Составные части vba-проекта. Добавление пользовательского кода
- •Вывод отладочных сообщений. Пошаговое выполнение и инструменты отладки
- •Концепция памяти. Переменные и их декларация в языках программирования
- •Управляющие структуры выбора
- •Структурные операторы в алгоритмических языках программирования
- •Данная логическая операция имеет следующую таблицу истинности, в которой «0» соответствует значению false, а «1» – true (табл 1).
- •Остальные логические операторы являются двухоперандными. Операция логического умножения and имеет следующую таблицу истинности (табл 2):
- •Наконец операция логического исключающего или представляется следующей таблицей истинности (табл 4):
- •Реализация управляющих структур выбора в vb
- •Циклические управляющие структуры
- •Реализация циклических управляющих структур в vb
- •Цикл с постусловием имеет похожий синтаксис:
- •Основные положения процедурного программирования
- •Реализация процедурного программирования в Visual Basic
- •Фундаментальные структуры данных
- •Массивы в vb
- •Агрегация разнородных типов. Структурные типы данных
- •Тип данных определяемый пользователем в vb
- •Основы объектно-ориентированного программирования
- •Реализация основных идей объектно-ориентированного программирования в языке vb. Поля и методы. Конструирование объекта класса. Адресная природа объекта класса
- •Свойства и события в vb. Связь объекта класса и его клиентов
- •Интерфейс класса в vb и его наследование
Интерфейс класса в vb и его наследование
Подход к реализации объектно-ориентированной парадигмы программирования в VB основанной на идеи о модулях класса приводит к смешению двух самостоятельных концепций: интерфейса и реализации класса. Интерфейс класса это список свойств методов и событий, поддерживаемых данным классом. Реализация это программный код всех компонентов класса, определяющий его реальную работу. VB освобождает программиста от необходимости разделять эти два понятия. Программист, создавая модуль класса одновременно создает его интерфейс и реализация. Интерфейс класса в VB явно закладывается с его реализацией.
В ЯП C++ и OP эти два понятия явно разделяются. Однако VB позволяет сделать тоже самое, но только для определения интерфейса здесь необходимо создать отдельный класс – класс интерфейса.
Класс интерфейса делает возможным реализацию одной из важнейших идей ООП – наследование (inheritance), то есть воспроизведение признаков некоторого класса-предка (ancestor) классом-потомком (descendant). Класс интерфейса содержит только объявления свойств, методов и событий и не содержит никакого исполняемого кода. Интерфейс, описанный в классе интерфейса должен быть реализован в другом классе, в классе реализации. Для указания какой интерфейс должен унаследовать класс реализации необходимо в классе реализации указать ключевое слово IMPLEMENTS с именем класса интерфейса. Класс реализации обязан реализовать все описанные методы и свойства, которые должны быть отмечены в нем спецификатором PRIVATE.
Интерфейс является в некотором смысле контрактом, который обязуются реализовать все класса реализации, которые наследуют этот интерфейс. При этом сама реализация этого интерфейса не является с точки зрения наследования важной. Концепция интерфейсов крайне важна при реализации программного обеспечения так как позволяет определить однотипные методы обработки различных данных. Например, можно определить интерфейс IPersonalData, который описывает свойства и методы работы с некоторыми личными данными обобщенного объекта реального мира (сотрудников, заказчиков, поставщиков и т.д.). Однако реальные методы представления этих данных для каждого типа могут различаться.
Рассмотрим более подробно реализацию концепции интерфейсов и их наследования в VB. Для простоты объявим класс интерфейса IAnimal, который содержит описание двух методов Move (передвигаться) и Bite (касаться). Класс интерфейс также как и класса реализации объявляется в модуле класса, однако методы в классе интерфейса не содержат исполняемого кода:
Public Sub Move (ByVal Distance As Double)
'исполняемый код отсутствует
End Sub
Public Sub Bite (ByVal What As Object)
'исполняемый код отсутствует
End Sub
Реализуем данный интерфейс в класса реализации Flea («блоха»). Для указания того, что класс обязан реализовать интерфейс необходимо после ключевого слова IMPLEMENTS указать имя интерфейса:
Implements IAnimal
Private Sub IAnimal_Move(ByVal Distance As Double)
MsgBox "Flea moved" & Distance
End Sub
Private Sub IAnimal_Bite(ByVal What As Object)
MsgBox "Flea bit a " & TypeName(What)
End Sub
и также в классе Dog («собака»):
Implements Animal
Private Sub IAnimal_Move(ByVal Distance As Double)
MsgBox "Dog moved" & Distance
End Sub
Private Sub IAnimal_Bite(ByVal What As Object)
MsgBox "Dog bit a " & TypeName(What)
End Sub
Несмотря на то, что в классе интерфейса методы Move и Bite объявлены как открытые, однако в классах реализации эти методы должны быть определены как закрытые. В классах реализации идентификатор наследуемого метода трансформируется путем префиксного присоединения имени интерфейса и символа подчеркивания к исходному идентификатору метода. В данном примере метод Bite получает параметр типа Object. Данный тип совместим с любыми объектными типами языка VB позволяет получить адресую ссылку объекта любого класса. Функция TypeName возвращает идентификатор типа скалярной или объектной переменной.
Использование функциональности класса реализации, наследующего интерфейс в VB возможно только от имени соответствующего класса интерфейса. Эта особенность обусловлена тем, что все объекты в VB являются на бинарном уровне COM-объектами. С точки зрения синтаксиса, наследуемые методы являются закрытыми и поэтому недоступны непосредственно для клиентов класса реализации. Задача обеспечения доступа к функциональности таких классов решается в МИ следующим образом:
Dim fl As Flea 'объявляем объект «блоха»
Dim dg As Dog 'объявляем объект «собака»
Dim anim As IAnimal 'объявляем интерфейс «животное»
Set fl = New Flea 'конструируем «блоху»
Set ty = New Dog 'конструируем «собаку»
'назначим ссылку на объект «блоха» интерфейсу
'теперь «животное» – это «блоха»
Set anim = fl
anim.Bite dg 'Блоха кусает собаку
'назначим ссылку на объект «собака» интерфейсу
'теперь «животное» – это «собака»
Set anim = dg
anim.Bite fl '«собака» кусает «блоху»
В версии языка включенной в состав среды разработки Visual Basic 6.0 поддерживается только наследование интерфейса, тогда как наследование реализации одного класса другим классом невозможно. Эта важная возможность доступна в более развитых объектно-ориентированных языках программирования (С++, OP, Java, C#, VB.NET) позволяет существенным образом сократить количество избыточно программного кода при интенсивном использовании наследовании реализации.
1Здесь и далее ссылки на команды следует читать следующим образом: команда «Редактор VisualBasic» в подменю «Макрос» меню «Сервис».
2Элемент оконного интерфейса, который может располагаться «свободно» внутри родительского окна или «жестко» присоединяться к его границам, а также границам других стыковочных окон.
3Здесь и далее, треугольные скобки указывают на обязательный элемент, а прямоугольные на элемент который может быть пропущен в языковой конструкции
