Inverze abstrakce - Abstraction inversion
Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto problémech na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
v programování, abstrakční inverze je anti-vzor vznikající, když uživatelé konstrukce potřebují funkce implementované v ní, ale nejsou jí vystaveny rozhraní. Výsledkem je, že uživatelé znovu implementují požadované funkce z hlediska rozhraní, které zase využívá interní implementaci stejných funkcí. To může mít za následek implementaci funkcí na nižší úrovni, pokud jde o funkce na vyšší úrovni, tedy termín „inverze abstrakce“.
Možné nežádoucí účinky jsou:
- Uživatel takové znovu implementované funkce může vážně podcenit své provozní náklady.
- Uživatel konstrukce je nucen zakrýt jejich implementaci složitými mechanickými detaily.
- Mnoho uživatelů se pokouší vyřešit stejný problém, což zvyšuje riziko chyby.
Příklady
Mezi údajné příklady z profesionálních programátorských kruhů patří:
- v Ada, výběr z setkání konstruovat jako synchronizační primitivní přinutil programátory implementovat jednodušší konstrukce, jako je semafory na složitějším základě.[1]
- v Applesoft BASIC, celé číslo aritmetika byla implementována nad aritmetika s plovoucí desetinnou čárkou a nebyly žádné bitové operátory a žádná podpora pro blitting z rastrová grafika (i když jazyk podporoval vektorovou grafiku na rastrovém hardwaru Apple II). To způsobilo, že hry a další programy napsané v BASICu běžely pomaleji.
- Stejně jako Applesoft BASIC, Lua má jako jediný číselný typ typ s plovoucí desetinnou čárkou[2] při konfiguraci pro stolní počítače,[3] a před Lua 5.2 neměl bitové operátory.[4]
- Vytváření objektu, který představuje funkci, je těžkopádné objektově orientovaný jazyky jako Jáva a C ++ (zejména před C ++ 11 a Java 8), ve kterých funkce nejsou prvotřídní objekty. V jazyce C ++ je možné objekt „vyvolat“ přetížením
()
operátor, ale stále je často nutné implementovat novou třídu, například Funktory v STK. (C ++ 11 Funkce lambda výrazně usnadňuje vytvoření objektu představujícího funkci.) - Tom Lord to navrhl Podvracení systém řízení verzí platí za abstrakční inverzi implementace databáze pouze pro zápis do databáze pro čtení / zápis se špatným výkonem.[5]
- Použitím uložené procedury manipulovat s daty v relační databázi, aniž by programátorům udělila právo na nasazení takových postupů, vede k opětovnému implementaci dotazů mimo databázi. Například jsou načteny velké datové sady (v extrémních případech - celé tabulky) a skutečné filtrování probíhá v kódu aplikace. Alternativně se tisíce řádků aktualizují (vkládají nebo dokonce načítají) jeden po druhém místo spuštění dotazu s více řádky.
Příklady, které jsou běžné mimo profesionální programovací kruhy, zahrnují:
- Použití funkcí vyhledávání tabulek k replikaci funkcí databáze
- Použití variantních datových typů jako čítačů smyček v Microsoft Visual Basic, kde je k dispozici také celočíselný typ.
Viz také
Reference
- ^ Kritika definice jádra DIN Lisp verze 1.2, poznámka pod čarou 2 - říká (bez odkazů), že tento termín pochází z kritiky Ady setkání, se jeví jako jedno z prvních použití.
- ^ Programování v Lua: 2.3 - Čísla Zpřístupněno 12. 10. 2009.
- ^ lua-users c2: Floating Point Zpřístupněno 12. 10. 2009.
- ^ lua-users c2: Bitwise Operators Zpřístupněno 15. 1. 2013.
- ^ sourcefrog: Tom Lord on Subversion
externí odkazy
- Abstrakční inverze v Portlandském úložišti vzorů - rozsáhlá diskuse, hodně z toho vyžaduje „abstrakční inverzi“ ve smyslu „skryté složitosti“