Absztrakciós elv (számítógép-programozás)

A szoftverfejlesztésben és a programozási nyelvek elméletében az absztrakciós elv (vagy az absztrakció elve) egy olyan alapelv, amelynek célja, hogy amikor csak lehetséges, csökkentsük a kétszeres információt a programban (általában a kódismétlődésre helyezve a hangsúlyt) a programozási nyelv vagy a szoftverkönyvtárak által biztosított absztrakciók felhasználásával. Az elvet néha a programozónak szóló ajánlásként, néha azonban a programozási nyelv követelményeként fogalmazzák meg, feltételezve, hogy magától értetődő, miért kívánatos az absztrakciók használata. Az elv eredete bizonytalan; többször is újra kijelentették, néha más név alatt, kisebb eltérésekkel.

A programozónak szóló ajánlásként értelmezve az absztrakciós elv általánosítható a „ne ismételd magad” elveként, amely általánosságban az információ, továbbá a szoftverfejlesztési folyamathoz kapcsolódó emberi erőfeszítések megkettőzésének elkerülését tartja szem előtt.

Az elv szerkesztés

A programozónak szóló ajánlásként Benjamin C. Pierce Types and Programming Languages (2002) című könyvében az absztrakciós elv a következőképpen szól (kiemelés az eredetiben):[1]

A program minden jelentős funkcióját csak egyetlen helyen kell megvalósítani a forráskódban. Ha különböző kódrészletek hasonló funkciókat hajtanak végre, akkor általában előnyös ezeket egyetlen egységbe kombinálni, az eltérő részeket pedig absztrakttá tenni.

A programozási nyelvvel szemben támasztott követelményként az absztrakciós elv a David A. Schmidt által a The structure of typed programming languages (1994) című könyvben megfogalmazott formában a következőképpen hangzik:[2]

Bármely szemantikailag értelmes szintaktikai osztály mondatai megnevezhetők.

Története és változatai szerkesztés

Az absztrakciós elv ezen a néven számos könyvben jelenik meg. Egy szükségszerűen hiányos lista, rövid megfogalmazással együtt:

  • Alfred John Cole, Ronald Morrison (1982) An introduction to programming with S-algol: "[Az absztrakció] a nyelvtervezésre alkalmazva azt jelenti, hogy meghatározzuk a nyelv összes szemantikailag értelmes szintaktikai kategóriáját, és lehetővé tesszük az ezek feletti absztrakciót."[3]
  • Bruce J. MacLennan (1983) Principles of programming languages: design, evaluation, and implementation: "Kerülje el, hogy valamit többször megfogalmazzon; távolítsa el az ismétlődő mintákat".[4]
  • Jon Pearce (1998) Programming and Meta-Programming in Scheme: "A szerkezetnek és a funkciónak függetlennek kell lennie".[5]

Az elv központi szerepet játszik az objektumorientált programozás tervezési mintáiban, bár a témával foglalkozó írások többsége nem nevezi meg az elvet. A Design Patterns kimondja: „A hangsúly itt a változó koncepció egységbe zárásán van, amely számos tervezési minta témája”. Ezt a kijelentést más szerzők így fogalmazták át: „Találd meg, ami változik, és foglald egységbe”.[6]

A 21. században az extrém programozásban újra feltalálták az elvet az „egyszer és csak egyszer” (Once and Only Once) szlogen alatt. Ez az elv első megjelenésekor meglehetősen tömör volt: „ne legyen ismétlődő kód”.[7] Később a szoftverfejlesztés más oldalaira is kiterjesztették: „Automatizálj minden olyan folyamatot, amelyet érdemes automatizálni. Ha azon találod magad, hogy egy feladatot többször elvégzel, szkripteld le”.[8]

Következmények szerkesztés

Az absztrakciós elvet gyakran valamilyen, az absztrakciót megkönnyíteni hivatott mechanizmussal összefüggésben fogalmazzák meg. A vezérlés absztrakciójának alapvető mechanizmusa a függvény vagy szubrutin. Az adatabsztrakciók közé tartoznak a típuspolimorfizmus különböző formái. Az adat- és vezérlési absztrakciókat kombináló, bonyolultabb mechanizmusok közé tartoznak az absztrakt adattípusok, beleértve az osztályokat, a politipizmus stb. A programozási nyelvek kutatásának és tervezésének egyik hajtóereje a gazdagabb absztrakciók keresése, amelyek kevesebb ismétlődést eredményeznek komplex forgatókönyvekben is.

A tapasztalatlan programozók hajlamosak lehetnek túl sok absztrakciót bevezetni a programjukba – olyanokat, amelyet csak egyszer fognak használni. Egy kiegészítő elv, amely ezt a kérdést hangsúlyozza, a „Nem lesz rá szükséged” és általánosabban a KISS elv.

Mivel a kódot általában tovább fejlesztik, az absztrakciós elv követése a kód refaktorálását vonhatja maga után. Egy kódrészlet újraírásával járó erőfeszítést az absztrakció becsült jövőbeli előnyeivel szemben kell amortizálni. Az erre vonatkozó hüvelykujjszabályt Martin Fowler dolgozta ki, és a hármas szabály néven népszerűsítette: eszerint, ha egy kódrészletet több mint kétszer másolnak, azaz a végén három vagy több másolata lesz, akkor azt absztrakt kóddá kell alakítani.

Általánosítások szerkesztés

A „Ne ismételd önmagad”, avagy a DRY-elv a többrétegű architektúrák kontextusára alkalmazott általánosítás, ahol a kapcsolódó kódot szükségszerűen bizonyos mértékig megkettőzik a szintek között, esetleg különböző nyelveken. A gyakorlatban ajánlott, hogy az ismétlések elkerülése érdekében támaszkodjunk automatizált eszközökre, például kódgenerátorokra és adattranszformációkra.

Hardver programozási interfészek szerkesztés

A kód tökéletesítésén kívül a hierarchikus/rekurzív absztrakciós szint a hardveres kommunikációs rétegek közötti interfészekre is utal, amelyeket absztrakciós szinteknek és absztrakciós rétegeknek is neveznek. Ebben az esetben az absztrakciós szint gyakran az interfész szinonimája. Például a shellcode és a magasabb és alacsonyabb szintű nyelvek közötti interfész vizsgálata során az absztrakciós szint az operációs rendszer parancsaitól (például a C-ben) a regiszter- és áramköri szintű hívásokig és parancsokig (például assembly) változik. Az utóbbi példa esetében az absztrakciós szintek közötti határ vagy interfész a verem.[9]

Hivatkozások szerkesztés

  1. Pierce, Benjamin. Types and Programming Languages. MIT Press, 339. o. (2002). ISBN 0-262-16209-1 
  2. David A. Schmidt, The structure of typed programming languages, MIT Press, 1994, ISBN 0-262-19349-3, p. 32
  3. Alfred John Cole, Ronald Morrison, An introduction to programming with S-algol, CUP Archive, 1982, ISBN 0-521-25001-3, p. 150
  4. Bruce J. MacLennan, Principles of programming languages: design, evaluation, and implementation, Holt, Rinehart, and Winston, 1983, p. 53
  5. Jon Pearce, Programming and meta-programming in scheme, Birkhäuser, 1998, ISBN 0-387-98320-1, p. 40
  6. Alan Shalloway, James Trott, Design patterns explained: a new perspective on object-oriented design, Addison-Wesley, 2002, ISBN 0-201-71594-5, p. 115
  7. Kent Beck, Extreme programming explained: embrace change, 2nd edition, Addison-Wesley, 2000, ISBN 0-201-61641-6, p. 61
  8. Chromatic, Extreme programming pocket guide, O'Reilly, 2003, ISBN 0-596-00485-0
  9. Koziol, The Shellcoders Handbook", Wiley, 2004, p. 10, ISBN 0-7645-4468-3

Fordítás szerkesztés

Ez a szócikk részben vagy egészben az Abstraction principle (computer 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.