Aspektově orientované programování

DEFINICE Aspektově orientované programování představuje relativně nový způsob, jak realizovat společnou nebo podobno...


DEFINICE
Aspektově orientované programování představuje relativně nový způsob, jak
realizovat společnou nebo podobnou funkčnost, kterou vyžadují různé části
programu. Programátoři popíší vyžadované chování v modulech, kterým se říká
aspekty, a pak je pomocí speciálních mechanismů AOP složí do souvislého
programu.
Abychom snáze pochopili aspektově orientované programování (AOP,
Aspect-Oriented Programming), vysvětleme si jeho principy na příkladu. Vezměme
si 2 modely odborových organizací ve Spojených státech. Starší American
Federation of Labor (AFL) organizovala dělníky vertikálně podle jejich řemesla
nebo odvětví průmyslu, ve kterém pracovali. Velký podnik tedy musel jednat s
desítkami odborových svazů, kde každý z nich zastupoval určitou skupinu
dělníků. Oproti tomu mladší Congress of Industrial Organizations (CIO) zřídila
pro danou průmyslovou oblast jediný svaz všech zaměstnanců bez ohledu na
odvětví, v nichž zaměstnanci pracovali.
V AFL potřeboval každý odborový svaz své vlastní funkcionáře a organizátory a
každý musel s vedením závodu vyjednávat samostatně. Horizontální přístup CIO
protínal celé spektrum různých průmyslových odvětví. Dokázal poskytovat podobné
služby a výhody hromadně všem zaměstnancům závodu.
Tradiční programovací metodologie, a to i strukturované a objektově orientované
přístupy, jsou ve své podstatě vertikální nebo hierarchické jako model AFL.
Každá aplikace obsahuje množství společných operací, které se kvůli malým
rozdílům ve své logice, způsobu jejich ovládání, jiným modulům, kterými jsou
ovlivňovány a na které působí, a také datům, která používají, musejí
programovat zvlášť. Záměrem AOP je podívat se na tyto operace a abstrahovat od
skutečného způsobu využití tak, aby mohla být každá z nich vyvolána odkudkoliv.

Volání metod
AOP používá nový typ softwarového modulu, jemuž se říká aspekt a který jde
napříč tradičními třídami a organizačními modely. AOP v podstatě využívá toho,
že každý objektově orientovaný program, ať je navržen dobře nebo špatně,
obsahuje určitá volání metod, která se objevují na několika místech programu.
Volání metod předávají řízení specifickému uzavřenému podprogramu v rámci
daného programu. Pokud změníte volání určité metody nebo jejího podprogramu pro
zpracování chyb, může být potřeba provést změny při každém výskytu volání, což
bude patrně vyžadovat stovky či tisíce manuálních úprav. Takové křížové
odkazování obvykle nastává při distribuci, synchronizaci, zpracování chyb,
prosazování definovaných politik a optimalizaci výkonu, ale také u mnoha
běžných vzorů návrhu.
Před vznikem AOP bylo pro vývojáře těžké vyrovnat se s tímto chováním, protože
samostatné kódy nebo části identických či téměř identických kódů byly
rozptýleny v mnoha různých modulech. AOP vám umožní jednou naprogramovat aspekt
a pak jej opakovaně používat. V AOP jsou obsaženy funkce, které přemění více
tříd do opakovaně použitelných modulů. Interpreter, kompilátor nebo preprocesor
pak vhodně kombinují aspekty a třídy.
V některých vývojářích vyvolává tento přístup obavy, protože pokud provedete
změnu v aspektu, obvykle nelze přesně zjistit, které moduly změna ovlivní.
Avšak rozšíření AOP o vlastnosti integrovaného vývojového prostředí tento
problém řeší a umožňuje prohlížet příčnou strukturu aspektů.
3D programování
Od počátku svého vzniku programovací jazyky a příslušné metodologie používaly
různé druhy modulárních konstrukcí, jako jsou podprogramy, funkce, procedury a
objekty.
Díky modularitě je jednodušší psát a ladit programy a opakovaně používat části
kódů. Dřívější formy modularity však byly převážně hierarchické vrstvy knihoven
procedur, grafy objektově orientovaných tříd a další. AOP k tomuto modelu
přidává možnost pracovat s modulární strukturou, která jde napříč těmito
hierarchiemi.
Další způsob, jak pohlížet na AOP programování, je vztáhnout jej k
dimenzionalitě. Procedurově orientované programování se zabývá všemi vztahy
(funkcemi nebo požadavky) lineárně. Přestože můžeme přemísťovat části kódu do
různých funkcí, celý proces stále řídí hlavní řetězec. Toto je lineární,
jednorozměrný model.
Jestliže použijeme objektově orientované programování, můžeme pomocí
počítačového jazyka ukázat svět mnohem přirozeněji, a to tak, že popíšeme různé
objekty a jejich funkce. Spojení mezi různými funkcemi vytváří síť. Tento model
můžeme považovat za dvourozměrný.
Metoda AOP si uvědomuje, že tento model potřebuje více dimenzí, protože křížové
odkazování nebo distribuovaný kód vytváří další spojení, která v dvourozměrném
prostředí nemohou být zmapována. AOP propojuje prvky programu do trojrozměrného
modelu, aniž by narušila již existující spojení či vztahy.

Slovník
Advice: Kód, který běží, jsou-li splněny určité podmínky. Advice umožní na
objektový model transparentně aplikovat funkce jako vytváření žurnálu a metriky.
Aspect: Konstrukce připomínající třídy. Pracuje s funkcemi nebo požadavky,
které jdou napříč třídami. Aspekt může obsahovat metody a pole, rozšiřovat jiné
třídy nebo aspekty a implementovat rozhraní.
Concern: Určitá funkce nebo požadavek důležitý pro systém, který může nebo by
mohl být implementován ve struktuře kódu. Rozsah funkcí a požadavků se pohybuje
od koncernů vyšší úrovně, jako je zabezpečení nebo kvalita služeb, po nižší
koncerny, jako je caching a buffering. Mohou být funkční, jako například
obchodní pravidla, nebo systémové jako synchronizace nebo správa transakcí.
Crosscutting: Dvě funkce nebo požadavky (koncerny) se kříží, pokud se metody,
které se k nim vztahují, protínají. Aspekt jde napříč hranicemi tradičních tříd
a metod tak, že v obou používá stejný kód.
Interceptor: Používá se k implementaci advice v JBoss 4.0, oblíbeném javovém
aplikačním serveru.
Introduction: Způsob, jak přidat metody nebo pole k existující třídě, vnést
vícenásobnou dědičnost do jednoduché javové třídy nebo připojit nové API k
existujícímu objektovému modelu. Používá se v JBoss 4.0.
Joinpoints: Body nebo smyčky v provádění programu, které mohou být rozšířeny
nebo k nimž lze přidat nová chování. Joinpoints by například mohly definovat
volání specifických metod ve třídě.
Metadata: Dodatečné informace, které mohou být připojeny ke třídě nebo danému
příkladu objektu, buď staticky, či za běhu programu. Metadata jsou nápomocná,
když se píšou skutečně obecné aspekty, které mohou být aplikovány na jakýkoliv
objekt, avšak logika potřebuje znát informace specifické pro třídu.
Pointcuts: Programové konstrukty, které označují jointpoints a na těchto bodech
shromažďují určitý kontext.
Weave: Vložení individuální funkce nebo požadavku (koncernu) do procesu
křížením různých fragmentů logiky; umožní provedení programu podle určitých
dodaných kritérií.

Nástroje AOP
Příklad toho, co aspektově orientované programování dokáže, popisuje v článku
"Aspect-Oriented Programming" Gregor Kiczales a kolektiv autorů z výzkumného
střediska Xerox PARC (Palo Alto Research Center; text lze nalézt na adrese
http://www.parc.com/re search/csl/projects/aspectj/down
loads/ECOOP1997-AOP.pdf). Autoři v něm píší o komponentě systému optického
rozpoznávání znaků, k jehož čisté a jednoduché implementaci stačilo napsat
pouze 768 řádek kódu. Po přidání optimalizace výkonu a dalších faktorů včetně
speciálních pomocných datových struktur se reálná komponenta rozrostla na 35
213 řádek spletitého kódu, který šlo jen velmi obtížně udržovat. Po jeho
přepsání pomocí aspektově orientovaných metod se kód zkrátil na 1 039 řádek a
přitom si uchoval většinu svých výkonnostních výhod.
Hlavním nástrojem AOP, který je v současné době k dispozici, je AspectJ, což je
rozšíření jazyka Java vyvinuté koncem devadesátých let minulého století v Xerox
PARC. Příručku pro jeho používání lze nalézt na adrese www.eclip
se.org/technology/index.html. Také společnost IBM vytvořila nástroj AOP
založený na Javě, a to Hyper/J.Tool Command Language (TcL) a jeho rozšířenou
verzi XoTcL, které rovněž využívají AOP. Dalšími oblastmi, jež souvisejí s AOP,
jsou adaptivní programování, kompoziční filtry, multidimenzionální oddělování
funkcí a požadavků a subjektově orientované programování.









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.