Основы офисного программирования и язык VBA


Методы - часть 2


Public Function Mult(a As Rational) As Rational Dim d As Integer, u As Integer, v As Integer Dim R As New Rational

u = m * a.Числитель v = n * a.Знаменатель d = nod(u, v) R.Числитель = u \ d R.Знаменатель = v \ d Set Mult = R End Function

Public Function Divide(a As Rational) As Rational Dim d As Integer, u As Integer, v As Integer Dim R As New Rational u = m * a.Знаменатель v = n * a.Числитель If v = 0 Then MsgBox ("деление на нуль невозможно") Else d = nod(u, v) R.Числитель = u \ d R.Знаменатель = v \ d Set Divide = R End If End Function

Public Sub PrintRational() Debug.Print (m & "/" & n) End Sub

Пример 4.5.

Замечание:

Внутри класса при реализации операций над рациональными числами доступ к закрытым свойствам объекта, естественно, разрешен, и можно обращаться непосредственно к переменным m и n. Однако нельзя обратиться к закрытым свойствам параметров класса Rational, передаваемых методам Plus, Minus, Mult, Divide. Точно также, нельзя обратиться к свойствам локальных объектов (объекту R), объявленных внутри методов. Единственный выход состоит в том, чтобы использовать для них Public Property Let и Public Property Get. Но тогда и вне класса можно использовать эти процедуры - свойства, изменяя, например, значение знаменателя дроби. Разрешать этого не хотелось бы.

На наш взгляд имеет место концептуальная некорректность поведения закрытых свойств. Внутри класса доступ к ним должен быть открыт не только для самого объекта, но и для объектов этого класса, заданных в качестве параметров методов класса. Точно также доступ должен быть открыт и для локальных объектов. Так поступают в большинстве языков программирования.

Приведем процедуру, которая работает с рациональными числами:

Public Sub WorkWithRational() Dim a As New Rational, b As New Rational, c As New Rational

a.CreateRational 5, 7 b.CreateRational -12, -18 Set c = a.Plus(b) c.PrintRational Set a = c.Minus(b) a.PrintRational Set c = a.Mult(b) c.PrintRational Set b = c.Divide(a) b.PrintRational End Sub

При ее запуске получены следующие результаты:

29/21 5/7 10/21 2/3




Начало  Назад  Вперед



Книжный магазин