Gyakorlati alapok
Algoritmusvezéreltség - eseményvezéreltség
Az előző, Ami már eddig is nagyon hiányzott: az adatbekérés című fejezet nagyon fontos mozzanatot vezetett be a programozásba: a felhasználó képes volt beavatkozni a program futásába. Kissé humorosan fogalmazva: ez volt az 1. alkalom, amikor a program kíváncsi volt a felhasználó véleményére. A vélemény kérése persze sokszor kényszer eredménye, hiszen a program olyan további, bemeneti adatokat vár, amelynek nincs birtokában.
A felhasználó beavatkozásának jellege szempontjából a programok 2 csoportba oszthatók:
-
algoritmusvezérelt,
-
eseményvezérelt.
Algoritmusvezéreltség
Ebbe a típusba tartozó programok algoritmusai szabályszerűen futnak, végrehajtva kiszabott feladatukat és ha szükséges, kérdeznek valamit a felhasználótól, ezután pedig futnak tovább, mint Forest Gump kocogásőrületének kellős közepén. Látható, hogy lényegében a felhasználó csakis akkor tud a program futásába beavatkozni, ha a program erre „engedélyt ad”, azaz ha a programozó által adatbekérés vagy beavatkozási pont lesz implementálva. A vezérlés ilyen módon teljesen algoritmikus, ellene a felhasználó igen keveset tehet, kivéve, ha lecsapja a biztosítékot, ami ugye nem egy elegáns programleállítás.
Úgy is fogalmazhatunk: az algoritmus a főnök (közvetve valójában a programozó), a felhasználó csak a néha megkérdezett beosztott.
Eseményvezéreltség
Az eseményvezérelt programozással a későbbiekben, a grafikus felületek programozásánál fogunk találkozni, bár ha ezeket a sorokat képesek vagyunk elolvasni, akkor bizonyos, hogy számítógépünk (vagy mobileszközünk) operációs rendszerének indításával egyúttal már sok eseményvezérelt programot indítottuk be.
Vegyük például az MS Word szövegszerkesztő programot!
A program indítása után egy olyan jól ismert felhasználói felület áll fel...
Forrás - Source: www.microsoft.com
...amely a felhasználó beavatkozásainak tucatjait engedi meg.
A beavatkozás mozzanatának talán legfontosabb tulajdonsága az, hogy ezt a felhasználó bármikor és bármelyik dedikált pontban megteheti. Ezáltal a program funkcionális működését már nem algoritmus, hanem maga a felhasználó irányítja. Úgy is fogalmazhatunk: a felhasználó a főnök, a sok algoritmus csak végrehajtja a felhasználó által kért eseményeket.
Nyilvánvaló, hogy programozási feladattól függően néha az egyik, máskor a másik megoldásra van szükségünk.
Maradva a "klasszikus" szövegszerkesztő funkcionalitásnál, meglehetősen nehéz volna egy szövegszerkesztő programot algoritmusvezérelten megírni. De továbblépek és megkockáztatom a kijelentést, miszerint funkcionális értelmetlenség lenne. Talán éppen egy szövegszerkesztő program az, amely leginkább igényli a felhasználói szabadságot:
-
én most gépelek,
-
javítok,
-
törlök,
-
formázok,
-
ellenőrzök,
...és mindezt tetszőleges időben, sorrendtől függetlenül.
Ezzel párhuzamosan az is káoszba és így balesetbe fulladna, ha útkereszteződés jelzőlámpa-vezérlő algoritmusa...
Forrás - Source: Google Play
...eseményvezérelten működne, hiszen akkor (az elvet szigorúan követve) minden érkező autó eseményt jelentene. Ha van tipikus algoritmusvezérelt program, akkor a jelzőlámpa-vezérlés az. A vezérlést teljes egészében és abszolút determináltan az algoritmus irányítja, a felhasználó nem, vagy csak nagyon korlátozottan képes működésébe beavatkozni. Ez utóbbi már az algoritmusvezéreltség "enyhén eseményvezérelt" változata: gondoljunk csak olyan útkereszteződésekre, ahol a gyalogos jelezheti átkelési szándékát, amely persze nem jelenti azt, hogy a megnyomás pillanatában minden azonnal pirosra fog váltani:
Eseményvezérelt programokkal először majd a Gyakorlati alapok IV. - Végre ablakozunk! (AWT, Swing, JavaFX) című fejezetcsomagban fogunk találkozni.