A Trellis program típusmodulok halmaza. Az eljárások és függvények mindig valamely típus műveletei. Egyetlen kulcsszó van rájuk:
operation. A függvény abban különbözik az eljárástól, hogy van visszatérési értéke / eredmény-specifikációja. Egy művelet definiálásakor meg kell adni a művelet nevét, argumentumainak számát és típusát, a visszatérési érték típusát (ha van), valamint a kivételeket.A típusokat csak a műveleteken keresztül érhetjük el. Vannak típus műveletek (
class operation), amik magára a típusra vonatkoznak, és példány műveletek (instance operation), melyek a típus egy példányára vonatkoznak. A műveletekre nem szelekciós jelöléssel hivatkozunk (pl. objektum.művelet(paraméterek)), hanem a paraméterek között az első helyen kell példányművelet esetén azt az objektumot, típusművelet esetén azt a típust felsorolni, amelynek műveletét alkalmazni akarjuk (pl. művelet(objektum, paraméterek) vagy művelet(típus, paraméterek)). Az első argumentumot vezérlő argumentumnak (controlling argument) nevezzük, ami vagy vezérlő objektum, vagy vezérlő típus (controlling object / type) lehet.A műveletek definíciójakor az első formális paraméter kötelezően
me vagy mytype, típus nélkül. Az első esetben a me-vel azonosítható objektumra vonatkozó műveletet implementáljuk, míg a második esetben típus művelet készül.A műveleteket minősített formában is hívhatjuk, például T'M (T felülvessző M) a T típusban definiált M műveletet jelenti, a vezérlő argumentumra azonban ilyenkor is szükség van.
A allocate műveletek speciális osztályműveletek, melyek meghívásakor a futtató rendszer gondoskodik memóriafoglalásról egy, az adott típusbeli objektum számára. A frissen lefoglalt objektumra me-vel hivatkozhatunk. Más nyelvekben ezt a fajta művelet konstruktornak nevezik. A rendszer referencia számlálást végez, és azokat az objektumokat amelyekre nem mutat referencia, felszabadítja. Az objektumok felszabadításáról így nem a programozónak kell gondoskodnia, és destruktorokat nem is lehet készíteni.
Művelet definiálása:
operation műveletnév(me/mytype, argumentum1: típus1, ... )
[ returns (típus) ]
[ signals (kivétel1, kivétel2, ... ) ]
is [ allocate ]
begin
[ ... ]
[ return kifejezés; ]
[ signal kivételnév; ]
[ ... ]
end;
A paraméterátadásról nem találtam információt.
Az objektumok komponensei (a típus adattagjai) is csak műveleteken keresztül érhetők el. A komponens értékét a get_komponensnév művelettel kérdezhetjük le, és a put_komponensnév művelettel állíthatjuk be. Ezek a műveletek field típusú adattagoknál automatikusan generálódnak. Lehetőség van arra is, hogy ne tároljuk, hanem számoljuk egy komponens értékét. Ekkor a get és put műveleteket nekünk kell megadnunk (lásd még: típusok deklarálása).
A Trellis nyelvben a specifikáció és az implementáció nem válik szét, mint például az ADA esetében, hanem a művelettel együtt a törzset is meg kell adni. A fejlesztő környezet feladata, hogy a programozó számára a specifikációkat "kigyűjtse" egy típusmodulból.
Minden, a felhasználó által létrehozott típusban átdefiniálhatók a megszokott operátorok, amelyek használhatók rövidített formában is. Például ha definiálunk egy plus(A,B) műveletet, azt hívhatjuk A+B formában is. Mindkét esetben az A objektum típusában definiált plus művelet hívódik meg (lásd még: 3.2. Operátorok), hiszen az a vezérlő objektum.
Megjegyzés: Ez igazából nem jelent átdefiniálást, hiszen különböző típusoknak lehetnek azonos nevű műveletei.