Adatvezérelt programozás

A Wikipédiából, a szabad enciklopédiából

A számítógépes programozásban az adatvezérelt programozás olyan programozási paradigma, amelyben a program utasításai az egyeztetendő adatokat és a szükséges feldolgozást írják le, az elvégzendő lépések sorozatának meghatározása helyett. Az adatvezérelt nyelvek szokásos példái a sed és az Awk szövegfeldolgozó nyelvek, ahol az adat egy bemeneti adatfolyam sorainak sorrendje - ezeket ennélfogva sor-orientált nyelveknek is nevezik - és a minták illesztése elsősorban reguláris kifejezéseken vagy sorszámokon keresztül történik.

Kapcsolódó paradigmák[szerkesztés]

Az adatvezérelt programozás hasonló az eseményvezérelt programozáshoz abban, hogy mindkettő mintázatillesztésként és az ebből eredő feldolgozásként van felépítve, és általában egy fő hurok hajtja végre, bár jellemzően különböző domainekre alkalmazzák őket. A feltétel / művelet modell az aspektusorientált programozáshoz is hasonlít, ahol egy csatlakozási pont (feltétel) elérésekor egy pointcut (művelet) kerül végrehajtásra. Hasonló paradigmát alkalmaznak egyes nyomkövetési keretrendszerekben, mint például a DTrace-ben, ahol felsoroljuk a szondákat (műszerezési pontokat) és a hozzájuk kapcsolódó műveleteket, amelyek akkor teljesülnek, amikor a feltétel teljesül.

Az absztrakt adattípus- tervezési módszerek adaptálása az objektum-orientált programozáshoz, adatvezérelt tervezést eredményez. Ezt a fajta tervezést az objektum-orientált programozásban használják néha osztályok meghatározására egy szoftver elgondolása során.

Alkalmazások[szerkesztés]

Az adatvezérelt programozást általában strukturált adatfolyamokra alkalmazzák, szűrésre, átalakításra, összesítésre (például statisztikai adatok kiszámítása) vagy más programok hívására. A tipikus adatfolyamok naplófájlokat, határolóval elválasztott értékeket vagy email üzeneteket tartalmaznak, nevezetesen az e-mailek szűrésére. Például egy AWK program bemenetként felveheti a napló utasítások adatfolyamát, és például mindet elküldheti a konzolra. A WARNING kezdetűeket egy "WARNING" fájlba írja, és küldd egy e-mailt a rendszergazdának, ha bármelyik sor "ERROR"-al kezdődik. Rögzítheti azt is, hogy mennyi figyelmeztetést naplóznak naponta. Alternatívaként feldolgozhatjuk a határolóval elválasztott értékeket, feldolgozva minden sort vagy összesített sort, mint például az összeg vagy a max. E-mail-ben, egy olyan nyelv, mint a procmail, meg tudja határozni a feltételeket, amelyeknek meg kell felelniük egyes e-maileknek, és milyen műveleteket kell végrehajtaniuk (kézbesítés, visszapattanás, eldobás, továbbítás stb.).

Néhány adatvezérelt nyelv Turing-teljes, mint például az AWK és a sed is, míg mások szándékosan nagyon korlátozottak, különösen a szűrés szempontjából. Ez utóbbira extrém példa a pcap, amely csak szűrésből áll, egyetlen művelettel, ami a "capture". Kevésbé rendkívüli, hogy a Sieve-nek vannak szűrői és műveletei, de az alapszabványban nincsenek változók vagy hurkok, csak állapotmentes szűrési utasításokat engedélyez: minden bemeneti elem függetlenül kerül feldolgozásra. A változók engedélyezik az állapotot, amely lehetővé teszi az egynél több bemeneti elemtől függő műveleteket, például az összesítést (a bemenetek összegzését) vagy a fojtást (óránként legfeljebb 5 levelet engedélyezhet minden egyes küldőtől, vagy korlátozhatja az ismétlődő naplóüzeneteket).

Az adatvezérelt nyelveknek gyakran van alapértelmezett művelete: ha egyetlen feltétel sem felel meg, akkor a sor-orientált nyelvek kinyomtathatják a sort (mint a sed-ben), vagy üzenetet küldhetnek (mint a sieve-ben). Néhány alkalmazásban szűrés esetén, az egyeztetés kizárólagosan végezhető (tehát csak az első egyező utasítás), míg más esetekben az összes egyező utasítást alkalmazzuk. Mindkét esetben, ha bármely minta nem felel meg, az lehet "alapértelmezett viselkedés", vagy tekinthető hibának, amelyet a "catch-all" utasítás fog el.

Előnyök és problémák[szerkesztés]

Míg az előnyök és a kérdések megvalósításonként változhatnak, ennek a programozási paradigmának van néhány nagy potenciális előnye és problémája. A funkcionalitás egyszerűen megköveteli, hogy ismerje a változók absztrakt adattípusát, amelyekkel dolgozik. A függvényeket és interfészeket minden objektumon tudjuk használni, ugyanazokkal az adatmezőkkel, mint például az objektum "pozíciójával". Az adatokat csoportosíthatjuk objektumokra vagy "entitásokra" preferencia szerint, csekély következménnyel.

Míg az adatközpontú tervezés megakadályozza az adatok és a funkcionalitás összekapcsolását, egyes esetekben az adatvezérelt programozás vitatottan rossz objektum-orientált tervezéshez vezet különösen, ha absztraktabb adatokkal van dolgunk. Ez amiatt van, hogy a tisztán adatvezérelt objektumot vagy entitást az ábrázolásának módja határozza meg. Az objektum szerkezetének megváltoztatására tett bármely kísérlet azonnal megszakítja az arra támaszkodó funkciókat.

Példaként bemutathatjuk a menetirányokat, mint kereszteződések sorozata (két egymást keresztező utca), ahol a sofőrnek kötelező jobbra vagy balra fordulnia. Ha egy kereszteződést (az Egyesült Államokban) az adatokban irányítószámmal (ötjegyű szám) és két utcanévvel (szövegsorok) jelölünk, akkor hibák jelenhetnek meg abban az esetben, ha olyan városra találunk, ahol az utcák többször keresztezik egymást. Bár ez a példa túlságosan leegyszerűsített lehet, az adatok átalakítása egy viszonylag gyakori probléma a szoftverfejlesztésben, akár a hibák kiküszöbölésében, a hatékonyság növelésében, vagy az új funkciók támogatása érdekében történik.

Programozási nyelvek[szerkesztés]

Fordítás[szerkesztés]

Ez a szócikk részben vagy egészben a Data-driven programming című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Kapcsolódó szócikk[szerkesztés]

További információk[szerkesztés]