Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Интерфейс класса в VB и его наследование




 

Подход к реализации объектно-ориентированной парадигмы программирования в VB основанной на идеи о модулях класса приводит к смешению двух самостоятельных концепций: интерфейса и реализации класса. Интерфейс класса это список свойств методов и событий, поддерживаемых данным классом. Реализация это программный код всех компонентов класса, определяющий его реальную работу. VB освобождает программиста от необходимости разделять эти два понятия. Программист, создавая модуль класса одновременно создает его интерфейс и реализация. Интерфейс класса в VB явно закладывается с его реализацией.

В ЯП C++ и OP эти два понятия явно разделяются. Однако VB позволяет сделать тоже самое, но только для определения интерфейса здесь необходимо создать отдельный класс – класс интерфейса.

Класс интерфейса делает возможным реализацию одной из важнейших идей ООП – наследование (inheritance), то есть воспроизведение признаков некоторого класса-предка (ancestor) классом-потомком (descendant). Класс интерфейса содержит только объявления свойств, методов и событий и не содержит никакого исполняемого кода. Интерфейс, описанный в классе интерфейса должен быть реализован в другом классе, в классе реализации. Для указания какой интерфейс должен унаследовать класс реализации необходимо в классе реализации указать ключевое слово IMPLEMENTS с именем класса интерфейса. Класс реализации обязан реализовать все описанные методы и свойства, которые должны быть отмечены в нем спецификатором PRIVATE.

Интерфейс является в некотором смысле контрактом, который обязуются реализовать все класса реализации, которые наследуют этот интерфейс. При этом сама реализация этого интерфейса не является с точки зрения наследования важной. Концепция интерфейсов крайне важна при реализации программного обеспечения так как позволяет определить однотипные методы обработки различных данных. Например, можно определить интерфейс IPersonalData, который описывает свойства и методы работы с некоторыми личными данными обобщенного объекта реального мира (сотрудников, заказчиков, поставщиков и т.д.). Однако реальные методы представления этих данных для каждого типа могут различаться.

Рассмотрим более подробно реализацию концепции интерфейсов и их наследования в VB. Для простоты объявим класс интерфейса IAnimal, который содержит описание двух методов Move (передвигаться) и Bite (касаться). Класс интерфейс также как и класса реализации объявляется в модуле класса, однако методы в классе интерфейса не содержат исполняемого кода:

 

Public SubMove (ByValDistance As Double)

'исполняемый код отсутствует

End Sub

 

Public SubBite (ByValWhat AsObject)

'исполняемый код отсутствует

End Sub

 

Реализуем данный интерфейс в класса реализации Flea («блоха»). Для указания того, что класс обязан реализовать интерфейс необходимо после ключевого слова IMPLEMENTS указать имя интерфейса:

 

Implements IAnimal

Private SubIAnimal_Move(ByValDistance As Double)

MsgBox"Flea moved" & Distance

End Sub

 

Private SubIAnimal_Bite(ByValWhat AsObject)

MsgBox"Flea bit a " & TypeName(What)

End Sub

 

и также в классе Dog («собака»):

 

Implements Animal

Private SubIAnimal_Move(ByValDistance As Double)

MsgBox"Dog moved" & Distance

End Sub

 

Private SubIAnimal_Bite(ByValWhat AsObject)

MsgBox"Dog bit a " & TypeName(What)

End Sub

 

Несмотря на то, что в классе интерфейса методы Move и Bite объявлены как открытые, однако в классах реализации эти методы должны быть определены как закрытые. В классах реализации идентификатор наследуемого метода трансформируется путем префиксного присоединения имени интерфейса и символа подчеркивания к исходному идентификатору метода. В данном примере метод Bite получает параметр типа Object. Данный тип совместим с любыми объектными типами языка VB позволяет получить адресую ссылку объекта любого класса. Функция TypeName возвращает идентификатор типа скалярной или объектной переменной.

Использование функциональности класса реализации, наследующего интерфейс в VB возможно только от имени соответствующего класса интерфейса. Эта особенность обусловлена тем, что все объекты в VB являются на бинарном уровне COM-объектами. С точки зрения синтаксиса, наследуемые методы являются закрытыми и поэтому недоступны непосредственно для клиентов класса реализации. Задача обеспечения доступа к функциональности таких классов решается в МИ следующим образом:

 

Dimfl AsFlea     'объявляем объект «блоха»

Dimdg AsDog      'объявляем объект «собака»

Dimanim AsIAnimal 'объявляем интерфейс «животное»

 

Setfl = NewFlea 'конструируем «блоху»

Setty = NewDog   'конструируем «собаку»

'назначим ссылку на объект «блоха» интерфейсу

'теперь «животное» – это «блоха»

Setanim = fl

anim.Bite dg     'Блоха кусает собаку

'назначим ссылку на объект «собака» интерфейсу

'теперь «животное» – это «собака»

Setanim = dg

anim.Bite fl       ' «собака» кусает «блоху»

 

В версии языка включенной в состав среды разработки Visual Basic 6.0 поддерживается только наследование интерфейса, тогда как наследование реализации одного класса другим классом невозможно. Эта важная возможность доступна в более развитых объектно-ориентированных языках программирования (С++, OP, Java, C#, VB.NET) позволяет существенным образом сократить количество избыточно программного кода при интенсивном использовании наследовании реализации.

 


[1]         [1] Здесь и далее ссылки на команды следует читать следующим образом: команда «Редактор Visual Basic» в подменю «Макрос» меню «Сервис».

[2]         Элемент оконного интерфейса, который может располагаться «свободно» внутри родительского окна или «жестко» присоединяться к его границам, а также границам других стыковочных окон.

[3]         Здесь и далее, треугольные скобки указывают на обязательный элемент, а прямоугольные на элемент который может быть пропущен в языковой конструкции

 










Последнее изменение этой страницы: 2018-04-12; просмотров: 366.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...