
- •1.Роботи в області аспектно-орієнтованого програмування
- •2.1.Еволюція методологій розробки пз
- •2.2.Система як набір функціональних вимог
- •2.3.Наскрізна функціональність в системі
- •3.Введення в аоп
- •3.1.Основні концепції аоп
- •3.2.Переваги використання аоп
- •3.3.Недоліки аспектного підходу
- •3.4.Aspectj як одна з реалізацій аоп
- •3.5.Інші реалізації аоп
- •Висновок
- •Список літератури
3.2.Переваги використання аоп
АОП допомагає уникнути вищезазначених проблем, викликаних заплутаним і розосередженим кодом. Нижче представлені додаткові переваги АОП, що надаються:
Поліпшення декомпозиції системи на окремі модулі: АОП дозволяє інкапсулювати функціональність, яка не може бути представлена у вигляді окремої процедури або компоненту. АОП дозволяє реалізувати кожну вимогу окремо з мінімальним скріпленням, в результаті виходить модуль, що містить дану вимогу до системи без зовнішніх зайвих залежностей, навіть якщо це вимога — крізна функціональність. При такій реалізації модулі містять мінімальну кількість дубльованого коду. Оскільки кожна вимога реалізується окремо, це дозволяє уникнути заплутаного коду. В результаті виходить система, яку легко розуміти і підтримувати.
Спрощення супроводу програмної системи і внесення до неї змін: Оскільки можуть існувати модулі, на які можуть впливати аспекти, стає досить легко додавати нову функціональність шляхом створення нових аспектів. Більш того, якщо додається новий модуль в систему, то існуючі аспекти починають впливати і на нього без додаткових зусиль. При використанні АОП системний архітектор може відкласти рішення, що стосуються потенційно можливих вимог, оскільки згодом ці рішення зможуть бути реалізовані як окремі аспекти, що не торкнеться існуючої функціональності.
Поява можливостей повторного використання коду, що реалізовує крізну функціональність: Виходить з того, що при використанні АОП крізна функціональність може бути реалізована у вигляді аспектів і у вигляді модулів.
Технологія винесення крізної функціональності в окремі аспектні модулі стала важливим еволюційним кроком в розвитку таких концепцій як абстракція і повторне використання програмного коду. Ідеї абстракції і повторного використання коду займають одне з центральних місць в програмуванні.
Абстракція — це метод, за допомогою якого розробники вирішувати складні проблеми, послідовно розбиваючи їх на простіші. Потім можна використовувати наявні готові рішення отриманих типових простих проблем як будівельні блоки, з яких розробники отримують рішення, придатні для реалізації повсякденних складних проектів [7] .
Повторне використання не менш важливий для розробки ПО, оскільки цей чинник є метою, до якої спрямована технологія розробки за своєю природою [7]. В процесі еволюції методологій розробки ПО було придумано декілька методів повторного використання коду і концепцій розробки ПО:
Раніше інших з'явився метод повторного використання, заснований на технології "скопіюй і встав", або, простіше кажучи, на вставці в нові програми фрагментів раніше створених програм. Даний підхід є абсолютно неефективним, крім того, він не дає ніяких скільки-небудь помітних якісних переваг з погляду абстракції коду.
Гнучкіший метод повторного використання полягає в повторному використанні алгоритмів. Відповідно до цього методу, розробник може використовувати будь-який одного разу розроблений алгоритм.
Функціональне повторне використання програмного коду і повторне використання структур даних дозволяють забезпечити безпосереднє повторне використання абстракції коду.
Двома розширеннями концепції повторного використання коду є бібліотеки функцій і API. Вони представляють розробникові отримати повний пакет функціональності, доступний для всіх подальших застосувань без необхідності копіювання програмного коду із застосування в застосування [7].
В ході розвитку об'єктно-орієнтованих мов програмування був здійснений величезний стрибок вперед в області абстракції і повторного використання програмного коду. За допомогою ООП була створена ціла плеяда високопродуктивних методів його створення. Проте зростання складності програмних систем привело до того, що з'явилася необхідність в повторному використанні крізної функціональності. Тому з'явилася потреба в новому підході повторного використання коду, який би охопив цей тип функціональності і вирішив би проблеми, які не могли вирішити попередні підходи.
Для ілюстрації важливості повторного використання коду в таблиці 1 приведена порівняльна характеристика з [7] різних підходів до повторного використання.
Метод |
Повторне використання |
Абстракція |
Універсальність підходу |
Копіювання і вставка |
Дуже погано |
Відсутній |
Дуже погано |
Структури даних |
Добре |
Тип даних |
Середньо — добре |
Функціональність |
Добре |
Метод |
Середньо — добре |
Типові блоки коду |
Добре |
Що типізується |
Добре |
Алгоритми |
Добре |
Формула |
Добре |
Класи |
Добре |
Дані + Метод |
Добре |
Бібліотеки |
Добре |
Функції |
Добре — дуже добре |
API |
Добре |
Класи утиліт |
Добре — дуже добре |
Компоненти |
Добре |
Групи класів |
Добре — дуже добре |
Шаблони проектування |
Відмінно |
Вирішення проблем |
Дуже добре |
Крізна функціональність |
Середньо — добре |
Відсутній |
Погано |
|
|
|
|
У стовпці "Абстракція" даної таблиці вказана суть, для якої виконується абстракція, а в стовпці "Універсальність підходу" показано те, наскільки легко застосувати існуючий метод, не удаючись до змін або переробки коду. Показник ступеня повторного використання дуже сильно залежить від ефективності застосування того або іншого методу на практиці.
Можна сказати що, слабосвязанная реалізація крізної функціональності — це ключ до реального повторного використання коду. АОП дозволяє отримати менш зв'язану реалізацію, чим ООП. При використанні цієї парадигми програмування повинно витрачатися менше часу на супровід і внесення змін в готовий програмний код, тому роль АОП стає все важливішою.
АОП не є заміною існуючих технологій. Навпаки, також як процедурне програмування використовується в об'єктно-орієнтованому програмуванні (ООП) для реалізації поведінки об'єктів, АОП використовує існуючі підходи для реалізації своїх модулів — аспектів, тобто виконує роль розширення, що дозволяє забезпечити модуляризацию крізної функціональності. Залежно від технології і мови програмування відповідна реалізація АОП володітиме різними можливостями.