Программирование >>  Проектирование интерфейса пользователя 

1 ... 124 125 126 [ 127 ] 128 129 130 ... 153


5: End Property 6:

7: Public Property Let Names(ByVal Index As Integer, ByVal Name As String)

9 : End Property 10:

11: Public Property Ge s (ByVal Index As Integer) As String 12:

13:End Property 14:

15: Public Property Le s (ByVal Index As Integer, ByVal Str As String)

17:End Property

19:Public Property Get Values(ByVal Name As String) As String 20:

21:End Property

23:Public Property Let Values(ByVal Name As String, ByVal Value As String)

25:End Property 26:

27:Public Su ByVal FileName As String)

29:End Sub

31:Public Sub WriteToFile(ByVal FileName As String)

33:End Sub

I В строках 1-33 листинга 22.1 определяется внешний интерфейс класса I strings, поскольку все методы снабжены квалификатором Public. Вы, разумеется, уже обратили внимание, что сами методы еще пе реализованы и класс пе содержит приватных членов. Вся оставшаяся часть работ1 будет выполнена далее.

Расширение возможностей существующих классов

Удачный способ построения нового класса заключается в расширении функциональных возможностей существующего. Если говорить о классе strings, отметим два

аспекта проблемы, требующих решения. Во-первых, нам необходима структура данных для хранения значений и, во-вторых, нужны способы файлового ввода-вывода этих даппых. Если ничего пе помешает, решения непременно будут пайдепы.

Использование коллекции для хранения данных ассоциативного массива

Класс Collection уже создан, и вполне пригоден для хранения символьной информации. Поэтому его можно рассматривать в качестве подходящей кандидатуры па роль хранилища даппых (строк, содержащих ключевое имя и значение) в классе



Strings. Решив использовать класс Collection, следует предложить способы добычи данных из него - в листинге 22.1 уже заготовлены определения соответствующих Property-методов. (Конечно, вместо коллекций можно было бы обратиться к средствам построения массивов, но в последнем случае мы создали бы себе лишние хлопоты - зачем?)

Включение объекта существующего класса в состав нового называют агрегацией. Чтобы воспользоваться возможностями коллекций в контексте проектируемого класса, необходимо объявить переменную типа Collection и предусмотреть ее инициализацию, т.е. выполнение операции создания объекта класса Collection. В данном случае переменная типа Collection будет объявлена как приватная. Для ее инициализации и очистки удобно воспользоваться средствамами стандартных обработчиков событий Class Initialize и ciass Terminate.

С учетом сказанного, код класса, знакомый по тексту листинга 22.1, нетрудно наполнить новым содержанием. Результат представлен в листинге 22.2.

Листинг 22.2. Расширенный вариант кода класса Strings

1: Option Compare Database 2: Option Explicit 3: Option Base 1 4: 5: б:

Private FStrings As Collection

7: Public Property Get ames (ByVal Index As Integer) As String

On Error GoTo EXGEPT 9: Names = Mid$(Strings(Index), 1,

InStr (1, Strings (Index) , = ) - 1)

Exit Property EXCEPT:

Gall RaiseError(Err.Description)

End Property

10 11 12 13

14 :

15 :Public Property Let Names(ByVal Index As Integer,

ByVal Name As String)

16 : On Error GoTo EXCEPT

17 : Strings (Index) = Name & = & Values (Names (Index) )

18 : Exit Property

19 :EXCEPT:

20 : Call RaiseError(Err.Description)

21-End Property 22

23 : Public Property Get Strings ( ) As Collection

24 : Strings = FStrings

25 .End Property 2 6

27 Public Property Get Values(ByVal Name As String) As String

28 : Dim Index As Integer

29 : Index = TndexOfName(Name)

30 : If (Index > -1) Then

31 : Values = Strings(Index)

32 : Values = Right$(Values,

Length(Values) - lnStr(l, Values, = ) )

33 34 35 36

Else

Call RaiseError(Name & не найдено ) End If End Property



38:Public Property Le (ByVal Name As String,

ByVal Value As String)

39: On Error GoTo EXCEPT

40: FStrings(IndexOfName(Name)) = Name & = & Value 41: Exit Property 42:EXCEPT:

43: Number = 5) Then

44: FStrings.Add(Name & = Value)

45: Else

46: Call RaiseError(Err.Description)

47: End If 48:End Property 49:

50:Public Function IndexOfName(ByVal Name As String) As Integer 51:

52: Dim I As Integer

53: For I = 1 To FStrings.Count

54:. If (InStr( Strings ( I ), Name) > 0) Then

55: IndexOfName = I

56: Exit Function

57: End If

58: Next I

60: IndexOfName = -1

61:End Function

63: Public Su ByVal FileName As String)

65:End Sub

67:Public Sub WriteToFile(ByVal FileName As String) 68:

69:End Sub 70:

71: Private Sub Class Initialize ( ) 72: Set FStrings = New Collection 73:End Sub 74:

75:Private Sub Class Terminate( ) 76: Set FStrings = Nothing 77:End Sub 78:

79: Private Sub RaiseError (ByVal Msg As String)

80: Err. Raise VbObjectError + 1000, Strings . els , Msg

81:End Sub

Как вы заметили, объем кода существенно в1рос. Выбрав класс кол-II лекций, мы значительно облегчили задачу программирования. Строка 5 содержит объявление переменной FStrings класса Collection. Объект коллекции инициализируется в момент выполнения директивы New (срабатывает процедура Class Initialize, расположеппая в строкам 73), уничтожается оп при выполнении команды присваивания значения Nothing (автоматически в1полпяется процедура Class Terminate, строки 75-77).



1 ... 124 125 126 [ 127 ] 128 129 130 ... 153

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика