Típusok, kifejezések, utasítások


ABSZTRAKCIÓ

Az absztrakció a valós világ megismerésének fontos eszköze. Lényege a modellezés: a dolgok, tények, jelenségek, fogalmak közti különbségeket elhanyagoljuk, a közös jellemzőket kiemeljük és ezentúl csak ezekkel jellemezzük. Az absztrakció az informatikában és a programozási nyelvek környékén is megjelenik. A programozási nyelvekben elválik egymástól a specifikáció és az implementáció.

Kétféle technikával valósítható meg:

Adatabsztrakció: Adatokkal írjuk le a világ jellemzőit, mert az adat statikus része a világnak.
Procedurális absztrakció: A műveleteket, a tevékenységeket, a viselkedést írjuk le, a világ reakcióit.
Az absztrakció elősegíti az újrafelhasználhatóságot (megírtat ne kelljen újra megírni).
Specifikáció: Egyes eszközöknél megmondja mire, hogyan tudom használni.
Implementáció: Adott eszköz hogyan működik.


ADATTÍPUS

Az adattípust egyértelműen meghatározza:

Típusok csoportjai

Skalár (egyszerű) típus: Tartományának elemei atomiak (típuskezelő nyelvi eszközökkel tovább nem bonthatóak), megjelenhetnek literálként a program szövegében.
Strukturált (összetett) típus: Tartományának elemei egy típuskészletből valóak (általában értékcsoportot képviselnek), adatszerkezetek megvalósítására használjuk.
A program objektumait típussal ellátni a deklarációs utasításban kell.
Minden eljárásorientált nyelv ismeri a tömböt, és általában a rekordot is. Mindkettő strukturált típus. Az összes adatszerkezet reprezentálható folytonos módon (tömbbel) az eljárásorientált nyelvekben.

Nyelvek típusrendszere


Numerikus karakterlánc: Speciális típus, a numerikus érték karakterlánccal van takarva. A szám ábrázolása: pakolt decimális. Ha akarom numerikus, ha akarom szöveges.
Címke: A cím típusú adat explicit kezelésére.
Tömb: Több dimenziós tömböt is kezel.
Rekord: (heterogén adatszerkezet, különböző típusú elemekből áll (mezők)). Minden rekordmező addig bontható, amíg konkrét típus nem áll elő, a legalsó szinten csak konkrét típus lehet.
Különböző rekordok mezői kaphatnak azonos nevet és a különböző mezők belső mezőinek nevei is egyezhetnek. Hogy a rekordok megfelelő belső azonosítóira hivatkozni lehessen, a PL/1 bevezette a minősített név (minősítés) fogalmát. A rekordok neveinek különbözőnek kell lennie.


Tömb: Szabványtömb, tetszőleges dimenziószámú tömböt kezel.
Halmaz: A matematikai halmazfogalmat veszi át.
Rekord: Eltér a PL/1 és az adatszerkezetek rekordfogalmától. Mezőkből áll, de nem bontható tovább. Csak egyszintű rekordot enged meg, saját típusok létrehozásával viszont egymásba skatulyázhatóak. A rekord mint típus lehet változó hosszúságú.
Új típust a beépített és a már korábban deklarált saját típusok segítségével hozhatóak létre. A saját típus egy névvel rendelkező objektum, felhasználható a további deklarációkban.


Rekord: A Pascal rekordfogalmát veszi át.
Skalár: A Pascal sorszámozott típusához a valós típust is hozzáteszi.
Privát: Speciális típus, az adatabsztrakció magas fokát tudja vele megvalósítani.
Az Ada ismeri a saját típust, de a deklarációban minden addigitól különböző típust kell létrehozni. Létezik altípus is, ez valamely típussal egyenértékű.


Karakteres: Számolni lehet vele, értéke a belső kódja.
Függvény: Általában más nyelvben nincs függvény típus.
Tömb: Több dimenziós tömböt csak egy dimenziós tömbökből tud előállítani.
Struktúra: Egyszintű rekord változó rész nélkül.
Union: Olyan változó, amely a futási idő különböző pillanataiban különböző értékeket vehet fel. A felvehető értékek köre behatárolt, a megadott mezőkből mindig csak egyet tartalmaz.
A nyelv kifejezés- és mutatóorientált, ismeri az automatikus deklarációt.
Saját típusa nem tényleges saját típus, csak egy másként is megadható típusleírást nevez meg (szinonima).

Felsorolásos típus
Saját típusként kell definiálni. Megadjuk a tartományának az elemeit, amik azonosítók lehetnek. Lényeges a sorrendjük, a rendezettség miatt sorszámozhatóak. Tartományának elemei megjelenhetnek literálként a program szövegében.

Sorszámozott típus
Tartományának elemei lineáris listát alkotnak, egyértelmű sorrend állítható fel közöttük és minden elemhez egy sorszám van rendelve (0,1,2,...). Kivétel a Pascal egész típusa, ahol saját magát rendelték hozzá a számhoz. Tartományának minden egyes elemére igaz, hogy van rákövetkezője (kivéve az utolsó elemet) és van megelőzője (kivéve az első elemet). A sorszámból egyértelműen megadható az elem, az elemből egyértelműen megadható a sorszám, ugyanígy az előző és a következő elem is.

Intervallum típus
Bármely sorszámozott típusból származtatható. Nem új típus, az eredeti sorszámozott típus tartományának a leszűkítése.
Az alsó határ mindig kisebb vagy egyenlő a felső határral.

Tömb típus
A tömb típus a tömb adatszerkezet tükröződése, statikus objektum. A tömb nevével a tömb összes elemére hivatkozhatok, egy elemre hivatkozás: a tömb neve + ahány dimenzió, annyi index.
Az indexes változó skalár értékű változó.

Terminológia:

Egy tömböt jellemez:

Rekord típus
A rekord a rekord adatszerkezet tükröztetése. Szerepe, hogy különböző típusú elemeket fogjon össze egy struktúrába (heterogén). Mezőkből áll, ezeknek a mezőknek saját nevük és típusuk van. Mint típust minden nyelvben explicit módon deklarálni kell.
A rekord nevével a teljes rekordra hivatkozom. Egy rekord azonos szintű mezőinek különböző nevet kell adni.

Mutató típus
A modern nyelvek kedvelt típusa, a szétszórt reprezentáció eszköze. Speciális típus: tartománya tárbeli címeket tartalmaz, értékként tárbeli címet vehet fel. Például egy mutató típusú változó címén olyan érték helyezkedik el, amely egy másik tárbeli elemre mutat. Segítségével tetszőleges objektumot tudok deklarálni, úgy hivatkozhatok a tárra, hogy nem nevezem meg a tárrészt. Ha egy tárrészt nem nevezek meg, csak akkor tudok hivatkozni rá, ha van olyan mutató, amelynek az értéke az adott tárrész címe.
Akárhány objektum felveheti ugyanazt a tárcímet (többszörös tárhivatkozás). Ekkor ha az egyik által mutatott címen lévő érték megváltozik, akkor a többi mutató által mutatott érték is.
Nem létező tárcímre is hivatkozhatunk, erre a nyelvekben beépített nevesített konstansok szolgálnak. Bármely mutató típusú objektumnak értékül adható.


KIFEJEZÉS

A kifejezés a programnyelvek szintaktikai egysége, az eddigi fogalmak jelennek meg benne. Már ismert értékek alapján új értéket határozunk meg. Olyan objektum, amelynek két komponense van: érték és típus. Típussal csak a típusos nyelvekben rendelkezik.
Formálisan operandusokból, operátorokból és kerek zárójelekből áll.
Operandusok: Az értéket képviselik, egy operandus önmagában is kifejezést alkot (a legegyszerűbb kifejezés). Operandus lehet: konstans, nevesített konstans, változó vagy függvényhívás.
Operátorok: Minden nyelv definiálja saját operátorait, néhol a programozó is definiálhat sajátot. Az operátorok megkülönböztethetőek az operandusok száma szerint:

Zárójelek: Feladatuk a precedenciatáblázat felülbírálása vagy egy részkifejezés kiemelése. Általában megengedett a redundáns zárójelek használata. Teljesen zárójelezett infix kifejezés egyértelmű.

Kifejezés kiértékelése
Az a folyamat, amikor meghatározódik egy kifejezés értéke és típusa. A műveletek elvégzésének sorrendjét befolyásolja a balról jobbra (ill. a jobbról balra) szabály és a precedenciatáblázat.
A balról jobbra szabály infix kifejezéseknél használatos, de lehet jobbról balra is (általában nem infix kifejezéseknél).
Az eljárásorientált nyelvekben a műveleti jelek a precedenciatáblázatba vannak elhelyezve a prioritási sorrendjük szerint. A táblázatban sorokból áll (a legerősebb prioritású sor az első sor), a sorokon belül kötési irány értelmezett.
A kiértékelés a precedenciatáblázat és a balról-jobbra szabály alapján történik. A kiértékelés a bal oldalról indul, összehasonlítja az első két operátort. Ha azonos erősségűek és a kötés iránya balról jobbra tart vagy a bal oldali operátor az erősebb, kiértékeli a részkifejezést, különben továbbmegy a második és a harmadik műveleti jelre, és azokat hasonlítja össze. Implementációfüggő, hogy az első művelet végrehajtása után a kiértékelést a kifejezés elején kezdi újra vagy a kifejezés végéig folytatja a kiértékelést, és ekkor kezdi újra elölről.
A kiértékelés szempontjából speciálisak azok a kifejezések, amelyek logikai műveletet tartalmaznak, mert itt akár már a kiértékelés elején eldőlhet a kifejezés értéke.

A nyelvek megoldásai a problémára:

  1. a teljes kifejezést ki kell értékelni (teljes kiértékelés)
  2. csak addig kell kiértékelni a kifejezést, amíg az érték egyértelműen el nem dől (rövidzár kiértékelés)
  3. a programozóra bízza, hogy melyiket akarja, és más operátorral jelzi
  4. üzemmódként lehet beállítani egy futásra vagy programrészre, hogy melyik kiértékelést akarja a programozó, az operátorok ugyanazok.

A kifejezés típusa
Típusegyenértékűség: Kétoperandusú operátor két oldalán csak azonos típusú operandusok szerepelhetnek. A művelet eredményének típusa vagy a két operandus típusával egyezik meg, vagy a művelet dönti el (pl. relációművelet esetén az eredmény logikai típusú).
Típuskényszerítés: Kétoperandusú operátor két oldalán különböző típusú operandusok állnak (vegyes típusú kifejezés). Ekkor az operátorok úgy vannak definiálva, hogy a lehetséges típuskeveredések esetén megmondják mi lesz az eredmény típusa. Mindig konverzió van, az eredmény típusa vagy az egyik operandus típusa vagy egy harmadik típus lesz. Speciális esete, amikor az egyik típus tartománya a másik típus részhalmaza. Ekkor bővít vagy szűkít (kerekít vagy csonkít).
Kérdés a nyelvekben, hogy konvertálható típus megengedett-e pl. értékadás, indexkifejezés és paraméterkiértékelés esetében is.

Lehetőségek:

  1. Szigorú típusegyenértékűség van, típuskeveredést nem enged .
  2. Gyakorlatilag majdnem tetszőleges típuskeveredés van.
  3. Egyiket vagy a másikat vallja.


UTASÍTÁSOK

Az utasítások a program szövegének azon egységei, amelyeket a fordítóprogramnak elsősorban fel kell ismernie, mert a fordítóprogram ezekkel az utasításokkal dolgozik.
Deklarációs utasítások: A fordítóprogramnak szólnak, a működését befolyásolják, szolgáltatást kérnek, üzemmódot váltanak, információval látják el, amelyet a fordítóprogram felhasznál kód generálásánál. Nem áll mögöttük kód, a fordítóprogram nem fordítja le őket.
Végrehajtható utasítások: Kód áll mögöttük, a fordítóprogam lefordítja, és ezekből generálja a tárgyprogramot.

Ezek minden eljárásorientált nyelvben megtalálhatóak. Az elágaztató, ciklusszervező, ugró és hívó utasításokat vezérlő utasításoknak hívjuk, a program vezérlési szerkezetének felírására szolgálnak

Feltételes utasítás (kétirányú elágaztató utasítás)
A program egy adott pontján két tevékenység közül valamelyiket kiválasztom és azt hajtom végre, vagy megmondom, hogy a tevékenységet végrehajtsa-e vagy sem.
Alakja: IF feltétel THEN tevékenység [ ELSE tevékenység ]
A feltétel logikai kifejezés, vagy amelyik nyelvben nincs logikai típus, ott logikainak megfelelő értékű kifejezés.
Az utasítás szemantikája: Ha a kiértékelődés után a kifejezés értéke igaz, akkor a THEN utáni tevékenység hajtódik végre. Ha az értéke hamis és nincs ELSE ág, üres utasítás, ha van ELSE ág, akkor az ELSE ágban lévő utasításokat hajtja végre. Ezután mindkét esetben a program a feltételes utasítás utáni utasításon folytatódik.
A THEN és az ELSE után tetszőleges utasítás állhat, akár újabb IF is, mert egymásba skatulyázhatóak. A hivatkozási nyelv nem szabályozza az egymásba skatulyázhatóságot, de az implementációk megszabják a számát. Ilyenkor merülhet fel a csellengő ELSE problémája.

Többszörös elágaztató utasítások
Feladata, hogy a program egy adott pontján akárhány tevékenység közül tudjak egyet választani. A választás általában egy kifejezés értékei szerint történik, lényeges a kifejezés típusa. A szintaktika és a szemantika is eltér nyelvenként.

Ciklusszervező utasítások
Feladata a program adott pontján egy tevékenység egymás utáni többszörös végrehajtása.
A ciklusnak formálisan van:
fej
mag
vég
feje, vége: Külön utasításokkal adjuk meg, az ismétlődésre vonatkozó információt tartalmazzák.
mag: Az ismétlendő tevékenységet írja le.

Feltételes ciklus
Az ismétlődést egy logikai kifejezés vagy ennek megfelelő típusú kifejezés szabályozza.

1. előfeltételes ciklus

2. végfeltételes ciklus

Előírt lépésszámú ciklus
Az ismétlődésre vonatkozó információ a fejben van. Mindig tartozik hozzá egy ciklusváltozó, a ciklus magja a ciklusváltozó egy-egy adott értékére fut le. Értékeit egy tartományból veheti fel, ez a fejben van megadva (kezdő- és végértékkel). Felvehet minden értéket a tartományból vagy csak bizonyos értékeket. Ekkor ezek az értékek szabályosan helyezkednek el a tartományban, és a ciklusfejben kell megadni a lépésközt. A ciklusváltozó az adott intervallumot befuthatja növekvőleg és csökkenőleg is, plusz információként az irányt is meg kell adni.
A hivatkozási nyelvek nem szabályozzák, hogy elől-, vagy hátultesztelő a ciklus.

1. előltesztelő:

2. hátultesztelő:

Felsorolásos ciklus
Tekinthető az előírt lépésszámú ciklus egy változatának. Az ismétlésre vonatkozó információ a fejben van. A fej tartalmaz egy ciklusváltozót és egy kifejezés sorozatot. A ciklusváltozó típusa tetszőleges lehet. Mikor a program vezérlése a ciklushoz ér, az értékeket a ciklusváltozó rendre felveszi és minden érték mellett egyszer lefut a mag. Legalább egy érték megadása kötelező, de száma bármennyi lehet, így nem lehet sem üres, sem végtelen ciklus. Nem merül fel a ciklusváltozó megváltoztatásának problémája sem. Kevés nyelvben létezik.

Végtelen ciklus
Sem a fejben, sem a magban nincs információ az ismétlődésre vonatkozóan, a magban kell lennie egy eszköznek, hogy véget érjen. Ez általában egy külön (ciklusbefejeztető) utasítás. Valamilyen esemény bekövetkeztére vár.

Összetett ciklus
A ciklusfejben a korábban felsorolt ismétlődésre vonatkozó információkból több is lehet egymás után. (Az előzőek kombinációja.)
Általában egy nyelvben többféle is van, de ritka, hogy egyben mind létezik.

Ugró utasítás (feltétel nélküli ugró, vezérlésátadó)
Alakja: GOTO címke
Ha a címke létezik, a program ott folytatódik.


PROGRAMEGYSÉGEK

Az eljárásorientált nyelvekben a program szövegének egymástól többé-kevésbé független, önálló jellemzőkkel rendelkező részeit programegységeknek hívjuk.
Ezek lehetnek:
1. Egymástól fizikailag függetlenek: Önállóan kezelhetőek, fordíthatóak, az egységek nem rendelkeznek különösebb belső struktúrával.



2. Mélységükben strukturálhatóak: A programegységek fizikailag nem függetlenek.



3. Fizikailag külön részek mélységükben strukturálhatóak


A programegységek négy fajtája az eljárásorientált nyelvekben: alprogram, blokk, csomag és taszk. Nem minden nyelv ismeri mind a négyet.
Minden nyelvben létezik egy kitüntetett rész, amelyet főprogramnak hívunk. Ez egy alprogram vagy külön szintaktikával rendelkező programegység. A befelé skatulyázó nyelvekben a főprogram tartalmazza az összes többi programegységet, amelyekből bármennyi lehet. Szerepe az, hogy a betöltőprogram a főprogramot tölti be és neki adja át a vezérlést, később közvetett vagy közvetlen módon a többi egység vezérlését is ő végzi és általában ő fejezi be a programot.
A különböző programegységek paraméterekkel, globális változókkal vagy állományok segítségével kommunikálnak.

Alprogram
Az összes eljárásorientált nyelv karakterisztikus egysége. Az újrafelhasználhatóság és a procedurális absztrakció eszköze.
(Újrafelhasználhatóság: Ha a program különböző részein ugyanaz az utasítássorozat fordul elő, akkor ki lehet emelni. A kiemelés helyéről hivatkozva rá aktivizálhatom.
Procedurális absztrakció: Lehetőség van a kiemelt szövegrész paraméterezésére, így nem csak egy tevékenység, hanem egy tevékenységcsoport végrehajtására képes.)
Egy bemeneti adatcsoportból produkál kimeneti adatcsoportot, jól definiált specifikáció alapján. Nem tartalmazza a transzformációt (az implementáció ismeretlen). A hívás helyén a specifikáció a lényeges, hívhatom úgy is, hogy nem tudom, mit csinál.
Formális kinézete:
fej
törzs
vég
fej: A specifikációt tartalmazza.
törzs: Tetszőleges utasítások, tetszőleges számban és tetszőleges sorrendben.
vég: A fej és a vég általában külön alapszóval van megadva.

Tartalmilag négy komponense van:

  1. név Ez egy azonosító, ezért az alprogramot is deklarálni kell.
  2. formális paraméterek (formális paraméterlista)

    A procedurális absztrakciót teszi lehetővé. Az alprogramok egy problémaosztályt oldanak meg. A probléma akkor konkretizálható, amikor az alprogramot az aktuális paraméterek megadásával meghívom.
    A fejben található, általában kerek zárójelek között.
    A paraméterlistán szereplő nevek a törzsben különféle objektumok lehetnek: változók, nevesített konstansok, állománynevek, más alprogramok nevei. A korábbi nyelvekben a listán csak a paraméterek nevei szerepeltek, később a név mellet megjelent a típusmegjelölés, de lehetnek plusz információk is, amelyek a formális paraméterek futás közbeni viselkedését szabályozzák. Számuk bármennyi lehet, a nulla paraméterrel rendelkező alprogramot paraméter nélküli alprogramnak hívjuk.
    A törzsben deklarált objektumok és a formális paraméterek az alprogram lokális objektumai.

  3. törzs
    Az implementációt tartalmazza. Felépítése:
    [deklarációs utasítások] végrehajtható utasítások
  4. környezet
    A globális változók együttese.

Két fajta alprogram létezik, a nyelvek általában külön alapszóval jelzik az eljárás vagy függvény fejében, hogy melyikről van szó:

1. Eljárás
Hatását paramétereinek, környezetének vagy mindkettőnek megváltoztatásával fejti ki. Adattranszformációt hajt végre vagy tevékenységet végez.
Hívása: Utasításszerűen, végrehajtandó utasításnak tekinthető. A program szövegébe bárhol elhelyezhető eljáráshívás, ahol végrehajtandó utasítás lehet. Egyes nyelvekben külön alapszóval hívható, más nyelvekben nincs rá alapszó.

Befejezése:

  1. Az utasítások elfogynak, a vezérlést visszaadja a hívást követő utasításra.
  2. külön utasításra
    Bárhol kiadható, a program a hívást követő utasításra tér vissza. Szabályos befejeztetés.
    GOTO-val is ki lehet lépni, de nem szabályos. A megadott címkére kerül a vezérlés, ha a címke létezik. Veszélyes, mert a közbensőkkel bármi történhet, főleg ha egy hívási láncban vagyunk.
  3. befejeztető utasításokkal / eljárásokkal
    A teljes programot befejeztetik. Nem teljesen szabályosak, de nem is veszélyesek.

2. Függvény
A matematikai fogalmat hozza át, feladata 1 db érték meghatározása. Nyelvfüggő, hogy ez az érték mennyire bonyolult struktúrájú lehet. Még egy komponense van, a függvény által visszaadott érték (visszatérési érték) típusa. Ezt a függvény neve hordozza, a fejben szerepel, a specifikáció része.
Hívása: Csak kifejezésben hívható meg, mert a függvény neve által hordozott értéket fel kell használni.
függvénynév[(aktuális paraméterlista)].

Befejezése és értékhozzárendelés:

  1. A függvény neve az eljárás törzsén belül mint változó használható (értékadó utasítás bal és jobb oldalán is), befejezéskor az értéke a legutoljára kapott érték. A függvény befejeződik, ha elértük a végét.
  2. A függvény nevének az eljárás törzsén belül értéket kell kapnia, értékadó utasítás jobb oldalán a függvény neve önmagában nem szerepelhet. Befejezéskor az értéke a legutoljára kapott érték. A függvény befejeződik, ha elértük a végét.
  3. Külön utasításra rendeli hozzá az értéket a függvény nevéhez a függvény befejeztekor.

A függvény feladata 1 db visszatérési érték meghatározása. Ha a függvény megváltoztatja paramétereit vagy környezetét, akkor ezt a tevékenységet mellékhatásnak hívjuk. A nyelvek általában nem javasolják, de megengedett.

Rekurzió


Ha ez a folyamat többször ismétlődik, hívási láncról beszélünk. A lánc alaphelyzetben dinamikusan változik, eleje mindig a főprogram. Függetlenül attól, hogy működik-e, minden eleme aktív.
Aktív alprogram újra meghívását rekurzív hívásnak (rekurziónak) nevezzük.
Közvetlen rekurzió: A rekurzió egyszerű esete, az alprogram saját magát hívja meg.
Közvetett rekurzió: Az alprogram egy másik, a hívási láncban szereplő alprogramot hív meg.


A nyelvek közti különbségek:
Van-e rekurzió: A nyelvek egy része nem engedi meg, más nyelvekben egy alprogram bármikor hívható rekurzívan, vagy a programozóra van bízva: a specifikációban megadható, hogy az alprogram rekurzívan vagy nem rekurzívan hívható.
Van-e másodlagos belépési pont: A korai nyelvekre jellemző, hogy elhelyezhető a törzsben másodlagos belépési pont. Szerkezete hasonló a fej szerkezetéhez, kompatibilis vele. Az alprogram hívható a fejjel (a teljes törzs végrehajtódik), vagy a másodlagos belépési pontoknál (a törzsnek csak egy része hajtódik végre).


Más nyelvekben nincs másodlagos belépési pont.
Korutinok:


Speciális alprogramok, speciális eszközrendszert igényelnek. Két alprogram egymás közt felváltva, tetszőleges helyre adja a vezérlést. A tárgyalt nyelvek egyikében sem létezik.

Paraméterkiértékelés
A formális paraméterlista az alprogramok specifikációjának a része, 1 db van belőle a deklaráció helyén. Aktuális paraméterlista annyi lehet, ahányszor meghívom az alprogramot. A paraméterkiértékelés az a folyamat, amikor egymáshoz rendelődnek a formális és az aktuális paraméterek és meghatározódnak azok az információk, amelyek a paraméterátadásnál mozogni fognak. Mindig a formális paraméterlista az elsődleges, mert ezekhez rendelődnek az aktuális paraméterek. Ez az összerendelődés három aspektusból vizsgálható:

1. sorrend
A formális paraméterek sorrendje kötött, a specifikációban megadott sorrend. Az aktuális paraméterek között is van egy bizonyos sorrend.

  1. Sorrendi kötés elve: Az a felsorolása hozzárendelés alapja, amelyet megadtam. Általában minden nyelv ismeri, ez a legáltalánosabb hozzárendelés.
    formális paraméter lista 1 2 ... n
    ^ ^ ^
    aktuális paraméter lista 1 2 ... n
  2. Név szerinti kötés elve: Explicit módon megmondom valamilyen szintaktikával, hogy melyik formális paraméterhez melyik aktuális paraméter tartozzon. A formális és az aktuális paraméterek sorrendje lényegtelen. Jóval ritkább, mint a sorrendi kötés elve, a nyelveknek csak egy része ismeri, néhány modernebb nyelv viszont előszeretettel használja. Operációs rendszerek vezérlőnyelvében gyakori.
  3. Vegyes alkalmazás: Olyan nyelvekben lehetséges, amelyben mindkét elv megjelenik.

    2. típusegyeztetés
    Típusnélküli nyelvekben nincs ilyen kérdés. A formális paramétereknek típussal rendelkezik. Ezt a formális paraméterlistán, régebbi nyelvekben az alprogram törzsének elején kell feltüntetni.

    1. Egyes nyelvekben az aktuális paraméter típusának meg kell egyeznie a formális paraméter típusával (típusegyenértékűség van).
    2. Az aktuális paraméter konvertálható a formális paraméter típusára.
    3. számbeli egyeztetés
    A formális paraméterek számától függően egy alprogram lehet:
    1. Fix paraméterszámú alprogram: A formális paraméterlistán adott számú formális paraméter szerepel. Ez egy konkrét, jól definiált szám, nulla vagy nullánál nagyobb.
    2. Nem fix paraméterszámú alprogram: A formális paraméterek száma bizonyos korlátok között tetszőleges.
    Egy nyelven belül az alprogramok vagy fix vagy nem fix paraméterszámúak. Kérdés, hogy a programozó definiálhat-e nem fix paraméterszámú alprogramot (beépített nem fix paraméterszámú alprogram van).
    Fix paraméterszámú alprogram meghívható:
    1. Ugyanannyi aktuális paraméterrel, ahány formális paraméter van (számbeli egyeztetéssel).
    2. Kevesebb aktuális paraméterrel. Azok a formális paramétereknek az értéke, amelyhez nem jutott aktuális paraméter a paraméterátadásnál, valamilyen alapértelmezett.
    3. Több aktuális paraméterrel. Elvileg előfordulhat, de a nyelvekben nem szokás vagy nem lehetséges.
    Nem fix paraméterszámú alprogram meghívható annyi aktuális paraméterrel (bizonyos határok között), amennyi jólesik.

    Papaméterátadás
    A paraméter a kommunikáció eszköze, a paraméterátadás akkor történik meg, amikor kommunikáció lezajlik. Mindig van hívó és hívott fél, ők kommunikálnak. A hívó tetszőleges program lehet, a hívott függvény vagy eljárás. A hívásnál definiáljuk, hogy az aktuális paraméternek milyen komponense kerül át a hívotthoz. Típust átadni paraméterként nem lehet.
    Paraméterátadási módok:

    1. Érték szerinti paraméterátadás
    A formális paraméternek van címkomponense az alprogram területén, az aktuális paraméternek lennie kell értékkomponensének.


    A folyamat: Meghatározódik a rendszer által az aktuális paraméter értéke, átkerül a hívótól a hívotthoz (átmásolódik a címkomponensre). Bizonyos kezdőértékadásnak is tekinthető. Az információátadás egyirányú, a hívótól a hívott felé. A hívott alprogram nem tud semmit a hívóról, a saját területén dolgozik. Az aktuális paraméter ebben az esetben kifejezés lehet.

    2. Cím szerinti paraméterátadás
    A formális paraméternek nincs címkomponense a hívott alprogram területén, az aktuális paraméternek rendelkeznie kell címkomponenssel.


    A folyamat: Meghatározódik a rendszer által az aktuális paraméter címkomponense, ez kerül átadásra a hívótól a hívotthoz. Az aktuális paraméter értéke ezen a tárcímen helyezkedik el, az alprogram itt dolgozik.
    Az információátadás kétirányú. A hívott alprogram tudja hol van a hívó egység, ha nem vigyázunk, szabadon mozoghat a hívó területén. Az aktuális paraméter változó lehet.

    3. Eredmény szerinti paraméterátadás


    Mind a formális, mind az aktuális paraméternek rendelkeznie kell címkomponenssel.
    A folyamat: Meghatározódik a rendszer által az aktuális paraméter címkomponense, ez kerül átadásra a hívótól a hívotthoz. Az alprogram a saját területén dolgozik, nem nyúl át futás közben a hívóba. A működés befejeztekor a címkomponensre átmásolja az értéket, egyébként az aktuális paraméter címkomponensét nem használja.
    Az információátadás egyirányú: a hívottól a hívó felé.
    Az aktuális paraméter változó lehet.

    4. Érték eredmény szerinti paraméterátadás


    A formális paraméternek az alprogram területén rendelkeznie kell címkomponenssel, az aktuális paraméternek lennie kell cím- és értékkomponensének.
    A folyamat: Paraméterkiértékelésnél az aktuális paraméter érték- és címkomponense meghatározódik és mindkettő átadásra kerül az alprogramhoz. Az alprogram a saját területén dolgozik. Az alprogram működésének elején és végén történik az értékmásolás.
    Az információátadás kétirányú, de nem áll fenn a veszély, hogy a másik területére átnyúlok. Az aktuális paraméter változó lehet.
    Ezt mondja a hivatkozási nyelv. Vannak implementációk, amelyek úgy hajtják végre, hogy az aktuális paraméter címkomponensét az alprogram lefutása után számítják ki, ekkor kerül át a címkomponens a hívotthoz. Az eredmény függhet tőle , mert pl. a cím megváltozhat menet közben.

    5. Név szerinti paraméterátadás
    Teljesen más elven épül fel. Az aktuális paraméter egy tetszőleges, az adott szövegkörnyezetben értelmes karaktersorozat. Szimbolikus paraméterátadás történik, az aktuális paraméter mint karaktersorozat kerül át.
    A folyamat: A hívás pillanatában rögzítődik az alprogram szövegkörnyezete, majd a paraméterkiértékelés végén az aktuális paraméter átkerül a hívott alprogramhoz, és az alprogram szövegét véve alapul, a karaktersorozat felülírja a formális paraméter minden egyes előfordulási helyén a formális paraméter nevét.

    6. Szöveg szerinti paraméterátadás
    A folyamat: A paraméterkiértékelés után elindul az alprogram. Amikor a futás közben először fordul elő a megfelelő formális paraméterre történő hivatkozás, a szövegkörnyezet rögzítődik és az aktuális paraméter mindenhol felülírja a formális paraméter nevét, majd az alprogram fut tovább.
    A szöveg és név szerinti paraméterátadást a deklaratív nyelvek egy része szereti.
    Az adott programozási nyelvekben általában több paraméterátadási mód is létezik, de az összes nincs jelen egy nyelvben sem. A nyelv filozófiájától függ, melyiket szereti, azonban érték szerinti paraméterátadást a legtöbb nyelv meg tud valósítani.
    A paraméterek csoportosíthatóak aszerint, hogy az információ merre mozog a hívott alprogram szempontjából. A megkülönböztetés csak fogalmi, a hivatkozási nyelv nem rendezi le.

    1. input paraméter: A hívótól kapnak információt.
    2. output paraméter: A hívott alprogram ad át információt a hívónak.
    3. input-output paraméter: Az információ mindkét irányban mozog.

    Blokk
    Formálisan van:

  4. fej
    törzs
    vég
    Feje, vége: Általában egy-egy alapszóval vagy speciális jelsorozattal jelölve.
    Törzse: Tetszőleges utasítások helyezhetőek el benne, akár deklarációs utasítások is.

    Olyan programegység, amely csak más programegységen belül helyezhető el, önállóan fordítani nem lehet. Csak befelé strukturáló nyelvekben létezik.
    A program szövegén belül bárhol elhelyezhető, tetszőlegesen egymásba skatulyázhatóak. Aktivizálható szekvenciálisan (ha odaérek, elindul), vagy a címkéző nyelvekben GOTO-val bárhonnan elérhetem. Belépni csak a fején keresztül lehet.
    Többféleképpen fejeződhet be:

    1. A törzs végére ért, a végét követő utasítással folytatódik a program.
    2. GOTO-val kiugrunk
    3. Programbefejeztető utasítással vagy eljárással is kiléphetünk.

    Nincs paramétere, neve (címke jellegű) is csak bizonyos nyelvekben (címkéző nyelvek), de nem minden helyzetben van.
    A blokkot ismerő nyelveket blokkszerkezetű nyelveknek nevezzük. A blokknak szerepe a hatáskör definiálásánál van.

    Hatáskör
    A nevekhez kapcsolódó fogalom, a nevek jellemzője. A hatáskör a program szövegének azon része, ahol egy adott név ugyanazt az objektumot nevezi meg (az adott név jellemzője, felhasználási módja ugyanaz). Minden névhez meg kell tudni mondanom, hogy a program szövegének mely részén jelenti ugyanazt a objektumot.
    A hatáskörkezelés az a folyamat, amikor bármely névhez megadjuk a hatáskörét. Ennek alapja a programegység (néhány bonyolultabb nyelv kivételével). Az adott programegységen belül deklarált nevek az adott programegység lokális nevei, azok a nevek pedig, amelyeket szabályosan használok a programegységen belül, de nem ott deklaráltam, az adott programegység globális nevei. Azt a nevet, amelyet egy programegységben használok, de ott nem deklaráltam, szabad névnek nevezzük.

    Kétféle hatáskörkezelés létezik:

    1. Statikus hatáskörkezelés
    A program forrásszövegén alapul, a fordítóprogram végzi. Ha talál egy szabad nevet, kilép a tartalmazó programegységbe és megnézi, hogy a név ott deklarálva van-e. Ha ott lokális név, rendben van, ha nem, akkor újra feljebblép egy szinttel, egészen addig, amíg meg nem találja lokális névként vagy el nem jut a legkülső programegységig. Ha itt sincs deklaráció és a nyelv nem ismeri az automatikus deklaráció fogalmát, akkor hibát jelez, de ha tud automatikusan deklarálni, akkor a szabályoknak megfelelően ellátja a nevet jellemzőkkel a legkülső szinten.
    A lokális nevek hatásköre az a programegység, ahol deklaráltuk őket, és minden olyan tartalmazott programegység, amelyben a nevet nem deklarálom újra.
    A hatáskör befelé terjed, kifelé soha (a programegység bezárja a lokális nevet). Belülről látszanak a külső nevek, ha nem deklarálom át őket.

    2. dinamikus hatáskörkezelés
    A futási időben történik, a futtatórendszer végzi. Alapja a hívási lánc. Egy név hatásköre futás közben is változhat, futásonként más és más lehet.
    Ha a futtató rendszer talál egy szabad nevet, visszalép a hívó programegységbe és megnézi, hogy a név ott deklarálva van-e. Ha nincs, addig lépked vissza, amíg meg nem találja (lokális névként) vagy el nem jut a legkülső szintig. Ha a hívási lánc első elemében sincs deklarálva és nincs automatikus deklaráció sem, hiba történt, ha ismeri az automatikus deklarációt, akkor a legelső szinten deklarálja.
    Dinamikus hatáskörkezelésnél egy név hatásköre az a programegység, ahol deklaráltam, illetve minden, az adott programegységből induló hívási láncban elhelyezkedő programegység, hacsak az adott programegységben a nevet nem deklaráltam újra. Az újradeklarálástól a hívási láncban az újradeklarált név az érvényes.
    Az imperatív nyelvek általában statikus hatáskörkezelést valósítanak meg, egyéb nyelvek a dinamikus hatáskörkezelést favorizálják.

    Élettartam
    A változók fontos jellemzője, a futási idő azon része, amelyben az adott változónak van címkomponense. Változó esetén a címhozzárendelés határozza meg. Mind a hatáskör, mind az élettartam a programegységekhez kötődik, egymástól független de különbség az is, hogy míg a hatáskör névhez, addig az élettartam változóhoz kötődik.

    Egy szintet vissza, vagy vissza a főmenübe.