Ugrás a tartalomhoz

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

A Wikipédiából, a szabad enciklopédiából
A lap korábbi változatát látod, amilyen Pallor (vitalap | szerkesztései) 2021. május 2., 18:29-kor történt szerkesztése után volt. Ez a változat jelentősen eltérhet az aktuális változattól. (Szoftverfejlesztési módszertanok kategória hozzáadva (a HotCattel))

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

  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

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.