Személyes eszközök
Keresés

 

A InfoWiki wikiből


Harmadik generációs programozási nyelvek

Az assembly nyelv hiányosságainak kiküszöbölésére születtek a harmadik generációs nyelvek.

Az eljárásorientált (procedurális) nyelvek sok szempontból elvi, szemléletbeli váltást követeltek meg a programozóktól. A frissen felnövekvő programozó nemzedék, akik nem hordoztak magukban rossz szokásokat és hibás beidegződéseket – azonnal és gyorsan átvették ezeket a szemléletbeli előírásokat.

Eljárás fogalma

Az első nagyon fontos változás – az eljárás fogalmának bevezetése.

Az eljárás (és függvény) nyelvi elemmé vált. Az eljárásoknak neve volt, és rögzített paraméterezése (formális paraméterlista). Ez leírta, hogy az eljárás meghívása során milyen adatokat, értékeket kell az eljárás számára átadni. Ezen túl a nyelv rögzítette az átadás módját is. Ezzel elhárult az általános célú eljárások írásának legjelentősebb akadálya. Ugyanakkor, hasonló jelentős lépésként a fordítóprogram az eljárás hívásakor ellenőrizte, hogy a megadott összes adatot átadjuk-e az eljárásnak (aktuális paraméterlista). Ez újabb fontos mérföldkő a fordítóprogram intelligenciájának fejlődésében.

Változó

A másik fontos változás a változó fogalmának finomodása:

A változónak van:

  • Neve (azonosítója), ezzel lehet a kódban hivatkozni rá.
  • Típusa (mely meghatározza a memóriabeli helyigényét (méret), és tárolási (ábrázolási, kódolási) módját).
  • A típus ezen túl meghatározza az adott nevű változóval elvégezhető műveletek körét is (numerikus típusú változóval végezhető az osztás, szorzás, kivonás, összeadás, …), míg logikai típusúval a logikai műveletek (és, vagy, xor, …)).
  • A kifejezésekben szereplő adatok és változók típusait a fordítóprogram elemzi, összeveti, és ellenőrzi a kifejezés típushelyességét.
  • A programban lehetetlenné vált a változó tárhelyének részleges kezelése (a változó értékét reprezentáló byte-ok csak egy részének kiolvasása, módosítása). Ezzel is nagyon sok tipikus programozó hiba kiszűrhetővé vált.
  • A változókat általában kötelezően deklarálni kellett. Ennek során a programozó bejelentette a fordítóprogram számára érthető formában, hogy az adott azonosító (változónév) alatt mit ért (milyen típust). A deklaráció helye további információkat jelent a fordítóprogram számára – meghatározza a változó élettartamát és hatáskörét is.

A változó élettartama:

  • statikus: a változó a program indulásának pillanatától a futás végéig a változó folyamatosan létezik, és változatlan helyen lesz a memóriában.
  • dinamikus: a változó a program futása közben jön létre és szűnik meg (akár többször is).

A statikus változók fontosak az adatok megőrzése szempontjából. A fontos, sokáig szükséges adatokat statikus változókban tároljuk. A dinamikus változók a memóriaterület gazdaságos felhasználása szempontjából fontos, hogy a változó csak addig legyen a memóriában, amíg szükség van rá. Amint feleslegessé vált – megszűnik, és a helyére később más változó kerülhet.


A változó hatásköre:

  • globális: a program szövegében több helyen (több eljárásban is) elérhető, felhasználható.
  • lokális: a program szövegében a változó felhasználása helyhez kötött, csak egy meghatározott programrészben (körülhatárolt szegmensben) használható fel.

A globális változók minden esetben statikusak is. A dinamikus változók pedig általában lokálisak. A dinamikus változó létrehozása és megszűnése ezen lokális területhez kötődik – amikor a program végrehajtása eléri ezt a pontot, belép erre a területre, akkor a változó automatikusan létrejön. Amikor a program végrehajtása elhagyja ezt a területet, akkor a változó automatikusan megszűnik, helye felszabadul a memóriában.

Típusrendszer bővíthetősége

A harmadik fontos változás – a típusrendszer bővíthetősége

A magas szintű programozási nyelvek eleve adott típusokkal készültek. A nyelvi alaptípusokból további (felhasználó által definiált) típusokat lehet készíteni. Ezen típusok a meglévő típusok szűkítései (felsorolás típus, résztartomány-típus), vagy összetett algebrai adatszerkezetek is lehetnek (pl. struktúrák, vektorok, listák, …).

Vezérlési szerkezetek

A negyedik fontos változás – a vezérlési szerkezetek bevezetése

Az assembly nyelv ugróutasításaiból megszervezhető vezérlési szerkezetek körét csökkentették, és rögzítették azokat:

  • szekvencia: az utasításokat a forráskódban rögzített sorrendben kell végrehajtani.
  • szelekció: feltételes elágazás (pl. a ha … akkor … különben … szerkezetek).
  • iteráció: adott programrész ismétlése (előírt lépésszámú ciklus, logikai feltételhez kötött ciklusok, halmaz alapú ciklusok, …).

A vezérlési szerkezetek e formája áttekinthető, egyszerű, könnyen olvasható kódot eredményez. Mills bizonyította, hogy minden algoritmus kódolható a fenti három vezérlési szerkezet használatával, így az ugró utasítások szükségtelenné váltak.

Természetesen, amikor a fordítóprogram a gépi kódú változatot generálja, akkor a fenti szerkezeteket ugró utasítások formájában valósítja meg – hiszen a gépi kódban csak ezek szerepelnek.

Hardware-függetlenség

Az ötödik fontos változás – a hardware függetlenség.

A procedurális nyelvek már nem processzor függőek. A fordítóprogram ismeri az adott számítógép processzorának gépi kódját – és a procedurális nyelven megírt magas szintű kódot az adott gépi kódra fordítja. Amennyiben a programot más platformon is szeretnénk futtatni, úgy a magas szintű forráskódot az adott számítógépre írt fordítóprogrammal újra kell fordítani – a forráskód alapvető változtatása nélkül.

A memóriaterület kiosztását a fordítóprogam végzi a változó-deklarációk alapján. A program egy adott pontján mindig egyértelműen megadható a változó hatáskörök figyelembevételével, hogy mely változók érhetők el, és melyek nem. A dinamikus változók létrehozását és megszüntetését a fordítóprogram által generált kód automatikusan végzi. A típusokhoz tartozó tárhely-igényt a fordítóprogram kezeli, kizárt a memória-átlapolás és nem keletkeznek fel nem használt memóriaterületek. Emiatt nagyon sok lehetséges programozási hiba egyszerűen megszűnt létezni.

Fennmaradt azonban egy nagyon fontos probléma: a felhasználó által definiált típusokhoz nem lehet operátorokat definiálni, emiatt kifejezésekben nem lehet az új típusokat felhasználni. Vagyis a felhasználói adattípus kevesebbet ér, mint a gyári, eleve létező elemi típus. Ezen a szinten a nyelv fejlődése nem haladhatja meg ezt a pontot.

Hernyák Zoltán
A lap eredeti címe: „http://wiki.ektf.hu/wiki/Mp1/page004
Nézetek
nincs sb_34.234.223.162 cikk