|
Программирование >> Разработка пользовательского интерфейса
Наследованием называется способность передачи свойств и методов, принадлежащих классу, на основе которого создается подкласс, вновь создаваемому классу. Вновь создаваемый подкласс автоматически наследует все свойства и методы родительского класса, но вы всегда можете изменить какие-то из этих свойств или методов для выполнения специализации данного подкласса. Наследование поддерживается не только при создании подкласса, но и в дальнейшем. Таким образом, все сделанные вами изменения в родительском классе тут же отразятся на его подклассах. Как видно на рис. 5.1, класс кнопок для вывода данных на печать наследует свой внешний вид от класса графических кнопок, но имеет специализированное изображение и, очевидно, специфическую реакцию на нажатие. Если мы решим изменить размер кнопки в классе графических кнопок, изменятся размеры всех используемых в приложении кнопок, стоящих ниже в иерархии классов. Оператор указания диапазона позволяет вызвать метод родительского класса с более низкого уровня, в пределах описания подкласса. Это позволяет расширить функциональность объекта без необходимости написания лишнего программного кода. При создании подкласса он автоматически наследует все методы родительского класса. Мы можем изменить унаследованный метод и в то же время выполнить не только этот измененный метод для данного подкласса, но и метод родительского класса. Оператор имеет следующий синтаксис: cClassName:: Method Инкапсуляция - это возможность объединения связанных фрагментов данных или процессов в отдельный модуль - контейнер. Это похоже на понятие абстракция - скрытие внутренних данных, то есть использование принципа создания объекта как черного ящика . Такой объект будет работать без раскрытия своей внутренней структуры, обеспечивающей его функциональность. Элементы управления, основанные на не контейнерных классах, являются хорошим примером использования принципа инкапсуляции. Использование инкапсуляции дает два очевидных преимущества программисту: Более простой процесс разработки программы. При создании объектов программист может сосредоточиться на более узких, конкретных задачах без необходимости обдумывания тех последствий, которые могут произойти в других частях программы из-за сделанных им изменений. Более безопасный способ дублирования фрагментов кода или объектов. После того как объект описан и правильность его работы в программе проверена, все программы или момента, когда необходимо выполнить какую-либо программу или прервать некоторое действие. ToolBar Создает пользовательскую панель инструментов. Панель инструментов представляет собой набор объектов, которые объединены в одном окне. Панель инструментов может быть пристыкована к верхней, нижней или боковым рамкам главного окна. Если панель не пристыкована, она ведет себя аналогично форме. Базовые классы делятся на контейнеры и элементы управления. Стоит пояснить несколько подробнее отличие классов, на основе которых создаются будущие объекты - элементы управления, от классов-контейнеров. Объекты-контейнеры могут содержать внутри себя другие объекты, в то же время допуская манипуляции с этими внутренними объектами. Их можно назвать составными объектами, при этом отдельные составляющие части не теряют своего суверенитета . Объекты - элементы управления, основанные на не контейнерных классах, хотя тоже могут состоять из нескольких составных частей, допускают манипуляции с ними только как с единым компонентом. Некоторые базовые классы занимают особое положение в связи с тем, что сами являются составной частью другого базового класса и поэтому не могут быть основой для создания подкласса (на рис 5.2 выделены пунктирной линией). Полиморфизм - это возможность осуществлять одинаковое обращение к различным объектам в случае, если каждый объект может выполнять такое обращение. Полиморфизм обеспечивает общий интерфейс для работы с создаваемыми объектами. Например, вызов метода Draw для объектов Box1 и Box2 может вызвать совершенно различные последствия, так как каждый из этих объектов может иметь собственный метод Draw. Для программиста полиморфизм обеспечивает более простое и гибкое управление для группы связанных объектов. Обращение - это инструкция от одного объекта к другому для выполнения одного из методов того объекта, к которому обращаются. Различают три части обращения: имя объекта, получающего сообщение, имя метода и, возможно, передаваемые параметры, если того требует выполняемый метод. В обращении имя объекта отделяется специальным оператором - точкой (.). Например, если надо сделать недоступным объект - список с именем MyList, необходимо выполнить команду: MyList.Enabled = .F. Это вызовет изменение свойства, контролирующего доступность данного объекта для работы с ним пользователя. Список изменит свой внешний вид и для возвращение его в рабочее состояние нужна команда: MyList.Enabled = .T. Обращение к объекту для выполнения каких-либо действий аналогично обращению для изменения его свойств. После имени объекта мы должны указать имя метода: MyList.Refresh() В некоторых ситуациях мы не сможем прямо обратиться к интересующему нас объекту. Например, если мы захотим обратиться к упомянутому выше списку из другой формы, то должны будем послать наше обращение не списку, а форме, содержащей нужный список: MyForm.MyList.Enabled = .T. Такой порядок обращения к объекту может показаться весьма утомительным, особенно если представить себе достаточно длинную цепочку вложенных объектов. Однако это позволяет не подыскивать сотню уникальных имен для кнопки выхода в каждой из 100 используемых в приложении форм. Все кнопки могут иметь одно и то же имя cmdClose, и для каждого обращения найдется правильный адресат, т. к. в них будет использоваться имя нужной формы: FormName.cmdClose Значительно сократить программный код позволяют операторы относительной ссылки, в которых, в отличие от абсолютной ссылки, не используются имена объектов: THIS - позволяет сослаться на текущий объект; THISFORM - позволяет сослаться на текущую форму; THISFORMSET - позволяет сослаться на текущий набор форм. В командах эти операторы могут указываться вместо соответствующих имен объектов, форм или наборов форм при выполнении какого-либо метода или изменении значения свойств. В каких случаях какие операторы относительной ссылки надо использовать, поможет разобраться табл. 5.2. Таблица 5.2. Обращение к объектам с помощью относительной адресации Источник обращения Пример обращения к объекту MyObject Другой метод того же самого THIS.Enabled = .T. объекта Форма, включающая объект THIS.MyObject.Enabled = .T. части системы, работающие по сходному алгоритму, например доступа к данным, легко создаются как порожденные объекты. Это исключает риск повреждения данных при независимом программировании каждой части системы и возможном при этом появлении большого числа ошибок. Другой объект той же самой THISFORM.MyObject.Enabled формы = .T. Извне формы MyForm.MyObject.Enabled = Объект другой формы, THISFORMSET.MyForm. входящей в один набор форм MyObject.Enabled = .T. Извне набора форм MyFormSet.MyForm. MyObject.Enabled =.T. В Visual FoxPro и Visual Basic есть два свойства, которые позволяют выполнять действия относительно активного объекта, то есть объекта, с которым в данный момент работает пользователь (на который указывает курсор), без необходимости знания его имени. Свойство ActiveForm формы или набора форм имеет следующий синтаксис: FormSet.ActiveForm.Property [= Setting] FormSet.ActiveForm.Method Это свойство позволяет узнать заданное в Property свойство для активной формы или выполнить указанный в Method метод. Если мы задаем параметр Setting, то указанное значение сравнивается с установленным, и в случае равенства возвращается .T. Если Setting не указывается, возвращается установленное значение свойства Property. Если мы не используем набор форм, то на месте FormSet в Visual FoxPro мы должны сослаться на экранный объект с помощью системной переменной SCREEN. Эта системная переменная выполняет в таком случае несколько нестандартные для системных переменных в Visual FoxPro функции. Она играет роль ссылки на главное окно Visual FoxPro, позволяя управлять им как объектом. Например, для очистки главного окна Visual FoxPro от выведенных данных можно в окне Command написать команду CLEAR. Тот же самый результат будет достигнут, если мы напишем следующую строку: SCREEN.Cls В Visual Basic с этой же целью используется объект Screen. Например: Screen.ActiveForm.MousePointer = 4 Свойство ActiveControl позволяет сослаться на активный объект формы, страницы в многостраничной форме или панели инструментов. Синтаксис этого свойства следующий: Ой/ect.ActiveControl.Property [= Setting] Если во время работы с формой мы в окне Debug наберем приведенную ниже строчку и будем перемещаться между разными элементами управления, то увидим имя активного в данный момент элемента управления: SCREEN.ActiveForm.ActiveControl.Name В связи с тем, что объектная модель Visual FoxPro поддерживает наследование, при работе с классами не обойтись без соответствующей информационной поддержки. Для получения информации о созданных объектах можно воспользоваться следующими свойствами. Эти свойства имеют статус только для чтения и не могут использоваться для изменения свойств объекта. Object.BaseClass Возвращает имя базового класса, на основе которого создан указанный объект. Ой/ect.Class Возвращает имя класса. Object.ClassLibrary Возвращает имя файла пользовательской библиотеки классов, в которой содержится определение класса, на основе которого создан объект. Object.ParentClass Возвращает имя класса, который является родительским для класса, на основе которого создан указанный объект. Control.Parent Обеспечивает ссылку на содержащий элемент управления объект-контейнер. Например, мы можем изменить цвет фона формы при каких-либо действиях с включенным в нее элементом управления без необходимости знать имя этой формы: THIS.Parent.BackColor = RGB(192,0,0) Таким образом, главное назначение этого свойства - использование его при создании универсальных классов элементов управления, способных воздействовать на объект, в котором будут размещены элеметы управления, созданные на основе этого класса. Для почти любого объекта мы можем записать комментарий, что может оказаться очень полезным на этапе отладки или сопровождения программы. Необходимо воспользоваться свойством Object.Comment [ = cExpression] Это свойство удобно использовать для дополнительной идентификации объектов, если нет
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |