Аспектно-ориентированное программирование

visibility 826
18 Нояб 2019г. в 05:44

Аспектно-ориентированное программирование (АОП) – относительно новая парадигма программирования, появившаяся в начале этого тысячелетия. Пройдя по ссылке и прочитав краткий обзор на эту тему, можно долго думать и гадать, а что же такое АОП, и какие цели преследовали те самые сотрудники Xerox, которые ее разрабатывали. Обратите внимание, как заметно отличается объем статьи в Википедии, кратко повествующей об АОП от объема статьи про объектно-ориентированное программирование (ООП), концепции которого известны практически всем разработчикам программного обеспечения? Ну да, АОП, судя по тексту, призвано упростить процесс разделения целевой и второстепенной функциональности, которую здесь называют сквозной. Но ведь одной из главных целей создания всех парадигм программирование, и ООП в том числе, является абстрагирование программиста от специфики общения с вычислительной техникой и концентрация его аналитических усилий на целевой функциональности создаваемой им программы. Т.е. на первый взгляд ничего нового. С ООП ведь все всем понятно: есть реальный мир, есть объекты реального мира, есть их функциональные и информационные аспекты. С какой стати в общении с вычислительной машиной мы должны обходиться банальными последовательностями операторов, хоть и сгруппированных в процедуры и функции и размещенных в отдельных модулях? Вот и решили ввести в языки программирования понятие объект с его свойствами, методами, инкапсуляцией и т.д. А там мысль уже было не остановить, и появились наследование, полиморфизм, шаблоны и т.п. Т.е. все логично. А теперь обратимся к АОП. Здесь отнюдь не все так очевидно, но это и понятно, потому как все гениальное уже придумали, и осталось лишь выдумывать модификации того, что имеем, и выдавать их за нечто уникальное и оригинальное. На самом деле я не хочу сказать, что АОП не заслуживает внимания, напротив, в основе этой концепции лежат вполне себе разумные идеи. Я просто хотел заметить, что все новые идеи на фоне того же ООП уже не выглядят чем-то революционным, и по этой причине их могут незаслуженно обделить вниманием. Примером этому служит весьма скромный объем заметки в Википедии. А ведь есть еще и субъектно-ориентированное программирование… Возможно даже такое, что кто-нибудь, видя аббревиатуру АОП, думает, что это опечатка.

Необходимость общения на иностранном языке – аспект, оказывающий серьезное влияние на весь процесс пребывания за границей…И все же, возвращаясь к теме этой статьи, я попытаюсь простым языком изложить суть аспектно-ориентированного программирования (читайте выделенный текст). Приведу пару примеров из жизни и затем “притяну их за уши” к философии рассматриваемой парадигмы. Рассмотрим, к примеру, процесс приема пищи. Цель этого процесса всем понятна, но его окружение может быть весьма разнообразным, например: обед дома, обед в ресторане и обед в заведении с самообслуживанием, например в столовой. Окружение диктует свои правила, и эти правила, если следовать терминологии АОП, являют собой аспект окружения целевого действа. В первом случае до приема пищи вы ее должны купить в магазине и приготовить, а то, что происходит после приема – определяется особенностями поведения индивида. Во втором случае: приходим, изучаем меню и делаем заказ. После платим по счету и, возможно, оставляем “на чай” официанту. В третьем случае сначала стоим в очереди с подносом, потом оплачиваем то, что показалось нам съедобным, а то, что происходит после завершения основного процесса, как и в первом случае, никем не регламентируется, разве что в некоторых местах заставляют убирать за собой. Вот три разных контекста, три разных окружения или три разных аспекта


целевого процесса приема пищи. И именно методику отделения целевой функциональности от функциональности аспекта окружения - сквозной функциональности предлагает АОП. Аналогично можно привести примеры различных аспектов окружения, рассмотрев процесс покупки чего-либо, например: в магазине, в интернете или на аукционе.Спецодежда – еще один пример аспекта повседневной жизни...

Также, особенности пребывания в конкретной стране за пределами родины можно отнести к сквозной функциональности по отношению к самой туристической поездке. Последний пример даже более наглядный, поскольку в этом случае аспект вбирает в себя все особенности нашего окружения в процессе того, как мы делаем покупки, ужинаем в ресторане или занимаемся еще чем-либо за рубежом. Например, то, что мы общаемся с людьми - является целевой функциональностью, а то, что нам приходится делать это на иностранном языке – сквозной функциональностью аспекта пребывания в конкретной стране. На самом деле любые примеры можно назвать удачными или неудачными и с любыми примерами спорить. Вызвано это тем, что в реальном мире мы постоянно меняем окружение и сами не замечаем, как принимаем правила каждого нового аспекта. Цель АОП – предоставить способы эффективно отделять целевую функциональность от сквозной, с тем чтобы без лишних затрат менять второе и сохранять первое, или переносить целевую функциональность из одного окружения в другое.

Как говорят сами авторы, в первую очередь к сквозной функциональности любого программного окружения следует относить такие вещи, как ведение журналов операций (трассировки) и журналов исключительных ситуаций, авторизацию пользователей и процесс проверки прав доступа, форматирование текстовых сообщений, процедуры управления памятью и формирования “КЭШа” часто используемых данных, а также, выделение прочих вычислительных ресурсов. Не буду здесь приводить терминологию АОП, поскольку как раз эта часть в достаточной мере отражена в той же Википедии, но все же отмечу, что для основных объектно-ориентированных языков программирования уже разработаны расширения, позволяющие реализовывать концепции аспектно-ориентированного программирования на практике. К ним относятся AspectJ, Aspect.NET, AspectC++ и т.д.



Оставить комментарий

Ваше имя::


Комментарий::




Ничего не найдено