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 feltalálták, néha más néven, 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 az információ megkettőzésének elkerülését ajánlja általánosságban, valamint a szoftverfejlesztési folyamathoz kapcsolódó emberi erőfeszítések megkettőzésének elkerülését.
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):[1]
„ | A program minden jelentős funkcióját a forráskód egyetlen helyén kell megvalósítani. Ha hasonló funkciókat különböző kódrészletek hajtanak végre, akkor általában előnyös ezeket a különböző részeket egy absztrakt kóddá alakítani. | ” |
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
Az absztrakciós elv ugyanezen a néven jelenik meg könyvek hosszú sorában. Itt egy szükségszerűen hiányos listát közlünk, 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 kelljen megfogalmazni; vegye figyelembe az ismétlődő mintát".[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 Négyek bandájának befolyásos könyve, a Gang of Four, kimondja: "A hangsúly itt a változatos koncepció egységbezárására helyeződik, ami számos tervezési minta témája". Ezt a kijelentést más szerzők átfogalmazták: "Találd meg, ami változik, és zárd be".[6]
Ebben az évszázadban ezt az elvet az extrém programozásban az "Egyszer és csak egyszer" szlogen alatt újra feltalálták. Ennek az elvnek a meghatározása első megjelenésekor meglehetősen tömör volt: "nincs ismétlődő kód".[7] Később kidolgozták, hogy a szoftverfejlesztés más kérdéseire is alkalmazható legyen: "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
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: 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 komplex forgatókönyvekben kevesebb ismétlődést tesznek lehetővé.
A tapasztalatlan programozók hajlamosak lehetnek túl sok absztrakciót bevezetni a programjukba - olyan absztrakciót, 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 átdolgozásnak vetik alá, az absztrakciós elv követése a kód átdolgozását vonhatja maga után. Egy kódrészlet generikus ú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 magad" vagy a "DRY-elv" egy olyan általánosítás, amelyet a többszintű architektúrák kontextusában fejlesztettek ki, ahol a kapcsolódó kódot szükségszerűen bizonyos mértékig megkettőzik a szintek között, általában különböző nyelveken. Gyakorlati szempontból ajánlott, hogy az ismétlések elkerülése érdekében támaszkodjunk az automatizált eszközökre, például kódgenerátorokra és adattranszformációkra.
Hardver programozási interfészek
A kód optimalizálásán kívül az absztrakciós szint hierarchikus/rekurzív jelentése a programozásban 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 az assembly és a bináris nyelven) változik. A példa esetében az absztrakciós szintek közötti határ vagy interfész a verem.[9]
Hivatkozások
- ↑ Pierce, Benjamin. Types and Programming Languages. MIT Press, 339. o. (2002). ISBN 0-262-16209-1
- ↑ David A. Schmidt, The structure of typed programming languages, MIT Press, 1994, ISBN 0-262-19349-3, p. 32
- ↑ Alfred John Cole, Ronald Morrison, An introduction to programming with S-algol, CUP Archive, 1982, ISBN 0-521-25001-3, p. 150
- ↑ Bruce J. MacLennan, Principles of programming languages: design, evaluation, and implementation, Holt, Rinehart, and Winston, 1983, p. 53
- ↑ Jon Pearce, Programming and meta-programming in scheme, Birkhäuser, 1998, ISBN 0-387-98320-1, p. 40
- ↑ Alan Shalloway, James Trott, Design patterns explained: a new perspective on object-oriented design, Addison-Wesley, 2002, ISBN 0-201-71594-5, p. 115
- ↑ Kent Beck, Extreme programming explained: embrace change, 2nd edition, Addison-Wesley, 2000, ISBN 0-201-61641-6, p. 61
- ↑ Chromatic, Extreme programming pocket guide, O'Reilly, 2003, ISBN 0-596-00485-0
- ↑ Koziol, The Shellcoders Handbook", Wiley, 2004, p. 10, ISBN 0-7645-4468-3
Fordítá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.