Állományműveletek
- ADATBEVITEL- ÉS KIVITEL
Az input-output az az eszközrendszer, amit a programban akkor használunk, ha a
perifériákkal akarunk kommunikálni.
Hardverfüggő, operációs rendszer-függő, a leginkompatibilisebb része a nyelveknek.
A nyelvek egy részében nincs I/O utasítás, más nyelvekben van.
Az I/O alapja az állomány. A nyelvek gyakran kihagyják, a kommunikációt "a" perifériával
képzelik el (implicit/standard állomány). Ezt az állományt a nyelv nem kezeli explicit módon,
de a rendszer igen. Nem kell deklarálnom, megnyitnom, összerendelnem fizikai állománnyal,
lezárnom. Ilyenkor a program a szabvány bemenetről (alaphelyzetben a billentyűzet) olvas és
a szabvány rendszerkimeneti perifériára (alaphelyzetben a monitor) ír. A kimenet és a
bemenet átdefiniálható.
Logikai állomány: A program szövegében ezzel az állománnyal dolgozom. Névvel
rendelkező objektum (programozási eszköz), tehát deklarálni kell. A deklarációban a
következő jellemzőket rendelem hozzá:
- rekordformátuma,
- elérése,
- szerkezete.
Fizikai állomány: A periférián megjelenő adatállomány.
Az állomány funkciója szerint lehet:
- Input állomány: Csak olvasni lehet belőle. A feldolgozás előtt már léteznie kellett,
és utána is változatlanul létezni fog.
- Output állomány: Csak írni lehet, a feldolgozás előtt nem létezett.
- Input-output állomány: Írni és olvasni is lehet (változtatható), a feldolgozás előtt
nem feltétlenül létezik.
Az adatátvitel a tár és a periféria között a konverziótól függően lehet:
- Konverzió nélküli: Bináris (rekordmódú) adatátvitel. A adatábrázolás nem változik,
ugyanaz a bitkombináció jelenik meg mindkét helyen.
- Van konverzió: Folyamatos módú adatátvitel. Más az adatok reprezentációja a tárban és a
periférián. Mindenütt előfordul, ahol az ember kommunikál a géppel.
Az adat a periférián egy folytonos karakterlánc, a tárban pedig valamilyen reprezentáció.
Hogy a tárra képezzem le a karakterláncot, feltördelni és értelmezni kell. A tárban lévő
egyedi adatokból konverzióval és adatösszevonással képezhetek karakterláncot.
- Formátumos adatátvitel: Az író/olvasó eszközhöz kapcsolódóan minden egyes
adathoz külön speciális eszköz, a formátum áll a rendelkezésemre. Olvasásnál
megmondom, hogy a folytonos karakterláncból hány karaktert kell kiemelni onnantól,
ahol éppen állok (hosszmegadás), és hogy az adatot milyen típussal értelmezze. Írásnál
a fordítottját kell megmondani: mi az alapábrázolás és milyen hosszú karakterlánc
legyen az eredmény. Ezeket minden egyes adatnál explicit módon kell megadnom. Hiba
akkor történhet, ha az adat nem megfelelő.
- Szerkesztett adatátvitel: Az I/O eszköz mellé megadok egy maszkot. Akárhány adatot
tudok vele kezelni, a hossza végzi a tördelést. Karakterenként adom meg, a karakter
dönti el, hogy az adott helyen milyen adatot várjak. Hiba van, ha nem megfelelő az adat.
- Listázott adatátvitel: Ennél az adatátviteli módnál nincsen plusz eszköz. A tördelést a
folytonos karaktersorba helyezett speciális karakterek végzik. A konverziót az
író/olvasó eszköz intézi.
A nyelvek általában ezek keverékét alkalmazzák.
Műveletek állományokkal
- Logikai állomány deklarálása: Minden nyelv definiálja, hogy milyen
állományrendszerrel dolgozik. Deklarálásnál egy objektum jön létre, névvel,
attribútummal.
- Logikai és a fizikai állomány összerendelése: Az egyetlen szituáció, ahol a fizikai
állomány megjelenik a program szövegében. Az összerendelés történhet nyelvi eszközzel,
vagy ahol nincsenek rá nyelvi eszközök (régebbi nyelvek), a programon kívül.
- Megnyitás: Csak nyitott állománnyal lehet dolgozni. A megnyitás folyamán a
futtatórendszer ellenőrzi, hogy az összerendelt logikai és fizikai állományok jellemzői
egyeznek-e, operációs rendszer szinten rögzítődnek az információk. Az állomány funkciója
eldőlhet a deklarálásnál és a megnyitásnál is, de flexibilisebben dönthető el a megnyitásnál.
- Írás/olvasás: Az általános olvasóeszköznek meg kell adni az olvasandó állomány nevét, a
változólistát, amelynek az értékkomponensét rögzítjük az olvasás során, és sokminden
mást is (formátum, maszk, egyéb információ stb., ezek a változó típusára konvertálják az
adatot). Az általános íróeszköznek megadjuk az írandó állomány nevét, a kifejezéslistát,
amelynek az értéke adja azt az adatot, amelyet az állományba írok, de van sok más egyéb
változata is a megadásnak.
- Állomány lezárása: Sok rendszeradminisztrációs tevékenységgel jár, a könyvtári
bejegyzések is ekkor születnek meg, ha az output vagy az input-output állományokban
történik változás. Ezért az output vagy az input-output állományokat le kell, az input
állományokat illik lezárni. A rendszer a program végén mindenesetre lezárja őket.
KIVÉTELEK
A kivétel olyan esemény, szélsőséges eset, amelyre fel kell készíteni a programot az
algoritmus írásakor. A kivétel előfordulhat hiba vagy speciális, ritkán bekövetkező esemény
esetén. Egy részét szemantikai hibák váltják ki.
Operációs rendszer szinten a kivételkezelést a megszakítási rendszer végzi. Kiírja, ha hiba
történt és kivágja a programot. Kivételkezeléskor az a célom, hogy az esemény kezelését
átvegyem a rendszertől.
A kivételes események megoldására többféle módszer létezik a nyelvekben:
- Plusz paraméterekkel jelzi a program, hogy milyen speciális esemény következett be.
Ebben az esetben rengeteg paramétere van szükségünk és nem kezeli le a hibát, csak
jelzi.
- Minden speciális esemény bekövetkeztére elágazást építek be a programba. Legtöbb
esetben a rengeteg lehetséges elágazás miatt nem valósítható meg.
A kivételkezelés az a tevékenység, amit a program végez, ha kivétel történik, a kivételkezelő
pedig az a programrész, amely elindul, ha a speciális esemény bekövetkezik. Az operációs
rendszertől átveszem programszintre a megszakítás-kezelést. Kevesebb azon nyelvek száma,
ahol van kivételkezelő eszközrendszer, de a későbbiekbe általában beépítették.
A kivételkezelőre vonatkozó kérdések:
- vannak-e a nyelvben beépített kivételkezelők,
- a programozó tud-e sajátot definiálni,
- a kivételkezelőnek mik a hatásköri és élettartam szabályai (a kivételkezelés köthető-e
utasításhoz, programegységhez, kifejezéshez),
- mi történik a kivétel lekezelése után,
- tud-e a nyelv többszörös kivételeket kezelni (egy időben több esemény következik
be),
- mi történik, ha a kivételkezelőben történik a kivétel,
- az adott nyelvben van-e olyan eszköz, amellyel az összes kivételt implicit módon le
lehet kezelni,
- lehet-e általános kivételkezelőt írni, azaz paraméterezhető-e.
A PROGRAM FUTÁS KÖZBENI IMPLEMENTÁCIÓJA
Az alprogramok kezelésének egyik megközelítése, a probléma implementációfüggő.
Minden alprogram esetén futás közben híváskor felépül egy aktiváló rekord, ettől kezdve
számítjuk aktívnak az alprogramot. Az alprogram futásának végén az aktiváló rekord törlődik.
Egy alprogramnak akármennyi aktiváló rekordja lehet (pl. rekurzió).
Egyszerűbb esetekben az aktiváló rekord elemei:
- Dinamikus kapcsolók: Olyan mutató, amely a hívó alprogram aktiváló rekordjának a
kezdőcímére mutat. Célja, hogy statikus hatáskörkezelésnél a hívott alprogram szükség
esetén hozzá tudjon férni a hívó alprogram információihoz. Oda mutat, ameddig az
alprogram inaktívvá válásakor az aktiváló rekordot törölni kell. A hívási lánc
lényegében az aktiváló rekordok lánca.
- Statikus kapcsolók: Mutató, amely lerendezi a statikus hatáskörkezelés problémáját:
azon alprogram aktiváló rekordjára mutat, amely alprogram tartalmazza ezt az
alprogramot. Így tudni lehet, hogy az alprogram a globális neveket honnan kapja.
- Visszatérési cím: A kódszegmens azon utasításának a címe, ahol a programot az adott
alprogram befejezése után folytatni kell.
- Függvény esetén a visszatérési érték
- Az aktiváló rekord lokális változói
- Paraméterek
A fordítás után a gépi kódú program a megfelelő információkkal együtt bekerül a tárba. Az
aktiváló rekordok a rendszerveremben (system stack) találhatóak.
Minden egyes alprogramnak van kódrésze, ami a kódszegmensben jelenik meg. Ez az
utasításokat, a rendszerinformációkat és a konstansokat tartalmazza. A kódszegmensek
általában más, de statikus tárterületen helyezkednek el. Speciális szerepe van a főprogramnak,
mert nincs se tartalmazó, se hívó programegysége, se paramétere, de vannak lokális változói.
Van aktiváló rekordja is, a verem legaljára kerül, a főprogram lokális változóit tartalmazza.
Ha a verem üres, vége a főprogramnak.
Egy szintet vissza, vagy
vissza a főmenübe.