A távoli akció a számítógép-programozás egyik antimintája. Lényege, hogy a program egy részének működésére erőteljes hatással van a program egy másik része, és ez a kapcsolat nehezen visszanyomozható, nehéz meghatározni, hogy ki és hogyan hat.

Megelőzhető megfelelő tervezéssel, ami nem használ globális változókat, az adatokat helyileg és ellenőrzött módon változtatja. Egy másik módszer a funkcionális programozás használata, hivatkozási átlátszósággal.

Az angol elnevezés a fizikai távolbahatással von párhuzamot, amikor két részecske közvetítő részecske, például gluon nélkül hat kölcsön. Albert Einstein úgy hivatkozott a kvantum nemlokalitásra, mint kísértő akcióra a távolból.

Ha egy komponens valamit rosszkor csinál, vagy olyan adatot módosít, amit nem kellene, akkor programhibát okozhat. A hibáért felelős komponenst nagyon nehéz, vagy akár lehetetlen megtalálni. Ártalmatlan akciók mellékhatásai ismeretlen állapotba helyezhetik a programot, így a helyi adatok nem biztos, hogy helyiek. A megoldás annak a meghatározása, hogy mely komponenseknek kell egymásra hatniuk. Egy megfelelő terv meghatározza azt az interfészt, melyen keresztül az egyes programelemek elérhetik egymást, és elkerüli, hogy legyen egy globális, mindenki számára elérhető és módosítható állapot; ezzel elkerülve a távoli akciót.

Példa szerkesztés

Mark Jason Dominus alábbi példája a Perl programnyelvről szól. Eredetije a Sins of Perl Revisited című könyvben jelent meg. A távoli akció egy súlyos problémát okozó esetét mutatja be:

A Perl nyelvben a tömbök indexelése rendszerint nulláról indul, mivel $[ alapértelmezett értéke nulla. Ha a $[ értékét egyre állítod, akkor az indexelés egyről indul, ami boldoggá teszi a Fortran programozókat. Láthatunk példákat a perl(3) man oldalán:

foreach $num ($[ .. $#entry) {
  print "  $num\t'",$entry[$num],"'\n";
}

Az $[ értéke beállítható 17-re, így a tömbök indexelése egy tetszőleges számról, 17-ről vagy 4-ről kezdődik, 0 vagy 1 helyett. A modulszerzők nagyszabású szabotálása.

Szerencsére felismerték, hogy ez a lehetőség hiba. A perl5-porters levelezőlistán az efféle lehetőségeket távoli akcióknak nevezik. Az elv az, hogy a program egy részében levő deklarációnak nem kellene drasztikusan és láthatatlanul hatnia a program más részeinek viselkedésére.[1]

Távoli akciók objektumokon keresztül szerkesztés

Megfelelő objektumorientált tervezéssel a távoli akciók elkerülhetők.

A legkisebb tudás elve szerint egy objektum csak a közeli ismerőseivel kerülhet közvetlen kapcsolatba. Ha egy távoli részről kell valami információ, akkor azt továbbítani kell. A megfelelő tervezés erősen korlátozza a távoli akciók lehetőségét, és segíti karbantartható programok fejlesztését. Objektumtobzódás készítésére való nyomás rosszul átgondolt interfészből adódik. Vagy nem tartja be a legkisebb tudás elvét, vagy isten objektumot valósít meg, és nem használ valódi objektumokat.

A funkcionális programozás jól kezeli ezt a problémát. Vannak nyelvek, amelyekben meg sem lehet fogalmazni ilyet.

A korrekt, megbízható és fenntartható programok fejlesztéséhez ügyelni kell arra, hogy ne kerüljön távoli akció a tervbe, és fejlesztés közben is észre kell tudni venni, ha netán mégis előfordul. Számítani kell arra, hogy a program életciklusának nagy részét a karbantartási szakaszban fogja tölteni, a távoli hívás elkerülése megéri az erőfeszítést, hogy a program fenntartása ne legyen költséges, bonyolult és ne járjon sok hibával.

Jegyzetek szerkesztés

Források szerkesztés

Fordítás szerkesztés

Ez a szócikk részben vagy egészben az Action at a distance (computer programming) című angol Wikipédia-szócikk 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.