Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.10.2020

Просмотров: 7904

Скачиваний: 25

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 Property Let

 Name As String,

 Value As String)

39: On Error GoTo EXCEPT
40:

 = Name &

 & Value

41: Exit Property

 If

 = 5) Then

44:

 &

 Value)

45: Else
46: Call
47: End If

 Property

49:

 Function

 Name As String) As Integer

51:

 Dim I As Integer

53: For I = 1 To

 If

 Strings ( I

 Name) > 0) Then

55: IndexOfName = I

 Exit Function

57: End If

58: Next I
59:
60: IndexOfName = -1

 Function

 Sub

 As String)

64:

 Sub

66:

 Sub

 FileName As String)

68:

 Sub

70:

 Sub Class_Initialize ( )

72: Set FStrings = New Collection

 Sub

74:

 Sub

 )

76: Set FStrings = Nothing

 Sub

78:

 Sub

 Msg As String)

80:

 vbObjectError + 1000,

 Msg

 Sub

Как вы заметили, объем кода существенно вырос. Выбрав класс кол-

I лекций, мы значительно облегчили задачу программирования. Строка 5

содержит объявление переменной

 FStrings

 класса

 Collection.

Объект коллекции инициализируется в момент выполнения директивы

New

 (срабатывает процедура

 Class_Initialize,

 расположенная в

строках

 уничтожается он при выполнении команды присваи-

вания значения

 Nothing

 (автоматически выполняется процедура

Class Terminate,

 строки

22-й час. Совершенствование типов данных 405


background image

Если свойство Names выступает в роли правостороннего операнда выражения, вы-

зывается соответствующий Property-метод Get (строка 9), который возвращает часть
строки указанного индексом элемента коллекции от начала до символа равенства (=).
Если Names употребляется в левой части выражения присваивания, срабатывает

Property-метод Let (строки 15-21), перезаписывающий содержимое заданного эле-

мента коллекции символьной строкой, которая состоит из ключевого имени и значе-
ния, разделенных символом =.

Реализация свойства Strings претерпела изменения. Табл. 22.1 описывает Strings

как общую строку данных. В начале процесса

 класса у меня еще не

было предложений по поводу добавления строк в будущее "хранилище" и удаления

их. Поскольку в классе Collection подобные методы уже реализованы, достаточно
было оставить Property-метод Get Strings (метод Let Strings я исключил во из-
бежание непреднамеренного присвоения объекту коллекции нового значения типа

Collection) и возложить обязанности по изменению элементов коллекции на Prop-
erty-методы Let для свойств Names и Values. Может показаться, что указанные вы-

воды могут способствовать тому, чтобы "задним числом" исправить листинг

Но зачем? Он может послужить хорошей иллюстрацией методов работы, поддер-

живаемых парадигмой объектно-ориентированного программирования. На самом де-

ле, вполне приемлема и даже желательна практика непрерывного -

"диалектического" •- улучшения структуры и способов реализации класса по мере по-

стижения проблемы и осознания ее особенностей. В рамках объектно-

ориентированного подхода затраченные усилия, направленные на развитие и улучше-
ние программного кода, всецело "окупятся".

Рассматривая возможность использования

 Collection в ка-

честве свойства Strings в настоящем приложении, я бы сначала изме-
нил дизайн с целью реализовать методы Add и Remove как методы класса

Strings.

Использование в явном виде объекта Collection исключает

применение интерфейса класса Strings.

Еще несколько замечаний. Достаточно полезна специальная функция

(определенная в строках

 Она вызывается из строк 29 и 40 и возвращает ин-

декс элемента коллекции по значению ключевого имени.

Заслуживает внимания реализация обработчика ошибок в строках

 Если

Property-метод Let Value предпринимает попытку изменения такого элемента кол-

лекции, которого просто нет, выполняется условие обработчика ошибок в строке 43 и

вызывается стандартный метод Add добавления в коллекцию нового элемента. Все

другие обработчики просто констатируют ошибку и обращаются к процедуре

RaiseError, определенной в строках

Реализация функций файлового ввода-вывода

Для практического воплощения средств файлового ввода-вывода, предусмотренных

в интерфейсе класса Strings, целесообразно обратиться к готовому решению —
классу

 (мы его строили на прошлом занятии). Листинг 22.3 демонстриру-

ет ту часть кода класса Strings, которая содержит тексты процедур потокового выво-

да данных в файл и чтения их из файла. Если объединить тексты листингов 22.2 и

22.3 воедино, мы получим цельный интерфейс класса, предназначенного для реализа-
ции ассоциативного массива с поддержкой файловых операций.

406 Часть VIII. Объектно-ориентированное программирование в Access


background image

Листинг 22.3. Методы класса Strings, обеспечивающие выполнение файловых операций

1:
2:
3:
4:
5:

7:
8:
9:
10
11
12
13

14
15
16
17
18
19
20

21
22
23
24
25
26
27
28
29
30

31

33
34
35

36
37
38
39
40
41

Private Sub

 Text As String)

Dim P As Integer
Do While

 > 0)

P =

 Text,

If (P = 0)

Call
Exit Sub

Else

Call

 P -

Text =

 P +

End If

Loop

 Sub

 Sub

 As String)

; Clear
: Dim F As New
: Call
: Dim Text As String
; Call
: Call

Call

Set F = Nothing

 Sub

 Sub

 FileName As String)

: Dim I As Integer

: Dim F As New FileStream
; Call

 FileName )

: For I = 1 To

: Call

 I ) & vbNewLine)

: Next I

: Call
; Set F = Nothing
: End Sub

 Public Sub

: Do

 >0)

: Call
: Loop

 Sub

I Листинг 22.3 демонстрирует пример реализации методов ReadFromFile и
I WriteToFile. Добавьте этот текст в состав модуля класса Strings

(листинг 22.2) — и получите полнофункциональный вариант организа-

ции ассоциативного массива, снабженного средствами файлового ввода-
вывода. Листинг 22.3 содержит дополнительную процедуру ParseString,
осуществляющую считывание отдельных строк данных из общего тексто-

вого буфера и сохранение их в элементах коллекции. Разделителем строк
в файле служит предопределенная константа vbNewLine, состоящая из
пары символов возврата каретки и перевода строки. В процедурах Read-

FromFile и WriteToFile создаются и применяются объекты класса
FileStream, построенного на прошлом занятии. Еще одна процедура,
Clear, используется для проверки того факта, что в коллекции strings

находится только содержимое считанного файла.

22-й час. Совершенствование типов данных

407


background image

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

другой базе данных, выполните следующие действия.

1. Откройте необходимый модуль (в нашем случае —

 в окне редактора

Microsoft Visual Basic.

2. Выберите файл для экспорта (в нашем случае — FileStream.
3. Выберите команду

 File.

4. В диалоговом окне Export File (рис.

 введите имя файла и щелкните на кнопке

Сохранить (Save).

 3

 Projects

 S

 рисунки

i

 Диалоговое окно Export File позво-

ляет сохранить код класса во внешнем файле

Благодаря применению готовых классов Collection и FileStream задача реали-

зации класса Strings оказалась относительно простой. Агрегация позволяет исполь-
зовать средства существующих классов при создании новых. Возможности кода вы-
растают весьма ощутимо, но это слабо сказывается на его сложности. Причина в том,

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

Тестирование нового класса

Подобно любому новому профаммному коду, класс strings должен быть протес-

тирован. Однако класс Collection тестировать не нужно (впрочем, исходного кода у
вас все равно нет), да и наш собственный класс FileStream вряд ли нуждается в про-
верке — это уже сделано на прошлом занятии. При повторном использовании суще-
ствующего кода достаточно проверить точки его взаимодействия со строками нового.

Конечный итог повторного применения профаммного кода выражается в увеличе-

нии производительности труда профаммиста, уменьшении затрат на тестирование и
повышении степени надежности и функциональной полноты.

Листинг 22.4 содержит фрагмент кода, который можно применить для тестирова-

ния класса Strings.

Листинг 22.4. Процедура для тестирования класса Strings

1: Sub

 )

 Dim S As New Strings

 ) =

 )

408

Часть VIII. Объектно-ориентированное программирование в Access


background image

5: Call

 )

6: Call

 "Test.txt" )

 End Sub

Строка 2 листинга 22.4 содержит

 объявления и создания

объекта S класса strings. Строки 3 и 4 тестируют правильность выпол-
нения функции

 Property-метода Let Values и обработ-

чика ошибок в нем, поскольку выражения содержат обращения к эле-

ментам коллекции, которых еще нет (в этом случае элементы будут соз-

даны). Строка

 5

 проверяет средства записи данных в файл, а строка 6 -

их чтения. Строка 7 позволяет увидеть содержимое считанного из файла

элемента коллекции с номером 1 в окне сообщения. Тестовый код спо-
собен выявить немало ситуаций, о которых вы даже не подозревали.

Применение класса Strings

Класс Strings может оказаться особо нужным в тех случаях, когда необходимы

средства организации доступа к значениям по ключевым именам. В Windows, напри-

мер, все еще находят широкое применение файлы INI, содержащие информацию о

параметрах настройки приложений. Ассоциативный массив в виде объекта коллек-

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

формации как по индексам, так и по ключевым именам.

В главе "8-й час. Декомпозиция задач" вы изучили процедуры Get Set-

tings и SaveSettings, позволяющие выполнять чтение реестра и запись
в реестр. Эти методы работы с реестром более предпочтительны для

сохранения информации о приложении, чем использование

Класс Strings полезен для хранения ассоциативных данных, которые

должно отслеживать приложение. Однако не рекомендуется использовать

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

этой цели методов.

Для чтения и записи INI-файлов существуют API-процедуры — Get-

PrivateProfileString И

 Как уже

отмечалось, предпочтительнее работать с реестром, в этом случае

указанные API-процедуры не понадобятся.

Резюме

На этом занятии на примере класса strings вы изучили способы построения кол-

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

значениям и ключевым именам. Что еще более важно — вы усвоили основные аспек-

ты объектно-ориентированного проектирования и методы повторного применения

существующего кода при построении новых классов. Достаточно приложить неболь-

шие усилия — и за счет добавления простых проверенных решений класс приобретает

новые полезные качества.

Вы убедились, как включение существующего кода в состав нового класса помога-

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

класса Strings мы воспользовались ранее созданным классом

 обеспе-

чивающим средства выполнения файловых операций.

22-й час. Совершенствование типов данных 409