Universal Network Objects (UNO)
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
- https://www.openoffice.org/api/docs/common/ref/com/sun/star/text/XTextRange.html
- https://www.openoffice.org/api/docs/common/ref/com/sun/star/text/XTextRange-xref.html
Voorbeeld: XTextRange
Bronnen
- https://en.wikipedia.org/wiki/Universal_Network_Objects
- http://www.pitonyak.org/oo.php - Hoofdstuk 10: Universal Network Objects