Universal Network Objects (UNO)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

Universal Networks Objects (UNO) is het component model van OpenOffice en LibreOffice. Het is interface-based.

UNO biedt interoperabiliteit tav.

  • Meerdere programmeertalen (wo. Python)
  • Objectmodellen
  • Operating systems
  • Localisatie: Binnen één computer of binnen een LAN of over internet.

Practischer: UNO is de verzameling van objecten die tezamen een OO- of LO-document vormen.

Voorbeelden van UNO-toepassingen:

  • Een extern programma dat een ODT-bestand omfietst naar een PDF-bestand
  • Apps zoals Docvert, JODConverter en unoConv
  • Zelf-ontwikkelde add-ons die onderdelen toevoegen aan menu's en toolbars binnen OpenOffice/LibreOffice.

Inleiding: Componenten & interfaces

Component-based software engineering (CBSE of CBD) houdt zich bezig met de separation of concerns.Componenten communiceren met elkaar middels interfaces

Ooit heb ik een order-administratiesysteem ontwikkeld, en dat was hier misschien een goed voorbeeld van:

  • Componenten: Het bevatte oa. de componenten orders en facturen. Zo'n component bestond uit een verzameling tabellen, schermen, rapporten en modules met basic-programmeerroutines
  • De interface tussen componenten bestond uitsluitend uit database-tabellen. Er werd dus geen gebruik gemaakt van bv. globale variabelen om zaken te communiceren, en schermen waren niet van elkaar afhankelijk. Het maakte voor een factuur-scherm dus niet uit of het order-scherm wel of niet geopend was. Daarnaast was de interface state-less: De status van een object werd binnen zo'n database-record bijgehouden. Er hoefde dus nergens onthouden te worden of een bepaald scherm net was geopend of gesloten
  • Encapsulation: Componenten interacteerden met elkaar via tabellen (je kunt bv. alleen factureren aanmaken voor orders met status 'definitief'). Ze hoefden dus geen rekening te houden met elkaars interne werking
  • Loosely coupled: In eerdere versies van dit systeem, waren componenten nogal tightly integrated: Als ik in component x iets aanpaste (bv. de naam van een routine), dan ging er in component y iets mis. Uiteindelijk is dit omgefietst tot een loosely coupled systeem
  • Used interface: Op een dag kwam er een nieuw component bij: voorraadbeheer. Dat maakte gebruik van de al bestaande used interface. In dit geval die van producten. Ik vermoed dat voorraadbeheer werd geïntegreerd in de bestaande product-tabel. Da's vermoedelijk dan weer een voorbeeld van tightly-integrated - Sois.

Objecten & benaming

OOME 4.: p. 239:

OOo objects have long names such as com.sun.star.beans.PropertyValue; 
in the text I usually abbreviate the name and simply write 
PropertyValue, but your macros must use the full name.
  • Ik denk dat de term object hier losjes gehanteerd wordt. Dus niet zoals in object orientation, maar meer zoals een willekeurig ding
  • Beans heeft hier betrekking op de module beans. De naam is afkomstig uit Java

Modules & entiteiten

UNO lijkt uit modules te bestaan. Modules bestaan uit verschillende entiteiten (objecten is hier een onhandige naam).

Voorbeeld com.sun.star.text:

  • Nested Modules
  • Services
  • Interfaces
  • Structs
  • Exceptions
  • enums
  • Typedefs
  • Constant Groups.

Voorbeeld van een nested module van com.sun.star.text, is com.sun.star.text.fieldmaster. Deze bevat maar één entiteit: Services.

Bibliography is één van de services van fieldmaster. Deze service heeft een aantal properties. Dat lijken functies en eigenschappen te zijn.

Structs

Structs zijn custom-defined data-types. Ze hebben eigenschappen maar geen methodes. Ze kunnen meerdere waardes aan één variabele toekennen.

Voorbeeld com.sun.star.beans - Struct PropertyValue:

Dim aProp(4) As New com.sun.star.beans.PropertyValue
aProp(0).Name  = "FirstName"   'Set the Name property
aProp(0).Value = "Clyde"       'Set the Value property

Services

Services lijken (interne) functionaliteiten te zijn. Ze zijn alleen zichtbaar, als er exported interfaces voor bestaan.

Voorbeeld: com.sun.star.text.TextRange. Eén van de exported interface is XTextRange.

Interfaces

  • UNO-interfaces bestaan uit functies (objecten?) met bijbehorende argumenten en return types. En iets met methods
  • Interfaces beginnen met een hoofdletter X.

Voorbeeld: XTextRange

Volledige naam

com.sun.star.text.XTextRange

Functie

Specifies a section of text with both a start and end position.

Objects that support the XTextRange interface are also used to identify an object’s position in text document. The start and end positions may be the same.

Methods

* getText()      - Return the com.sun.star.text.XText interface that contains this XTextRange.
* getStart()     - Return a com.sun.star.text.XTextRange that references only the start position.
* getEnd()       - Return a com.sun.star.text.XTextRange that references only the end position.
* getString()    - Return a string that includes the text inside this text range.
* getString(str) - Set the string for this text range, replacing existing text and clearing all styles

Bronnen

Voorbeeld: XTextRange

Bronnen