Trellis

Alprogramok

6. Alprogramok

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.