Аспектно-орієнтоване програмування: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Maksshal (обговорення | внесок)
мНемає опису редагування
Maksshal (обговорення | внесок)
мНемає опису редагування
Рядок 5:
Сучасні програмні системи часто вирішують величезну кількість надскладних завдань, що потребують хороших інженерних навичок від їх розробників та надійності інструментальних засобів розробки. При зростанні складності таких систем зростає і програмний код, розробнику стає все важче охопити всі деталі реалізації системи. При підтримці великих програмних засобів зростає час знаходження та виправлення помилки, ускладнюється додавання нових характеристик, оскільки стає все важче визначити наскільки зміни вплинуть на систему, чи не внесуть додаткові помилки та дефекти. Для вирішення таких завдань застосовують різноманітні інженерні засоби, як от багатофункціональні [[Інтегроване Середовище Розробки|середовища розробки]], [[Шаблони проектування програмного забезпечення|шаблони проектування]], готові програмні [[Фреймворк|каркаси]] тощо.
<br />
Часто згадуваним недоліком [[Об'є́ктноОб’єктно-орієнто́ванеорієнтоване програмува́нняпрограмування|об’єктно-орієнтованого]] підходу є неможливість локалізації наскрізної функціональності в одному класі<ref>http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.37.4987&rep=rep1&type=pdf</ref>. Як приклад такої функціональності часто називають необхідність ведення журналів подій, керування винятковими ситуаціями, перевірку прав доступу. Код, що відповідає за дану функціональність, часто розкиданий по різних класах. Це, з одного боку, не дозволяє сконцентрувати увагу на основній бізнес-логіці класу і ускладнює читання коду. З іншого боку, ускладнюється внесення змін у методи роботи наскрізної функціональності, що не завжди можна виправити правильним використанням інтерфейсів чи шаблонів проектування. Наразі аспектно-орієнтований підхід часто використовують для реалізації вищенаведених прикладів, проте, як зауважують деякі автори<ref>http://www.ibm.com/developerworks/ru/library/j-aopwork15/</ref>, на цьому сфера застосування аспектно-орієнтованого підходу не обмежуються, оскільки він може бути використаний для проектування будь-яких систем, що містять наскрізну функціональність.
<br />
В результаті наявності зайвої перехресної функціональності розроблюваний модуль містить заплутаний код, що задовольняє різні програмні вимоги. Негативні властивості такого коду<ref>http://www.nbuv.gov.ua/portal/natural/pitu/2009_2/content/archive/40-47.pdf</ref>: