Definíciógyűjtemény

Deklaráció (declaration)

Egy entitás (programegység, változó, típus stb) és egy név összekapcsolása. A deklaráció bejelenti, hogy a továbbiakban az adott név az adott entitást jelöli, és megbízza a fordítót, hogy az adott nevet ne engedje másképp használni, csak az entitásnak megfelelően. (Az Adában a nevet nem egy entitáshoz, hanem annak egy nézetéhez rendelhetjük, így további, az adott nézetre vonatkozó megszorítások betartatására kérhetjük a fordítót.)

Deklaráció hatóköre (scope)

A programszöveg azon része, amelyre nézve a deklaráció érvényben van, azaz a deklarációban szereplő név és entitás össze van kapcsolva egymással. A legtöbb nyelvben statikus hatóköri szabályok vannak, azaz a hatókör a programszöveg egy szintaktikusan egybefüggő része. A deklaráció hatóköre tipikusan a deklarációtól kezdődik, és a deklarációt közvetlenül tartalmazó blokk végéig tart.

Deklaráció láthatósága (visibility)

A programszöveg azon része, amelyre nézve a deklarációban szereplő név a deklarációban szereplő entitást jelenti. Nem feltétlenül esik egybe a deklaráció hatókörével, lehet, hogy csak egy része annak. Előfordulhat, hogy a programszöveg egy pontján két olyan deklaráció hatókörében vagyunk, melyek ugyanazt a nevet rendelik két különböző entitáshoz. Ilyenkor a "közelebbi" deklaráció szokott látható lenni, azaz a közelebb deklarált entitásra hivatkozhatunk a névvel. Úgy is mondjuk, hogy a közelebbi deklaráció elfedi, eltakarja (hides) a távolabbi deklarációt. Jellemző példa: sok nyelvben egy beágyazó és egy beágyazott blokkban deklarálhatunk azonos névvel változókat. A beágyazott (belső) blokkban szereplő deklaráció elfedi a külső blokkban szereplő deklarációt. Bizonyos esetekben minősítés segítségével az elfedett entitáshoz is hozzá lehet férni. Az ilyen kiterjesztett láthatóságra a blokkszerkezetes nyelvekben láthatunk példát: ha egy blokkot beágyazunk az A programegységbe, és a blokkban egy deklarációval elfedjük az A-ban x névvel deklarált entitást, akkor az A.x minősített névvel továbbra is hozzáférhetünk az elfedett entitáshoz.

Deklaráció elfedése (hiding)

Ha egy deklaráció hatókörében a deklarációban szereplő névvel egy másik entitást is deklarálunk, akkor az első deklaráció név-entitás összekapcsolását elfedtük. (Lásd még: deklaráció láthatósága.)

Blokkszerkezetes nyelv (block-structured)

Olyan nyelv, amelyben az alprogramok egymásba ágyazása megengedett. (Tipikusan a Pascal jellegű nyelvek ilyenek, például az Ada és a Modula-2.) Nem szokták blokkszerkezetesnek nevezni azokat a nyelveket, amelyekben alprogramok nem, csak blokk utasítások (például C), vagy az alprogramtól különböző programegységek (C++, Java) ágyazhatók egymásba.

Programegység, definíciójának felépítése (program unit, definition of a ~)

Programegységnek nevezzük a program egy olyan szintaktikus egységét, mely a program tagolásának, programrészek újrafelhasználhatóságának eszköze. Programegységek például az alprogramok, a csomagok (Ada), az osztályok (C++), a taszkok (Ada) és a sablonok (Ada, C++). A programegységek definíciója két részből áll: specifikációból, amely leírja, hogy a programegységet hogyan kell használni, és törzsből, mely a programegység megvalósítását tartalmazza.

Programegység specifikációja (specification)

A programegység azon része, amely leírja, hogy a programegységet hogyan kell használni. Például egy alprogram specifikációja tartalmazza az alprogram nevét, formális paraméterlistáját, ha függvény, akkor a visszatérési értékét, C++ tagfüggvény esetén a this konstansságát, a Java esetén a láthatósági és egyéb módosítószavakat és a kiváltható kivételek listáját.

Programegység törzse (body)

A programegység megvalósítását tartalmazza. A programegységet használó programrészekből nem látszik. Ilyen az Ada csomagok törzse, vagy a C++ tagfüggvények definíciójának kapcsos zárójelekkel határolt része.

Programegység deklarációja (declaration of a program unit)

Akkor használjuk, amikor deklarálni, jelezni akarjuk, hogy egy adott név egy programegységre hivatkozik, de nem akarjuk a programegységet definiálni. A deklaráció tipikusan a programegység specifikációjából áll, így a fordító ellenőrizni tudja, hogy a deklarált nevet a programozó megfelelőképpen használja-e. Kölcsönösen rekurzív alprogramok definiálásánál sok nyelvben ilyen úgynevezett előrevetett deklarációt (forward declaration) kell alkalmazni. Másik példa: egy Ada csomagspecifikációban deklaráljuk a csomag által exportált alprogramokat, illetve egy C++ osztáydefinícióban a tagfüggvényeket lehet csak deklarálni (ilyen esetben az alprogram teljes definíciója az osztálydefiníción kívül helyezkedik el).

Fordító (compiler)

Forráskódból tárgykódot állít elő. Fordítás közben lexikális, szintaktikus és statikus szemantikai elemzéssel igyekszik felderíteni a program fordítási hibáit.

Fordítási egység (compilation unit)

A programszöveg azon része, amelyet a fordítóprogram egy egységnek kezel. (Az a rész, amit a fordító egy végrehajtásával le lehet fordítani.) Az Adában fordítási egységet lehet készíteni alprogramdefinícióból, csomag specifikációból, csomagtörzsből, sablon specifikációból, sablon törzsből, valamint alegységből. Például: egy alprogram definíciója, előtte az alprogram által használt könyvtári egységek listája (egy vagy több with utasításban megadva), valamint egy vagy több use utasítás alkothat egy fordítási egységet. Vegyük észre, hogy az Ada csomagok specifikációja és törzse külön fordítási egységként készíthető el. A C és C++ nyelvben a fordítási egység egy darab c, illetve cpp forrásfájlból az előfordító végrehajtásával keletkező forráskód.

Könyvtári egység (library unit)

Egy önállóan fordítható programegység. Általában egy fordítási egységet (bizonyos nyelvek terminológiájában: modult) értünk alatta, de például az Adában, amikor egy csomagot könyvtári egységként készítünk el (azaz nem ágyazzuk be másik programegységbe), akkor két fordítási egységet írunk: egyet a csomag specifikációjának, egyet pedig a csomag törzsének.

Definíció

Változó/alprogram/típus/csomag létrehozása. Változók definiálása történhet például változódeklaráció segítségével. Nem minden változódeklaráció definiál új változót. Például C-ben: extern int foo; Vagy C++-ban: int i = 2, &j = i; Típus definiálása során új típus jön létre. A C/C++ typedef utasítása típust deklarál, de nem definiál. Fontos a structural és named típusekvivalencia közötti különbség. Alprogramok deklarálhatók úgy, hogy a definíciót csak később biztosítjuk hozzájuk. (Pascal, C, C++, Ada példák...)