Перейти до вмісту

Розмежування повноважень

Матеріал з Вікіпедії — вільної енциклопедії.

Розмежування повноважень (англ. Separation of concerns) - це загальна концепція вирішення проблем, яка дозволяє розділити комплексність проблеми на легші для вирішення підпроблеми. В основі цього підходу лежить розрахунок на те, що вирішення цих підпроблем можна скласти відносно легко, щоб отримати рішення початкової проблеми[1].

Розмежування повноважень як поняття було введено Е. Дейкстрою як відповідь на проблему контролю постійно зростаючих програм. На практиці цей принцип фактично відповідає пошуку правильної декомпозиції або модуляризації проблеми. При цьому модулі можуть бути виражені в різних представленнях бути вираженими в різних представленнях (навіть в межах одного додатку) може допомогти полегшити їх розв'язання.

Протягом багатьох років пошук кращих та більш досконалих представлень призвів до появи різних технологій, серед яких добре відомі методи модуляризації, такі як функціональна декомпозиція та об'єктна орієнтація.

Хоча раніше цей принцип зазвичай слугував для структурування функціональності програм, останнім часом він також застосовується для розділення функціональних і нефункціональних вимог. Прикладами таких нефункціональних вимог є розподіл, відмовостійкість та безпека. Такі проблеми часто важко врахувати в окремих модулях, використовуючи класичні об'єктно-орієнтовані технології. в окремих модулях, використовуючи класичні об'єктно-орієнтовані методи. Код що відповідає за відмовостійку поведінку, наприклад, не є чітко відокремленим в одному класі або методі, а пронизує багато класів і методів[2].

Приклади

[ред. | ред. код]

Предметно-орієнтоване програмування

[ред. | ред. код]

Предметно-орієнтоване програмування, дозволяє вирішувати проблему[en] як окремі програмні конструкції, кожна з яких має однакову вагу. Кожне з них забезпечує власну структуру класів, у яку організуються спільні об'єкти, і додає стан та методи до об'єднаного результату, де вони перетинаються. Правила відповідності описують, як класи та методи різних проблем пов'язані один з одним у точках їх взаємодії, дозволяючи отримати складну поведінку методу з декількох занепокоєнь.

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

[ред. | ред. код]

Аспектно-орієнтоване програмування дозволяє вирішувати наскрізні занепокоєння як основні. Наприклад, більшість програм потребують певної форми забезпечення безпеки та логування. Хоча безпека та логування часто є вторинними занепокоєннями, їх необхідно враховувати на етапі проектування. Аспекти дозволяють реалізувати це ефективно. Наприклад, аспект може забезпечити, що виклики певного API завжди реєструються, або помилки завжди логуються у випадку виключення, незалежно від того, як програмний код обробляє це виключення.

Рівні аналізу в штучному інтелекті

[ред. | ред. код]

У когнітивних науках та штучному інтелекті часто використовують рівні аналізу Девіда Марра:

  1. Що саме потрібно обчислити?
  2. Який алгоритм використовується?
  3. Як цей алгоритм реалізований у апаратному забезпеченні.

Це розділення нагадує принципи інтерфейсу/реалізації у програмній інженерії.

Примітки

[ред. | ред. код]
  1. Mens, Tom; Wermelinger, Michel (2002-09). Separation of concerns for software evolution. Journal of Software Maintenance and Evolution: Research and Practice. Т. 14, № 5. с. 311—315. doi:10.1002/smr.257. ISSN 1532-060X. Процитовано 30 грудня 2024.
  2. Bruschi, Danilo; De Win, Bart; Monga, Mattia (20 травня 2006). Introduction to software engineering for secure systems. Proceedings of the 2006 international workshop on Software engineering for secure systems. ACM. с. 1—2. doi:10.1145/1137627.1137628. Процитовано 30 грудня 2024.