Введение

Аспект программы — это функциональность, связанная со многими другими частями программы, но не относящаяся к её основной задаче. Аспект пронизывает основные области программы, тем самым нарушая принцип разделения ответственности, который стремится к инкапсуляции несвязанных функций. Например, код логирования может пронизывать множество модулей, однако аспект логирования должен быть отделен от функциональных задач модуля, который он пронизывает. Изоляция таких аспектов, как логирование и сохранение данных, от бизнес-логики является основой парадигмы аспекто-ориентированного программирования (AOP). Аспекто-ориентация не ограничивается программированием, поскольку она полезна для выявления, анализа, отслеживания и модульного представления задач на этапах сбора требований, спецификации и проектирования. Аспекты могут быть многомерными, позволяя как функциональному, так и нефункциональному поведению пронизывать любые другие задачи, а не только сопоставлять нефункциональные требования с функциональными. Одна из точек зрения на аспекто-ориентированную разработку программного обеспечения заключается в том, что каждая основная функция программы, основная задача (бизнес-логика) или сквозная задача (дополнительные функции) является аспектом, и, объединяя их (процесс, также называемый композицией), в конечном итоге создается целое из отдельных аспектов. Этот подход известен как чистое аспекто-ориентированное программирование, но гибридные подходы более распространены. Функциональные задачи могут пронизывать нефункциональные или функциональные задачи (например, потребность в дополнительных функциях может снизить мобильность). Унифицированный подход к представлению и композиции, аналогичный чистому подходу в AOP, называется многомерным представлением.