Programowanie aspektowe

Co to jest programowanie aspektowe?

Współczesne programy coraz częściej są oparte na obiektowej technice programowania, w której poszczególne składniki programu realizują pewne funkcje i przekazują ich wyniki do dalszego przetwarzania. Obiekty zamknięte w odpowiednią otoczkę interfejsu dostępnego do modyfikacji to komponenty, które można opracowywać samodzielnie, ale można również kupić na bogatym rynku produktów komercyjnych. Komponentyzacja programowania jest konieczna również z powodu konieczności zminimalizowania rozmiarów części programów, które ma do intelektualnego ogarnięcia programista.

Złożoność całości aplikacji może wymagać tworzenia wyników, które obejmują pewne aspekty informatyzowanej rzeczywistości, wymuszające połączenia wyników z wielu komponentów. Można oczywiście tworzyć programy, które te wyniki połączą, ale często jest to związane z koniecznością wielokrotnego zapisywania w pamięci i przetwarzania wyników pośrednich. Prosty przykład to przetwarzanie obrazów za pośrednictwem ciągu filtrów w celu uzyskania żądanego efektu. Każdy filtr tworzy pośrednie wyniki o rozmiarach dziesiątków megabajtów, które łączy się w wynik końcowy za pomocą ostatecznego programu filtrowania. Łatwo zauważyć, że gdyby dało się w programie połączyć wszystkie filtry, nie trzeba by było produkować wielu wyników pośrednich (znaczne oszczędności w wielkości potrzebnej pamięci), a produkt końcowy miałby znacznie wyższą wydajność przetwarzania, gdyż nie musiałby sekwencyjnie przeglądać każdego wyniku pośredniego.

Dla doświadczonego programisty stworzenie takiego programu nie jest szczególnie trudne. Problem pojawia się z chwilą, gdy trzeba zmienić właściwości jednego z filtrów, tworzących produkt końcowy. Wtedy nawet najlepszy programista raczej napisze program końcowy od nowa, nie będzie zaś próbował znaleźć wszystkich miejsc, w których elementy tego filtru zostały "zaszyte" w programie końcowym.

Programowanie aspektowe umożliwia zdefiniowanie końcowego programu, realizującego konkretny aspekt przetwarzania z komponentów składowych, oraz pozwala na "utkanie" (weave) wydajnego programu w wybranym języku programowania (na ogół C++) za pomocą swoistego kompilatora wysokiego poziomu Aspect Weaver. Jak podaje Gregor Kiczales, w przypadku wspomnianego filtru program końcowy wieloskładnikowego filtru miał ponad 35 tys. linii kodu, zaś program do "utkania" tego samego wyniku metodami programowania aspektowego tylko ok. 700 linii.

Główna idea programowania aspektowego to modularność: zmiany w programie powinno się dokonywać tylko w jednym miejscu. Podczas gdy "obiekty" zawierają kod potrzebny do realizacji określonego zadania, "aspekty" kontrolują współdziałanie wielu obiektów. I tu właśnie leży siła tej techniki programowania w zastosowaniu do systemów masowo rozproszonych.


TOP 200