Gruppen erlauben in Operno die Gruppierung von mehreren Objekten. Diese Objekte werden als Unterobjekte (engl. child objects) in der jeweiligen Gruppe gespeichert.
Diese Gruppen dienen gleichzeitig als Klassen, welche Träger von Klassen-Methoden und statischen Variablen sein können. Außerdem erhöhen sie die Geschwindigkeit von Operno, da Objekte strukturiert durchgesucht werden können.
Gruppen werden mit angehängten geschweiften Klammern definiert. In diesen geschweiften Klammern können optional Unterobjekte definiert werden. Auch Gruppen sind als Unterobjekte erlaubt, wodurch Verschachtelungen entstehen können.
Für Unterobjekte können auch Referenzen durch Kommata definiert werden. Dies gillt jedoch nur in Definitionen für Gruppen.
'Definition einer leeren Gruppe:
friends{}
'Sofort-Definition von Unterobjekten:
person{
name = "Larry"
age = 35
}
'Mit Referenzen:
pos{
x = 0 , left
y = 1 , top
width = 10, right
height = 8, bottom
}
Auf Unterobjekte einer Gruppe wird durch einen zurückgelehnten Schrägstrich (engl. backslash) zugegriffen. Das Unterobjekt steht nach dem Schrägstrich und die tragende Gruppe davor. Besteht das angegebene Unterobjekt nicht, dann wird dieses mit dem angegebenen Namen definiert.
anybody{
name = "Sally", surname
age = 21
}
out anybody\name 'Gibt "Sally" aus
out anybody\age 'Gibt 21 aus
out anybody\surname 'Ist ebenso "Sally"
Man kann auch Objekte durch einen Ausdruck ansprechen, der entweder den Namen als String angibt, oder den Index als Integer. Wird ein Objekt mit einem String angesprochen, so muss darauf geachtet werden, dass dieser String den Namen in der CamelCase-Form angibt. Wird ein Index angegeben, gillt für das erste Objekt der Index Null. Um durch einen Ausdruck auf ein Unterobjekt zuzugriefen, muss man nach dem Schrägstrich eine Klammer mit diesem Ausdruck angeben.
Auf diese Weise kann man auch Objekte definieren. Falls ein Objekt unter dem gegebenen Index nicht existiert, wird ein Objekt unter dem Namen "child_" plus dem Index definiert.
house{
color = "green"
road = "robert-str."
number = 12
}
out house\("num" + "ber") '= 12
out house\(1) '= "robert-str."
Eine Selektion von Unterobjekten wird durch eine eckige Klammer nach einem Slash angedeutet. Dabei sind die angegebenen Pfade in der Klammer, die Objekte, die in der Selektion eingebunden sein sollen.
pos{
x = 1
y = 2
z = 3
}
pos\[x, y] = pos\z
pos out x, y, z '= 3, 3, 3