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

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

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

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

Добавлен: 21.10.2020

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

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

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

ние требуемого типа, а

 Let имеет структуру процедуры, которой пере-

даются аргументы.) Строка 22 демонстрирует, как данные, которые предполагается при-

своить переменной FEmailAddress, подвергаются незаметной для пользователя провер-
ке. Следующая строка иллюстрирует возможную операцию присваивания:

 =

В этот момент выполняется код строки 22, вызывающей процедуру ValidateE-

 которой передается значение параметра

(Обратите внимание, что процедура ValidateEmailAddress объявлена выше, в стро-
ках

 как скрытый (Private) член класса.) Если результат проверки успешен, в

строке 23 значение присваивается внутренней переменной FEmailAddress.

Методы Property, будучи простыми в использовании, предоставляют широкие

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

Еще одно преимущество механизма обращения к свойствам класса посредством

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

тода Let. Если же необходимо, чтобы пользователь, наоборот, мог только присваивать

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

 Private, а для доступа к

ним предлагайте пары соответствующих методов Get и Let. Концепция методов

Property весьма эффективна, и именно благодаря ей получили развитие средства ви-

зуального программирования и быстрой разработки приложений.

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

Среди свойств классов могут быть как переменные простых типов, так и объекты

других классов. Конструкция объявления метода Property, используемого для чтения

содержимого переменной простого типа или объекта, снабжается служебным словом
Get. При создании Property-методов, предназначенных для присваивания значений
свойствам простых типов, используется служебное слово Let. Но его нельзя употреб-
лять, если речь идет о свойстве, представляющем собой объект класса. В этом случае
применяется служебное слово Set.

Таким образом, Set заменяет Let в тех случаях, когда в качестве свойства исполь-

зуется объект класса. Например, чтобы построить несколько Property-методов для
доступа к свойству, представляющему собой объект класса Collection, следует упот-
ребить служебные слова Get и Set.

Статические свойства

Создавая класс, вы определяете пользовательский тип. Построив экземпляр класса,

вы получаете объект этого типа. Каждый объект обладает собственным набором всех
элементов данных (свойств) и методов класса. Поэтому для двух объектов класса Con-
tact — скажем, MyContact и

 — выражения

 и YourCon-

tact

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

Разница между классами и объектами примерно такая же, как между и

клонами. ДНК — это набор генов, а каждый отдельный набор генов —
это клон. Класс — это ДНК, а объект — клон.

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


background image

Статические члены класса отличаются от остальных и периодом "жизни". Обыч-

ные свойства и методы доступны только после создания объектов класса и исключи-

тельно в контексте последних. Но к статическим членам класса разрешается обра-

щаться и в отсутствие объектов. Листинг 21.6 демонстрирует пример использования

статического члена класса.

Листинг 21.6. Пример объявления и использования статического члена класса

1: Static Property Get

 ) As Integer

2: Dim ID As Integer

 ID

 = ID + 1

4:

 = ID

5 : End Property

При каждом выполнении программы, содержащей данный код, значение

переменной ID увеличивается на 1. Это значение хранится в период
между обращениями к

Статические атрибуты класса допускают самое разнообразное применение и ока-

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

торов

 базы данных или экземпляров класса.

Используйте

 Static на уровне свойства, когда требуется, чтобы все

переменные свойства были статическими.

Обработчики событий создания

и удаления объекта

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

пользовать для задания последовательности действий, выполняемых в ответ на события

инициализации и удаления объекта. Процедура инициализации обрабатывает событие
создания объекта, а код обработчика события удаления объекта вызывается, когда пере-
менной-объекту присваивается значение Nothing. Эти процедуры срабатывают только в
том

 если в них содержится какой-либо код. Явно вызывать их не следует.

Подпрограммы обработки событий создания и удаления объекта носят стандарт-

ные названия

 и

 Чтобы получить возможность

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

1. Откройте окно редактора Microsoft Visual Basic.

2. Выберите существующий или создайте новый модуль класса.
3. Откройте список Object, расположенный в левой верхней части окна (в нем изна-

чально отображается слово

 и выберите элемент Class (рис. 21.1).

4. Откройте список Procedure, находящийся в правой верхней части окна

(см. рис. 21.1), и выберите один из элементов — Initialize или Terminate — в зависи-
мости от того, обработкой какого события, создания объекта либо его удаления вы

намерены заниматься.

В результате выполнения указанной инструкции вы получите пустой шаблон обработ-

чика. Остается самая малость — наполнить его. Процедура

 — как раз

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

создания объекта, срабатывать раньше других блоков кода и/или действовать только один
раз. Код процедуры

 выполняется в последнюю очередь, непосредствен-

но перед удалением объекта из памяти. Естественно, он также срабатывает один раз.

 час. Основы программирования классов

391


background image

 •

a Mi

3

 I

 fts

а

If

 > 0} Then

 - I

 Sab

 Sab

 String)

 1000,

End Sab

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

 Basic позволяет быстро составить шаблоны

 системных событий создания и удаления объектов класса

Названия рассмотренных именованных блоков кода достаточно

 — про-

цедура

 удобна для выполнения некоторых операций инициализа-

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

 разделе.

Создание нового класса

Натоящий раздел посвящен рассмотрению примера построения реального и — с

моей точки зрения — полезного. Класс, которому дано название FileStream, реали-

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

Листинг 21.7. Класс, реализующий операции файлового потокового

Option Compare Database

'

 -- Defines a

 streaming class

' Copyright © 1999. All Rights Reserved.
' By Software Conceptions, Inc.

 Written by Paul

 Okemos, MI USA 800-471-5890

Option Explicit

392

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


background image

7: Private FFileName As String

 Private FHandle As Double

9: Private Type Buffer
10: S As String

 Type

 Property Get

 ) As Long

 Count = FileLen( FileName )

 Property

 Property Get

 ) As String

16: FileName = FFileName

 Property

 Property Let

 Value As String )

19: FFileName = Value

 Property

 Property Get

 ) As Double

22: Handle = FHandle

 Property

 Property Get

 ) As Long

25: Position =

 FHandle )

 Property

 Property Let

 ByVal Value As Long )

 Call

 Value )

 Property

 Private Sub

 ByVal FileName As String )

31: If (FileExists( FileName ) = False) Then
32:

 1, Me, "Invalid filename

 & FileName

33: End If

 Sub

 Sub

 )

 FHandle = 0

 Sub

 Sub

 )

39: Close
40: FHandle = 0

 Sub

 Function

 FileName As

 As Boolean

43: FileExists =

 FileName ) ) > 0

 Function

 Sub OpenStream( ByVal FileName As String )

46: FFileName = FileName

 FHandle = FreeFile

48: Open FileName For Random As

 Len = 1

 End Sub

 Sub

 Str As String, ByVal Length As Long)

51: Dim I As Integer
52: Dim Buf As Buffer

 For I = 1 To Length

54: Get

 , Buf

55: Str = Str +
56: Next I

 Sub

 Sub

 ByVal Length As Long )

59: On Error GoTo EXCEPT
60: Seek

 Length

61: Exit Sub

63: If (Length = 0) Then Resume Next

 час. Основы программирования классов 393


background image

64:

 Sub

 Sub

 Str As String )

 Dim I As Long

68: Dim Buf As  B u f f e r
69: For I = 1 To Len( Str )
70:

 =

 Str, I, 1 )

71: Put

 , Buf

72: Next I

 Sub

Класс

 содержит определения всех методов, необходимых для

выполнения операций чтения и записи файловых данных. Класс содержит
четыре свойства: Count,

 Handle и Position. Handle и Count —

это переменные, которые позволяют только чтение, а также предназначены

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

FileName — имя файла, a Position — текущее значение позиции внутри

файла, относительно которой будет выполняться очередная операция чтения
или записи данных. Property-метод Position позволяет свободно переме-
щаться внутри файла при считывании/записи информации.

В составе класса определено восемь методов: CheckFile, Class_Initialize,

 FileExists, OpenStream,

 и

 Check-

File — это внутренняя процедура, в отсутствие файла открывающая окно сообщения об

ошибке. Обработчик

 выполняет инициализацию переменной FHan-

 предназначенной для хранения номера открытого файла. Метод CloseStream за-

крывает файл, заданный номером FHandle. FileExists обеспечивает непосредственное
выполнение проверки существования файла. Процедура OpenStream, получающая имя
файла, сохраняет его во внутренней переменной и открывает файл в режиме Random.

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

Применяемые в совокупности, перечисленные выше методы позволяют комплекс-

но решать задачи управления файловым вводом-выводом. Листинг 21.8 демонстрирует
пример практического использования класса FileStream.

Листинг 21.8. Пример использования класса FileStream

 Sub

 )

2: Dim Stream As New FileStream
3: Call

 )

4: Call

 "Это тестовый пример" )

5: Call

 Set Stream

 Nothing

7 : End Sub

[ Строка 2 листинга 21.8 содержит конструкцию объявления и создания объ-
I

 Stream класса FileStream; при этом срабатывает процедура

Class_Initialize. При выполнении строки 3 открывается файл с име-
нем

 Команда строки 4 осуществляет запись данных в файл, а в

строке 5 файл закрывается. Строка 6 содержит директиву удаления объекта

394

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