Головна
Лекції
Завдання
Побажання
Гостьова
Лінки
Лекція №10 Лекція №8  Скачати лекцію

Access 9

Основи програмування класів

Робота з модулем класу нічим не відрізняється від звичних прийомів використання звичайних модулів. Єдина особливість полягає в тому, що закінчені фрагменти коду звичайних модулів незалежні, а вміст модуля класу трактується Access, як єдине ціле. Щоб використати клас в програмі, необхідно побудувати екземпляр (обєкт) класу.

Dim Strings As New Collection

Вводячи код в модулі класу, ви визначаєте структуру класу. Щоб побудувати простий клас, виконайте наступні дії.

  1. Відкрийте базу даних або створіть нову.
  2. Оберіть елемент Модули в списку Объекты та клацніть на кнопці Создать панелі інструментів.
  3. Введіть текст тестового модуля та збережіть його.
  4. Не закриваючи вікно редактора, оберіть команду меню Insert Þ Class Module, щоб створити новий модуль класу та додати його в базу даних.
  5. Введіть текст нового модуля класу та збережіть його.
  6. Виконайте тестовий модуль.

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

Attribute VB_Name = "Test"

Option Compare Database

Sub TestMyClass()

Dim MyFirstClass1 As New FirstClass

MyFirstClass1.Greetings

Set MyFirstClass = Nothing

End Sub

Лістинг. Модуль класу FirstClass

VERSION 1.0 CLASS

Option Compare Database

Sub Greetings()

MsgBox "Hello!"

End Sub

Цей клас містить єдиний метод – процедуру Greetings.

 

В VBA клас являє собою модуль, подібний до інших модулів. Але, якщо ви схочете експортувати вміст зичайного модуля у зовнішній файл – він отримає розширення .BAS ,в той час як модулі класів мають розширення .CLS.

В класі VBA допускаються два ступені доступності його атрибутів. Перший позначається службовим словом Public, a другий – Private. Оголошенням властивості або методу кваліфікатором Private, ви вказуєте, що це внутрішній атрибут класу і користувачам не потрібно про нього турбуватися. Якщо оголошення даних обо методув позначені сложбовим словом Public, вони входять у склад зовнішнього інтерфейсу класу та призначені для загального використання. Кваліфікатори Public та Private в конструкціях оголошення класів вказуються першими.

Дані та методи, оголошені в складі класу, часто називають інтерфейсом класу. Якщо на початку конструкції оголошення члена класу використовується службове слово Public, то кажуть, що такий член слугує частиною зовнішнього інтерфейсу. Якщо ж член класу оголошений із застосуванням кваліфікатора Private, він стає частиною внутрішнього інтерфейсу класу. Створивши об’єкт класу, навіть ви, автор та повноправний володар цього класу не зможете отримати доступ до його внутрішнього інтерфейсу. Якщо ж ви все ж таки спробуєте звернутись до приватного члена за межами модуля класу, то отримаєте повідомлення Method or data member not found (метод або член-елемент даних не знайдено). Новий клас повинен бути незалежним блоком коду. При роботі над класом, ви концентруєте увагу на коді класу в цілому, але при його використанні достатньо звертатися тільки до атрибутів зовнішнього інтерфейсу.

Методи класу – це процедури та функції. Вони оголошуються та будуються в межах модуля класу.

Лістинг. Розширений варіант класу FirstClass

Option Compare Database

Option Base 0

Option Explicit

Enum LanguageType

tEnglish

tEspanol

tDeutsch

tRussian

End Enum

Public Sub GreetingsDeutsch()

MsgBox GetGreetingsText(tDeutsch)

End Sub

Public Sub GreetingsEspanol()

MsgBox GetGreetingsText(tEspanol)

End Sub

Public Sub GreetingsEnglish()

MsgBox GetGreetingsText(tEnglish)

End Sub

Public Sub GreetingsRussian()

MsgBox GetGreetingsText(tRussian)

End Sub

Private Function GetGreetingsText(ByVal Language As LanguageType) As _

String

GetGreetingsText = Array("Hello!", "Buenoz Diaz!", "Guten tag!", "Привет!") _

(Language)

End Function

В класі тепер міститься перечислимий тип LanguageType. До складу класу входять загальні методи GreetingsDeutsch, GreetingsEspanol, GreetingsEnglish, GreetingsRussian, а до його внутрішнього інтерфейсу входить функція GetGreetingsText, яка присвоює потрібне значення.

Тестовий модуль.

Option Compare Database

Sub TestMyClass()

Dim MyFirstClass1 As New FirstClass1

MyFirstClass1.GreetingsEspanol

Set MyFirstClass1 = Nothing

End Sub

 

Властивості (Property) використовується для збереження даних в складі класу; їм легко в разі необхідності поставити у відповідності спеціальні методи того ж класу, які позначаються службовим словом Property та призначені, зокрема, для виконання автоматичної корекції даних. Методи Property мають власний унікальний синтаксис. Один з методів використовується для читання значень відповідної властивості, а інший – для їх запису.

В лістингу класу Contacts, в якому визначені дві властивості Name та EmailAddress та відвовідні їм пари методів Property.

 

Лістинг. Приклад класу Contacts, що містить визначені методів Property.

Private Fname As String

Private FEmailAddress As String

Property Get Name() As String

Name = Fname

End Property

Property Let Name(ByVal Value As String)

Fname = Value

End Property

Property Get EmailAddress() As String

EmailAddress = FEmailAddress

End Property

Private Sub RaiseError(ByVal Message As String)

Call Err.Raise(vbObjectError, "Contact", Message)

End Sub

Private Sub ValidateEmailAddress(ByVal EmailAddress As String)

Const Message = "Неверный почтовый адрес"

If (InStr(1, EmailAddress, "@") = 0) Then _

RaiseError (Message & EmailAddress)

End Sub

Property Let EmailAddress(ByVal Value As String)

Call ValidateEmailAddress(Value)

FEmailAddress = Value

End Property

Припустимо, що створено обєкт MyContact класу Contacts. Тоді до властивості Name можна звернутись за допомогою конструкції MyContact.Name.

Коли вона використовуєтся як правосторонній операнд – викликається Property –метод Get. Метод Let викликається у випадку, коли властивість використовують в якості лівостороннього операнда.

Лістинг. Використання класу Contacts

Sub testContacts()

Dim MyContact As New Contacts

MyContact.Name = "Nadiya Imenynnyk"

MsgBox MyContact.Name

MyContact.EmailAddress = "jn@ukrpost.net"

MsgBox MyContact.EmailAddress

End Sub

Зверніть увагу, що Property –метод Get оформлюється у вигляді функції, яка повертає значення потрібного типу, а метод Let має структуру процедури, якій передаються аргументи. Дані, що передбачається присвоїти змінній FemailAddress, піддаються непомітній для користувача перевірці.

Методи Property прості у використанні та надають широкі можливості керування даними. Вони також дозволяють коло можливих операцій, які можна виконувати із властивістю. Наприклад, щоб забезпечити доступ до змінної тільки за читанням, достатньо просто відмовити від визначення відповідного метода Let. Створюючи клас, оголошуйте всі властивості за допомогою кваліфікатора Private, а для доступу до них, пропонуйте пари відповідних методів Get та Let.

Використання властивостей обєктів. Серед властивостей класів можуть бути як змінні простих типів, так і обєкти інших класів. Конструкція оголошення метода Property, що використовується для читання вмісту зміннної простого типу або обєкту, використовує службове слово Get, При створенні Property-методів, призначених для присвоювання змінним властивостей простих типів використовується службове слово Let. Але його не можна використовувати, якщо мова йде про властивість, яка є обєктом класу. У цьому випадку застосовують службове слово Set.

Таким чином, Set замінює Let в тих випадках, коли в якості властивості використовується обєкт класу.

Статичні властивості. Створюючи клас, ви визначаєте користувальницький тип. Побудувавши екземпляр класу, ви отримуєте обєкт цього типу. Кожнтй обєкт має власний набір всіх елементів даних (властивостей) та методів класу. Тому для двох обєктів класу Contacts – наприклад, MyContact та YourContact – вирази MyContact.Name та YourContact.Name будуть, як правило, посилатись на два різних елементи даних.

До статичних членів класу, дозволяється звертатися у відсутність обєкту.

Приклад оголошення та використання статичного члену класу

Static Property Get UniqueId() As Integer

Dim ID As Integer

ID=ID+1

UniqueId=ID

End Property

При кожному виконанні програми, що містить даний код, значення змінної ID збільшується на 1. Це значення зберігається в період між звертаннями в UniqueId. Статичні атрибути класу допускають найрізноманітніше застосування, наприклад для зберігання унікальних ідентифікаторів таблиць бази даних або екземплярів класу. Використовуйте кваліфкатор Static на рівні властивостей, коли потрібно, щоб всі тимчасові властивості були статичними.

Лістинг Приклад створення класу Phones

Option Compare Database

Private FName As String

Private FPhoneNumber As String

Property Get PhoneNumber() As String

PhoneNumber = FPhoneNumber

End Property

Property Let PhoneNumber(ByVal Value As String)

FPhoneNumber = Value

End Property

Property Get Name() As String

Name = FName

End Property

Property Let Name(ByVal Value As String)

FName = Value

End Property

 

Використання класу Phones

Sub TestPhones()

Dim MyPhone As New Phones

MyPhone.Name = "Nadiya Imenynnyk"

MsgBox MyPhone.Name

MyPhone.PhoneNumber = "488-71-47"

MsgBox MyPhone.PhoneNumber

End Sub

 

Лекція №10 Лекція №8  Скачати лекцію

 

 

Hosted by uCoz