Классы определяют свойства, методы и события, которые являются характеристиками и функциональностью, которыми обладают объекты и которые вы можете использовать для управления этими объектами. Классы могут, кроме того, содержать другие объекты или члены данных, такие как переменные. Когда объект или инстанция создаются из класса, то он содержит свойства, методы, события и все прочие объекты, определенные в описании класса.
Свойства, которые определяет класс, указывают характеристики объекта этого класса. Например, класс командной кнопки CommandButton имеет свойство Name, которое определяет имя командной кнопки, которое в свою очередь, противопоставляется свойству Caption, которое определяет текст, который командная кнопка отобразит пользователю.
Методы класса определяют и хранят процедурный код, который исполняется всякий раз, когда вы вызываете метод объекта этого класса. Например, класс командной кнопки CommandButton имеет метод Move, который перемещает командую кнопку в указанные вами координаты.
События класса определяют код, который будет исполняться всякий раз, когда система или пользователь включает это событие для объекта этого класса. Например, класс командной кнопки CommandButton содержит событие Click, которое представляет собой процедурный код, который исполняется всякий раз, когда пользователь щелкает по ней.
Классы, кроме того, могут содержать другие объекты, например, класс формы Form может содержать управляющий эшлемент , такой как командная кнопка. Вы можете, кроме того, указать членов данных, такие как переменные, как часть класса.
Приведенные ниже разделы предоставляют подробную информацию о классах Visual FoxPro:
Для получения более подробной информации об объектах в Visual FoxPro, смотрите описание Работа с объектами в Visual FoxPro.
Преимущества использования классов
Классы предоставляют перечисленные ниже возможности, которые позволяют вам создавать повторно-используемый и более легкий в обслуживании код:
-
Инкапсуляция
Инкапсуляция, которая включает в себя упаковку свойства и метода кода в объекте, прячет излишнюю сложность и содействует абстракции. Абстракция позволяет вам сфокусировать свое внимание на аспектах объекта, которые вы желаете или вынуждены использовать, вместо внимания на деталях низкого уровня.
Например, когда кто-то использует компьютер, ему вовсе не обязательно знать, как он работает внутренне, то есть ему не нужны знания о том, как компьютер обрабатывает данные и обслуживает файлы. Ему хочется выполняться задачи, такие, как написание писем и совсем не хочется знать, как это происходит внутренне, в железе компьютера.
Подобно этому, класс listbox инкапсуюлирует свойства, управляющие тем, как в нем будут обображаться элементы списка, а также инкапсуюлирует функциональность, определяющие действия, которые будут выполнены при выборе элемента из списка в единичный управляющий элемент.
-
Создание субклассов
Для получения более подробной информации, смотрите их описание Субклассы в Visual FoxPro.
-
Наследование (Inheritance)
Для получения более подробной информации, смотрите их описание Subclasses in Visual FoxPro.
Эти возможности позволяют вам более быстро и легко создавать и обслуживать код.
Типы классов Visual FoxPro
Классы Visual FoxPro, и по расширению, объекты, делятся на два первичный типа: контейнерные классы и классы управляющих элементов. Классы, кроме того, могут быть визуальными и невизуальными.
Контейнерные классы и классы управляющих элементов.
Контейнеры могут состоять из других объектов, таких как управляющие элементы, и предоставлять доступ к объектам, в них содержащимся. Классы управляющих элементов являются более инкапсюлированными, чем контейнерные классы; однако, по этой причине они могут быть менее гибкими. Классы управляющих элементов не имеют метода AddObject.
Например, предположим, что вы создаете контейнерный класс, который состоит из двух listbox'ов и двух командных кнопок. Затем вы добавляете объект, основанный на контейнерном классе в форму. Вы можете управлять каждым объектов в контейнере, как в design, так в run time; например, вы можете изменить позиции listbox'ов или заголовки командных кнопок. Кроме того, вы можете добавлять другие объекты в контейнер в design time; например, вы можете добавить метки для идентификации listbox'ов.
В приведенной ниже таблице перечислены примеры объектов, которые могут существовать в контейнерных классах.
Контейнер | Может содержать |
---|---|
Column |
Может содержать Заголовки (Headers) и любые другие объекты, за исключение наборов форм, самих форм, панелей инструментов, таймеров и других колонокКомандные кнопки |
CommandGroup |
Command buttons - командные кнопки |
Container |
Любые управляющие элементы |
Control |
Любые управляющие элементы |
Custom |
Любые управляющие элементы, data environment, page frame - страничный фрейм, container - контейнер, custom - специальный пользовательский класс (не путать с произвольно создаваемым пользователем классом - это невозможно в Visual FoxPro) |
DataEnvironment |
Курсоры, отношения и курсоры-адаптеры |
FormSet |
Формы и панели инструментоы |
Form |
Page frames, data environment, Любые управляющие элементы, containers, custom |
Grid |
Columns - колонки |
OptionGroup |
Option buttons - отдельные радиокнопки |
PageFrame |
Pages - страницы |
Page |
Любые управляющие элементы, контейнеры, custom |
Project |
Файлы,сервера (не путать с компьютерным железом! :)) |
Toolbar |
Любые управляющие элементы, page frame, container |
Визуальные и невизуальные классы
В Visual FoxPro, объекты и управляющие элементы, созданные из визуальных классов отображают визуальные элементы как в design, так и в run time. Объекты и элементы, основанные на невизуальных классах, таких, как класс Custom и элемент Timer, отображают визуальный элемент только в среде разработки - design time, но не в run time.