Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Моделирование наследования. Фактическое наследование. WithEvents

Моделирование заключается во включении в свойства класса объектной переменной другого класса.

Покажем разницу в распределении ОП в случае наследования и в случае моделирования. Пусть есть описания классов для заводской поликлиники:

Класс человек = имя, фамилия, отчество, дата рождения.

Класс работник = дата поступления, специальность, место работы.

Класс больной = диагноз, дата начала болезни, лечение.

Слева в таблице показаны фрагменты программы в предположении, что наследование есть, справа – наследования нет.

 

Описание связей классов
Работник ЭТО человек Больной ЭТО работник Класс работник = дата поступления, специальность, место работы, к_человек Класс больной = диагноз, дата начала болезни, лечение, к_работник  
Описание объектных переменных, создание экземпляра производного класса.
Описание Б New типа больной   Dim Б as New больной Б.к_работник = New работник Б.к_работник.к_человек = New человек
Обращение к элементам классов
Б.специальность Б.имя Б. к_работник.специальность Б. к_работник.к_человек.имя

 

Наличие фактического наследования в VBA можно показать на примере элементов управления на форме. Все элементы коллекции Controls имеют координаты, размеры, и т.п. Поэтому если Вы опишите объектную переменную типа Control, то редактор будет подсказывать Вам эти свойства. Если же Вы опишите переменную типа Image, то увидите подсказку особых свойств элемента управления, например, Picture. В то же время к этому элементу можно обратиться двумя способами, видя при каждом разный набор свойств.

Поместите на форму один элемент управления Image. Программа, вызываемая, например, по щелчку на форму, изменяет высоту и цвет фона последнего добавленного элемента, то есть Image.

Dim s As Control, si As Image

Set s = Controls(Controls.Count - 1)

s.Height = s.Height + 10

Set si = s

' а можно и Set si=Controls(Controls.Count - 1)

si.BackColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)

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

Dim s As Control

Set s = Controls(Controls.Count - 1)

s.Height = s.Height + 10

s.BackColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)

s.Picture = LoadPicture(ActiveDocument.Path & "\S.jpg")

Если же последний элемент управления не является Image, то оба варианта кода приведут к ошибке. В первом случае сообщение об ошибке будет выдано при выполнении оператора присваивания Set si=s – несоответствие типов. А во втором случае при попытке обратиться к свойству BackColor будет сказано, что такого свойства нет (если его действительно нет у последнего элемента управления).

<== предыдущая лекция | следующая лекция ==>
Свойство для программиста | Как исп польз события
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 329; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.