Главная · Карта сайта · Поиск · Статьи · Компьютерные курсы · Обучающие программы · Открытые проекты · Веб-программирование · Создание интернет-сайта · Полезные ссылки · Глоссарий · Контакты · Декабрь 09 2016 22:15:37
Последнее опубликованное

Что такое Model-View-Controller
Pattern Model-View-Controller

Как создать свой веб-сайт
Как создать свой сайт в интернете

Разное
Статистика

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


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

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

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

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

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



Компьютерные курсы и курсы программирования
Основы программирования

Курс для начинающих программистов на C# и VB.NET.

SQL 25™

Построение SQL запросов и работа с базой данных.

C# Quick Guide™

Программирование на C#. Краткое руководство.

RegEx

Применение регулярных выражений.

Plug-in архитектура

Примеры программной Plug-in архитектуры.

XML и его расширения

Язык разметки XML и его расширения с примерами.

HTML и разметка гипертекста

Языки HTML, XHTML и CSS с примерами разметки.

Основы веб-дизайна

Основы веб-дизайна: решения типовых задач верстки.

Программирование на PHP

Руководство по программированию на PHP для начинающих.

Справочные материалы

Шаблоны проектирования
Каталог шаблонов проектирования программных компонентов.

Рефакторинг кода
Каталог приемов рефакторинга программного кода.

Гость
Имя

Пароль



Забыли пароль?
Запросите новый здесь
.
Coding Craft. Все права защищены © 2011. Проект Инициативного Народного Фронта Образования - ИНФО-проект.