A TTCN-3 programozási nyelv

Modulok és láthatóság

A TTCN-3 nyelv alapvető szemantikus és fordítási egysége a modul. A modulnak két, szintaktikailag jól elkülönülő része van, a definíciós illetve a control rész.

module <modulnév> { <definíciós rész> <control rész> }

A modul definíciós részében szerepelhetnek:

A modulok control része szintén két részre bontható, ez a lokális definíciók, illetve a testcase futtatási rész (execute parancs segítségével). Lokális definíciók csak a control részből láthatóak, azonban az adott modul definíciós részében szereplő komponensek a teljes modulban használhatóak.

control { <lokális definíciók> <testcase végrehajtás> }

Lehetőség nyílik továbbá az egyes deklarációk és definíciók láthatóságának megadására. A public, private és friend módosítók viselkedése azonos a C++-ban megszokottal. A nyelvben a modulok közötti láthatóságot az import kulcsszóval módosíthatjuk. Lehetőség van egy modul teljes publikus tartalmának importálására, ugyanakkor megadhatunk szűkítéseket is (például importálandó eljárásak név szerint felsorolása vagy összes template importálása).

import from MyModule all; import from MyModule { template all;} import from MyModule { type MyType;} //használat: MyModule.MyType import from MyModule { function all;}

Azonosítók a teljes scope hierarchiában egyediek kell legyenek, amennyiben egy scope-ben ez mégsem teljesül úgy az fordítási idejű hibát eredményez.

Hatókör és láthatóság

A TTCN3 nyelv legmagasabb szintű egysége a modul, melyet nem lehet sub-modulokra bontani. Bármely modul importálhat definiciókat más modulokból, illetve a moduloknak lehetnek modulparaméterei. Nincsenek globális változók.

Hatókör szintek

A TTCN3 nyelv kilenc hatókört különböztet meg:

Minden láthatósági kör opcionális deklarációkból áll. Ugyan nincsenek globális változók, de a modulok definíciós részében deklarált változók globálisan láthatóvá tehetők a modul importálásával. A definíciós részben deklarált azon változók, melyek nem valamilyen másik hatókör részei az adott modul bármely más részében használathatóak (függvények, testcase-ek, altstep-ek). A modul kontroll részében definiált változók csak lokálisan használhatóak (a kontroll részben). A teszt komponensekben létrehozott definíciók használhatóak minden olyan komponens esetében, mely kiterjeszti őt, illetve minden olyan függvényben, testcase-ben, altsetp-ben, amelyeknek a runs on klózja az adott komponens vagy az őt kiterjesztő komponens. A testcase-ek, alstep-ek és függvények önálló láthatósági köröket képeznek. A bennük létrehozott deklarációk lokálisak, csak az ő törzsükben láthatóak, nincs köztük hierarchikus összefüggés. Utasításblokkokban lévő deklarációk érvényességi köre, csak az adott utasitásblokkban érvényes, még akkor is ha ezek valamilyen függvény, testcase, altstep törzsében találhatóak. Az utasitásblokkok és a beágyazott utasításblokkok közt hierarchikus összefüggés van (a beágyazott utasításblokkban láthatóak a „külső” utasításblokk definíciói).

A modul definíciós részében a definíciókat csoportokba(group) foglalhatjuk. A definíciók csoportosításának célja a kód olvashatóságának segitése, valamint a modul logikai struktúrájának létrehozása (amennyiben szükséges). Csoportokon belül további csoportok hozhatóak létre, melyekre szükség esetén ponttal elválasztva tudunk hivatkozni. Definíciós csoportot minden olyan helyen létrehozhatunk, ahol a definiálás megengedett. A csoportok nem rendelkeznek hatáskörrel. A csoportazonosítóknak nem kell egyedieknek lenni, kivétel a legfelső szinte lévő csoportok csoportazonosítói, valamint az azonos szinten lévő alcsoportok azonosítói. A csoportok minden esetben publikus láthatóságúak.

Definíciók láthatósága

A legfelső szintű modul definíciók és az import definíciók láthatósággal rendelkeznek, amelyeket explicit módon megadhatunk. Alapértelmezetten mindegyik public láthatóságú, kivétel az importált és a friend definíciók. Az importált definíciók alapértelmezetten private láthatóságúak, a friend definíciók szintén, és ez nem is módosítható. A csoport definíciól public láthatóságúak. A láthatóság szabályozza, hogy egy legfelső szintű definíció valamint egy import állítás importálható más modul által.A public láthatóságú definíciók importálhatóak más modulok által. A friend típusú definíciók csak friend modulok által importálhatóak, mig a private láthatóságúak nem importálhatóak más modulokba.