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 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):
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:David A. Schmidt, The structure of typed programming languages, MIT Press, 1994, , p. 32
Története és változatai 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."Alfred John Cole, Ronald Morrison, An introduction to programming with S-algol, CUP Archive, 1982, , p. 150 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".Bruce J. MacLennan, Principles of programming languages: design, evaluation, and implementation, Holt, Rinehart, and Winston, 1983, p. 53 Jon Pearce (1998) Programming and Meta-Programming in Scheme: "A szerkezetnek és a funkciónak függetlennek kell lennie".Jon Pearce, Programming and meta-programming in scheme, Birkhäuser, 1998, , p. 40
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”.Alan Shalloway, James Trott, Design patterns explained: a new perspective on object-oriented design, Addison-Wesley, 2002, , p. 115
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”.Kent Beck, Extreme programming explained: embrace change, 2nd edition, Addison-Wesley, 2000, , p. 61 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”.Chromatic, Extreme programming pocket guide, O'Reilly, 2003,
Következmények 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 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 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.Koziol, The Shellcoders Handbook", Wiley, 2004, p. 10,
Hivatkozások
Fordítás
Kategória:Szoftverfejlesztési módszertanok