Zpo-12-wyk-Slajd5
Nisza aspektowa
Wydaje się, że programowanie obiektowe jest skuteczną odpowiedzią na problem modularyzacji. Podkreślana w tym paradygmacie zasada odpowiedzialności nakazywała podział systemu na obiekty, natomiast mechanizmy dziedziczenia, polimorfizmu oraz składania klas pozwalały w różny sposób łączyć klasy we współpracujące grupy.
Okazuje się jednak, że istnieją takie modele rzeczywistości, które bardzo trudno podzielić na moduły. W większości przypadków dotyczy to sytuacji, w których przyjęte kryterium podziału (np. funkcjonalne) okazuje się być nie jedynym, ale jednym z wielu. Często przywoływanym przykładem jest problem zapisywania informacji o wydarzeniach w systemie (logowania). Wywołanie metody logującej pojawia się wówczas niemal w całym systemie, bez względu na przeznaczenie poszczególnych jego elementów. Próba modyfikacji kodu logującego wymaga skomplikowanych, pracochłonnych i narażonych na błędy operacji na wielu fragmentach kodu w systemie
Pojawia się zatem zapotrzebowanie na mechanizm, który umożliwi osiągnięcie pełnej modularyzacji systemu niezależnie od liczby kryteriów podziału.