Главная / Банки и базы данных / Использование классов и объектов

Использование классов и объектов

ЛАБОРАТОРНАЯ РАБОТА № 6

1. ЦЕЛЬ РАБОТЫ

1. Научиться создавать описания собственных классов.

2. Научиться создавать и использовать объекты определенных классов.

1. КЛАССЫ ОБЪЕКТОВ

Любой элемент управления или объект является экземпляром некоторого класса. Каждый объект имеет определенные свойства, методы или события. Класс, к которому принадлежит объект, называется базовым классом объекта.

FoxPro позволяет создать классы и объекты программно и с помощью конструкторов классов. Познакомимся с программным созданием объектов и классов. Для описания нового класса следует использовать команду DEFINE CLASS. Эту команду можно представить схематически так

DEFINE CLASS имя1 AS родительский_класс

[PROTECTED | HIDDEN имя_свойства1, имя_свойства_2, …]

.

.

.

ENDDEFINE

Здесь Имя1 – это имя нового класса; Родительский_класс определяет, от какого класса наследуется создаваемый класс. Если пользователь создает свой собственный класс, то нужно указать значение CUSTOM.

[PROTECTED | HIDDEN имя_свойства1, имя_свойства2, …]

Эта фраза используется для определения списка защищенных свойств, изменение значений которых вне определения класса или подкласса не допускается. Опция HIDDEN не разрешает изменять свойства не только вне класса, но и в подклассах.

Пример.

DEFINE CLASS MyClass AS CUSTOM

Real = 0

Imagine = 0

ENDDEFINE

В этом описании задаются два доступных программно свойства класса: Real и Imagine. Возникает вопрос: как использовать это описание? Для этого ответом служит команда CREATEOBJECT(…), которая создает экземпляр класса, например:

X = CREATEOBJECT("MyClass")

Теперь можно написать

X. Real = 1

Или

X. Imagine = 5

Выясним, где FoxPro отыскивает описание класса “MyClass”? Используется следующий порядок поиска имени класса:

1. В базовых классах Visual FoxPro;

2. В классах текущей программы;

3. В классах библиотеки, подключенной командой SET CLASSLIB;

4. В созданных пользователем описаниях классов.

Обычно описания классов, создаваемых пользователем, помещаются в процедурных файлах, вызов которых, как мы знаем, реализуется командой

DO имя_процедурного_файла

Внутри описания класса можно помещать описание функций и процедур, являющихся методами класса.

Например:

DEFINE CLASS MyClass As Custom

X = 0

Y = 0

FUNCTION Distance

Parameters X, Y

Distance = ABS(X – Y)

Return Distance

ENDFUNC

FUNCTION MAX

Parameters X, Y

If (X > Y)

Max = X

Else

Max = Y

End If

Return Max

ENDFUNC

ENDDEFINE

Здесь описание класса содержит две спецификации функций: Distance – для нахождения расстояния (евклидова) между X и Y и Max – для нахождения максимального из двух чисел X и Y.

Рассмотрим пример использования данного описания.

T = CREATEOBJECT ("MyClass")

T. X = 10

T. Y = 20

? T (Max(T. X, T. Y))

? T. Distance(T. X, 0)

Обратим внимание, что метод Max(…) и Distance вызываются как T. Max(…) и T. Distance(…).

Структура нашего процедурного файла имеет следующий вид

//процедурный файл Prog1

DEFINE CLASS my1 AS CUSTOM

X = 0

Y = 0

FUNCTION Max

PARAMETERS X, Y

IF (X > Y)

Max = Y

ELSE

Max = Y

END IF

RETURN Max

ENDFUNC

ENDDEFINE

PROCEDURE prog1

t = CREATEOBJECT (‘my1’)

t. X = 10

?t. max(50, t. X)

RETURN

ENDPROC

Рассмотрим теперь, как создать объекты на основе визуальных классов. Следующий пример используем как иллюстрацию

DEFINE CLASS Frm AS FORM

Height = 180

Width = 260

ADD OBJECT MyBtn AS COMMANDBUTTON;

Width Caption = "HelloBtn", BackColor = 2

PROCEDURE MyBtn. Click

= Messagebox(‘Hello’)

ENDPROC

Procedure Init

= Messagebox(‘Hello from Init’)

ENDPROC

ENDDEFINE

PROCEDURE prog2

t = CREATEOBJECT(‘frm’)

t. ADDOBJECT(‘LBL’, ‘Label’)

t. LBL. Caption = ‘Hey’

t. LBL. Top = 100

t. LBL. VISIBLE = .T.

t. Show

READ EVENTS

RETURN

ENDPROC

В этом примере определяется визуальный класс Frm на основе базового класса FORM. Строка Heigth = 180, Width = 160 задает размеры формы. Затем в описании класса Frm в него добавляется кнопка MyBtn с такими параметрами: Caption = ‘HelloBtn’, BackColor = 2. Для кнопки MyBtn описывается процедура Click, которая запускается при нажатии мышью на эту кнопку. В результате на текущей (активной) форме печатается строка Hello. Далее описывается процедура Init. Эта процедура уже относится не к кнопке MyBtn, а к форме Frm. Указанием на это служит тот факт, что первая процедура именуется как MyBtn. Click с указанием имени кнопки перед Click; в то же время процедура Init не содержит ссылки на какой-нибудь присоединенный объект. Процедура Init запускается один раз при инициализации формы.

Наконец, в тексте основной процедуры Prog2 выполняется создание формы (переменная T) и ее визуализация.

В этом примере мы познакомились с командой ADD OBJECT, которая добавляет новый объект-контейнер (типа формы), в то время как CREATEOBJECT создает объект ранее описанного класса.

Теперь нам остается рассмотреть, как создавать классы с помощью конструктора классов.

1.2. Создание классов с помощью конструктора

В диспетчере проектов выберите вкладку Class и нажмите кнопку New. Появится диалоговое окно, в которое вам нужно ввести имя создаваемого класса, имя базового (родительского) класса и имя библиотеки (расширение. VCX), в которой должно быть сохранено описание класса. Затем нажмите кнопку ОК и запустится конструктор класса. Основные действия при проектировании класса сводятся к следующим:

1. Добавить в класс объект;

2. Добавить в класс свойство;

3. Добавить в класс метод.

Элементарно добавить в класс новое свойство. Для этого выберите пункты меню в последовательности Class/New/Property. Остается указать только имя свойства и его характер Public, Protected или Hidden (заметим, что тип свойства не указывается). Не менее элементарно добавляется новый метод: Class/New/Method.

Чтобы запрограммировать новый метод, нужно найти его имя в окне Property и дважды щелкнуть мышью по этому имени.

Отметим, что добавление в класс объектов возможно, если класс объявляется контейнером, т. е. Может содержать объекты. Добавление в класс объектов реализуется щелчком мыши по нужному визуальному объекту из окна Form Controls.

Редактирование класса осуществляется выбором пунктов меню Class/Class Info. В окне класса выберите нужное имя свойства или метода и нажмите кнопку Modify.

Другой способ доступа к членам класса осуществляется через меню Tools/Class Browser.

2. ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ

Создайте собственный класс для добавления, удаления и просмотра записей вашей базы данных.

3. ВОПРОСЫ

1. Что такое класс? Что такое объект? Какая между ними разница?

2. Как программно описать класс?

3. Как программно создать объект?

4. Как обращаться к методам и свойствам объектов?

5. Расскажите о работе конструктора классов.