Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
билеты для экзамена (VBSE и Web-среда)2003.doc
Скачиваний:
5
Добавлен:
25.12.2018
Размер:
256 Кб
Скачать

22. Классы в vbse. Чд, методы и процедуры обработки событий, описание и применение свойств

Описание:

Class name

Описание ЧДК

Описание ФЧК (ПП)

End Class

Обработка событий

  • При создании ЭК имеет место событие Class_Initialize. ЧДК при обработке события недоступны

  • При удалении ЭК имеет место событие Class_Terminate. ЧДК при обработке события доступны

Пример: Class TestClass

Public X

Private Sub Class_Initialize

MsgBox (“TestClass started”& Is Empty (X))

End Sub

Private Sub Class_Terminate

MsgBox (“TestClass terminated “&Vbcrlf&” X = ”&(X)

End Sub

End Class

Set Y = New TestClass: Y.X = 1

Set Y = Nothing

Назначение процедур обработки событий

  • Class_Initialize – регистрация (учет) создания нового ЭК данного класса

  • Class_Terminate – регистрация (учет) уничтожения ЭК данного класса, корректировка значений связанных с данными ЭК величин (например, ссылок на данный ЭК)

Свойства

I. Пример класса со свойствами. Постановка задачи

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

II. Структура класса Pnt

Class Pnt

Private abscissa, ordinatus `Декартовые координаты

`Частный метод Empty ToZero

`Частный метод Вычислить Pi()

`Свойство X Записать и прочитать абсциссу

`СвойствоY Записать и прочитать ординату

`Метод LetRoPhi Записать полярные координаты

`Свойство прочитать ro

`Свойство прочитать phi

End Class

III.Частный метод Empty ToZero

Private sub Empty ToZero()

If IsEmpty (abscissa) Then abscissa = 0

If IsEmpty (ordinatus) Then ordinates = 0

End sub

IV. Частный метод Вычислить Pi()

Private Function Pi()

Pi = 22/7 `Оценка Архимеда

End Function

V. Свойство X Записать и прочитать абсциссу

Public Property Let X(value)

Abscissa = value

End Property

Public Property Get X()

X = abscissa

End Property

Свойство Y аналогично, только вместо X везде Y и ordinatus

VI. Метод LetRoPhi Записать полярные координаты

Public sub LetRpPhi (byVal ro, byRef phi)

Abscissa = ro*Cos(phi)

Ordinates = ro*Sin(phi)

End sub

VII. Свойство прочитать ro

Public Default Property Get Ro()

Empty ToZero

Ro = sqr(abscissa^2 + ordinates^2)

End Property

VIII. Свойство прочитать phi

Public Property Get Phi()

Empty ToZero

If abscissa < > 0 then

Phi = atn(ordinates/abscissa)

Else if abscissa = 0 And ordinates > 0 Then

Phi = Pi/2

Else if abscissa = 0 And ordinates < 0 Then

Phi = - Pi/2

Else if abscissa = 0 And ordinates = 0 Then

Phi = Null

End if

End Property

Испытания класса

Dim MtPnt

Set MyPnt = new Pnt: call mypnt.LetRoPhi (1, 0)

Z = “Ro =”& Cstr(myPnt)&vbcrlf

Z = z&”Phi =”& Cstr(myPnt.phi)

MsgBox z

MsgBox “X =”& Cstr(myPnt.X)& vbcrlf&”Y =” Cstr(myPnt.Y)

Mypnt.X = Mypnt.X + 1: Mypnt.Y = Mypnt.Y +1

MsgBox “X =”& Cstr(myPnt.X)& vbcrlf&”Y =” Cstr(myPnt.Y)

MsgBox mypnt.Ro

Mypnt.X = 0: mypnt.Y = 0

msgBox is Null (mypnt.phi)

Описание свойств. Считывание значения

<Модификатор> Property Get name [(arglist)]

[statements]

[[Set] name = expression]

[Exit Property]

[statements]

[[Set] name = expression]

End Property

<Модификатор> [Public [Default] | Private]

Описание свойств. Запись необъектного значения

<Модификатор> Property Let name ([arglist,] value)

[statements]

[Exit Property]

[statements]

End Property

<Модификатор> [Public | Private]

Описание свойств. Запись объектного значения

<Модификатор> Property Set name ([arglist,] ref)

[statements]

[Exit Property]

[statements]

End Property

<Модификатор> [Public | Private]