Access 9 Основи програмування класів Робота з модулем класу нічим не відрізняється від звичних прийомів використання звичайних модулів. Єдина особливість полягає в тому, що закінчені фрагменти коду звичайних модулів незалежні, а вміст модуля класу трактується Access, як єдине ціле. Щоб використати клас в програмі, необхідно побудувати екземпляр (об’єкт) класу.Dim Strings As New Collection Вводячи код в модулі класу, ви визначаєте структуру класу. Щоб побудувати простий клас, виконайте наступні дії.
Лістинг. Процедура для тестування класу FirstClassAttribute VB_Name = "Test" Option Compare Database Sub TestMyClass() Dim MyFirstClass1 As New FirstClass MyFirstClass1.Greetings Set MyFirstClass = Nothing End Sub Лістинг. Модуль класу FirstClassVERSION 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 (метод або член-елемент даних не знайдено). Новий клас повинен бути незалежним блоком коду. При роботі над класом, ви концентруєте увагу на коді класу в цілому, але при його використанні достатньо звертатися тільки до атрибутів зовнішнього інтерфейсу.Методи класу – це процедури та функції. Вони оголошуються та будуються в межах модуля класу. Лістинг. Розширений варіант класу FirstClassOption 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 викликається у випадку, коли властивість використовують в якості лівостороннього операнда.Лістинг. Використання класу ContactsSub 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
Використання класу PhonesSub TestPhones() Dim MyPhone As New Phones MyPhone.Name = "Nadiya Imenynnyk" MsgBox MyPhone.Name MyPhone.PhoneNumber = "488-71-47" MsgBox MyPhone.PhoneNumber End Sub
|