Створення призначених для користувача класів в access - програмні продукти

загальні визначення

Спочатку визначимося: що ж таке об'єкт в розумінні об'єктно-орієнтованого програмування. У найпростішому (життєвому) розумінні об'єкт - це якась річ, і так само як і в навколишньому світі, об'єкт має властивості ( "камінь твердий") і операції, які виконуються над цими властивостями (камінь можна розбити). Майже так само йде справа і з об'єктами в світі програм. Наприклад, в якості об'єкта можна розглядати файл, як властивості - його розмір або ім'я, а в якості операцій - читання або запис. Отже, є об'єкт і є властивості - що ж є операцією? Будь-яка призначена для користувача процедура або функція, що змінює або просто працює з властивостями об'єкта. Наприклад, процедура ініціалізації полів записи або процедура виведення на екран значення полів. Виникає природне бажання об'єднати дані і способи їх обробки в одне ціле, так щоб було ясно, які процедури призначені для обробки певних даних. Таким чином, ми впритул підійшли до центральних понять об'єктно-орієнтованого програмування - поняттям інкапсуляції і класу.

Інкапсуляція і класи

Об'єктно-орієнтоване програмування (далі ООП) - найбільш популярна в даний час методологія програмування, що є розвитком структурного програмування. Центральною ідеєю ООП є інкапсуляція, т. Е. Структурування програми на модулі особливого виду, які об'єднують дані і процедури їх обробки, причому внутрішні дані модуля можуть бути оброблені тільки передбаченими для цього процедурами. У VBA прийнято назву модуль класу або просто клас. Кожен клас має внутрішню частину, яка називається реалізацією, і зовнішню частину, яка називається інтерфейсом.
Клас таким чином, являє собою новий тип даних, що дозволяє створювати нові змінні цього типу - об'єкти (іноді їх ще називають екземплярами класу). Об'єкт складається з елементів, які можуть бути як власне даними, т. Е. Значеннями певного типу даних, так і функціями, які реалізують операції над елементами - даними. Елементи - дані називаються властивостями класу, елементи - методами класу. Такий опис служить шаблоном для створення в програмі конкретних екземплярів (об'єктів) даного класу, свої конкретні імена.

вбудовування

Механізм вбудовування дуже зручний і природно. Прабатько сімейства класів може задавати деякі фундаментальні властивості і методи, а численні нащадки, маючи батьківські корені (властивості і методи), привносять власні вузькоспеціальні властивості і методи.

спадкування

Поряд зі встраиванием, є ще один спосіб використовувати існуючі класи при створенні нових, він називається спадкуванням. При спадкуванні вказується, що новостворюваний на основі класу А клас В містить всі (або деякі) методи і властивості класу А. а також свої власні методи і властивості. Різниця між встраиванием і спадкуванням тільки синтаксичне. При встановленні, що використовується в VBA для посилання на метод або властивість вбудованого класу, ми використовуємо ім'я поля цього класу. При спадкуванні (характерному для С і C ++) ім'я властивості або методу батьківського класу можна використовувати безпосередньо.

створення класу

Синтаксично класи в VBA оформляються у вигляді спеціальних модулів класів (ім'я класу - це ім'я модуля), де в розділі Declarations поміщається опис властивостей (змінних) класу, а далі йде опис методів (процедур) класу. Синтаксично опису властивостей і методів практично не відрізняються від опису звичайних змінних і процедур. Випадки відмінності або особливостей вживання будуть обговорені окремо. Для створення модуля класу в Access необхідно у вікні бази даних виконати наступні дії:

Insert - Class Module - "Ім'я класу"

Слід вибрати для класу таке ім'я, яке легко буде розпізнаватися, і відображати інформацію про те, які об'єкти описує даний клас об'єктів.

процедури класу

В Access всі процедури класу діляться на три групи:

  1. процедури - методи
  2. процедури - властивості
  3. процедури - реплікації на події

Процедури - методи

Процедури - властивості

Як відомо, визначення класу в VBA складається з двох розділів: реалізації та інтерфейсу. Одна з найбільш важких завдань для програмістів - новачків в ООП полягає у визначенні того, які члени класу робити закритими (включати в розділ реалізації), а які, навпаки, відкритими (включати в розділ інтерфейсу). Загальним правилом можна вважати те, що чим менше програмі відомо про реалізацію класу, тим краще, тому що. Е. Бажано приховати за допомогою ключового слова Private якомога більшу кількість властивостей класу в розділ реалізації, а доступ до властивостей здійснювати через спеціальні Public - методи, що організують інтерфейс класу.
Приховування інформації (інкапсуляція) - це приховування деталей реалізації функцій, класу або навіть програми. В умовах приховування інформації програміст працює з функціями і класами як з чорними ящиками. Іншими словами, передаючи функції деяке значення в формі вхідного параметра, програміст знає лише результат, який буде отриманий на виході цієї функції. Приховування інформації в реалізаційну частину класу і доступ до неї через функціональний інтерфейс підвищує надійність програми. Є два способи створення властивостей:

  1. Простіший з них полягає в створенні в розділі описів модуля класу змінної, оголошеної за допомогою ключового слова Public. Таким чином, користувачі об'єкта отримають можливість встановлювати і отримувати значення, яке зберігається в цієї змінної. (Іншими словами, властивість доступно як для читання, так і для запису). Ім'я змінної визначається ім'ям властивості, яке використовується у вашій програмі, тому, як і в разі імен класів, слід застосовувати імена, що відображають вміст змінних. Хоча використання загальних змінних для визначення властивостей є найпростішим способом, у нього є кілька недоліків:

У створеного класу немає ніякої можливості визначити, коли зовнішній процес змінив значення властивості. Це може зіграти свою негативну роль в тому випадку, коли вам потрібно обмежити значення певним інтервалом або виконати будь - яку дію при зміні значення.

Неможливо накласти обмеження на значення властивості або виконати іншу перевірку даних. Наприклад, ви можете захотіти обмежити значення властивості, що представляє вік людини, позитивними дійсними числами.

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

  • Для того щоб впоратися з цими недоліками, слід використовувати другий спосіб створення властивості, а саме, створення властивості за допомогою процедури Property. їх всього три: Property Let, Property Set, Property Get. Розглянемо їх докладніше:

    Property Let - процедура запису, яка дозволяє привласнювати властивості нових значень

    [] [Static] Property Let імяПроцедуриСвойства ([спісокПараметров] значення)
    [БлокОператоров1]
    [Exit Property]
    [БлокОператоров2]
    End Property

    імяПроцедуриСвойства - це ім'я процедури, що змінює властивість. До речі, бажано, щоб ім'я повторювалося у всіх трьох процедурах-властивості, якщо вони мають справу з одним і тим же властивістю.

    СпісокПараметров - це список додаткових параметрів, що беруть участь в процедурі. Синтаксис списку параметрів абсолютно такий же, як і у списку в звичайній процедурі. Зверніть увагу на те, що всі три процедури-властивості, що мають одне і те ж ім'я, зобов'язані мати однаковий-вий список параметрів.

    значення - це найважливіший обов'язковий параметр, значення якого передається властивості.

    Далі йде блокОператоров. в якому слід провести присвоювання значення властивості значення фактичного параметра значення.

    [] [Static] Property Get імяПроцедуриСвойства
    ([СпісокПараметров]) As ТіпДанних
    [БлокОператоров 1]
    [ІмяПроцедуриСвойства = вираз]
    [Exit Property]
    [БлокОператоров 2]
    End Property

    Як видно, Property Get - це функція, і для неї діють все синтак-січескіе правила функцій. Нагадаємо лише одне: тип значення, що повертається функцією, повинен збігатися з типом значення вираження.

    Створення екземпляра класу

    Визначивши клас, задавши йому кілька властивостей і методів, можна використовувати його в програмі VBA. Але для цього спочатку необхідно створити новий екземпляр класу. Неможливо просто посилатися на змінні або викликати процедури модуля класу таким чином, як це робиться в стандартному модулі: VBA видасть помилку компіляції "Подпроцедура або функція не знайдено", так як можливості знайти процедуру в глобальному просторі імен не існує. Процедура залишиться "прихованої" до тих пір, поки ви не створите новий екземпляр класу, і тоді можна викликати її тільки як метод створеного екземпляра класу. Для створення нового екземпляра класу потрібно оголосити об'єктну змінну, яка використовується для зберігання посилання на створений екземпляр класу. Для змінних, застосовуваних для посилання на призначені для користувача класи, діють ті ж правила, що і для змінних, що посилаються на об'єкти VBA або додатки. Їх можна описати, використовуючи зарезервовані слова Dim. Private. Public і Global. Наступним кроком є ​​створення нового екземпляра об'єкта і збереження посилання на нього в змінної. Для цього використовується оператор Set в поєднання з ключовим словом New.

    Створення екземпляра класу. Ім'я класу User. ім'я екземпляра класу tmpuser.

    Dim tmpuser As User
    Set tmpuser = New User

    Зауважте, що типом даних в цьому прикладі є ім'я класу, яке було визначено раніше. Хоча такий синтаксис може здатися надмірною, для створення нового екземпляра об'єкта обов'язково потрібно використовувати ключове слово New в операторі Set. Якщо цього не зробити, то при спробі застосувати будь-яку властивість або метод цього класу, VBA видасть повідомлення про помилку виконання 91 - "Чи не задана об'єктна змінна або змінна блоку with". Для створення нового екземпляра об'єкта простого опису об'єктної змінної за допомогою оператора Dim недостатньо.

    Неявне створення екземпляра класу

    Dim tmpuser As New User

    Схожі статті