Об’єкти UNO. Сервіси і інтерфейси.

Сучасні пакети офісних програм є продуктом об’єктно-орієнтованого програмування і, як наслідок, складними структурами різноманітних об’єктів: вікон, меню, панелей інструментів, робочих листів, комірок, діаграм і т. п. Кожен об’єкт має свої властивості, набір методів для відтворення та зміни цих властивостей та визначені події, що дозволяють запускати на виконання той чи інший метод. Пересічний користувач електронної таблиці, що вводить число 5,67 в комірку В3 і натискає клавішу “Enter” не замислюється над тим, що своїми діями він створює для цієї комірки певну подію, внаслідок якої комірка виконує відповідний метод, що змінює її властивість — вміст, в даному випадку. Якщо для ефективного використання програмного подукту розуміння його об’єктної структури не є таким вже і важливим, то для створення повнофункціональних макросів воно є просто необхідним. Володіння навичками роботи з об’єктною моделлю програми дає можливість перетворити макроси із засобів для розв’язання простих арифметичних задач на механізми, що дозволяють справді автоматизувати роботу її користувача.

Користувачам, знайомим з Visual Basic for Applications відомо, що кожен додаток Microsoft Office складається з ієрархії об’єктів, головним і якій є об’єкт Application, тобто, сама програма. Йому підпорядковані вікна, документи, робочі книги і ін., їм, в свою чергу панелі інструментів, діаграми, робочі листи і т. д. Кожен окремий об’єкт з’являється на основі загального шаблону — класу і є його представником. Наприклад, на основі загального класу Workbook (Робоча книга) під час створення нової книги в MS Excel генерується екземпляр робочої книги з назвою “Книга1”. Цей екземпляр є окремим об’єктом, з властивостями методами та поідями якого можуть працювати користувачі (і макроси також), хоча які саме властивості, методи та події матиме об’єкт визначає власне клас.

Об’єктна модель OpenOffice є, можна сказати більш “демократичною”. І більш складною, відповідно. В основі цієї об’єктної моделі лежить система універсальних мережевих об’єктів UNO (Universal Network Object), запровадження якої мало на меті уніфікувати роботу з об’єктами додатків в різних мовах програмування (Java, Ваsic, Python, С). Роль шаблону на основі якого генеруються об’єкти тут відіграє сервіс, який визначає тип об’єкта, його властивості, методи та події. Але в OOo Basic прийнято говорити “об’єкт підтримує сервіс”, а не “об’єкт є екземпляром сервісу” (як для класу у VBA), оскільки об’єкти UNO мають можливість підтримувати декілька сервісів одночасно, здебільшого завдяки тому, що деякі сервіси UNO, в свою чергу, можуть підтримувати інші сервіси. Крім сервісів в термінології UNO використовується поняття “інтерфейс”, воно позначає різні групи методів об’єкта, тобто, сервіси UNO можна розглядати як об’єднання різних інтерфейсів. В свою чергу, сервіси UNO об’єднуються в модулі і ім’я модуля потрібно вказувати при звертанні до сервісу. Так, наприклад, повна назва сервісу

com.sun.star.document.DocumentInfo
утворюється з назви модуля document та назви сервісу DocumentInfo (префікс com.sun.star стандарний для всіх UNO і вказує, що сервіс належить до OpenOffice.org). Окрім інтерфейсів, сервіси можуть підримувати ще й структури, які є наборами властивостей об’єктів, аналогічно як інтерфейси — наборами методів.

Вивчення структури UNO, вочевидь, є важливим для програмування на OOo Basic в тому сенсі, що дає можливість дізнатися якими методами володіє то чи інший об’єкт OpenOffice та які він має властивості. Проте на практиці в макросах OOo Basic назви сервісів зустрічаються вкрай рідко (а імена інтерфейсів не вживаються взагалі), оскільки в OOo Basic методи викликаються напряму від існуючого об’єкта.