Ортогональність в програмній інженерії

Ортогональність

У програмній інженерії система вважається ортогональною, якщо зміна одного з її компонентів змінює стан лише цього компонента.

Наприклад, розглянемо програму з трьома змінними: a, b і c. Зміна значення а не повинна змінювати значення b або c, за умови, що вони незалежні.

Ця властивість особливо важлива при налагодженні програми, оскільки для визначення першопричини проблеми покладається на звуження кількості рухомих частин програми.

Дивіться наступну цитату з “Мистецтва програмування UNIX” Еріка С.Реймонда:

Ортогональність - одна з найважливіших властивостей, яка може допомогти зробити навіть складні конструкції компактними. У чисто ортогональному дизайні операції не мають побічних ефектів; кожна дія (будь то виклик API, виклик макросу чи мовна операція) змінює лише одне, не впливаючи на інші. Існує один і лише один спосіб змінити кожну властивість будь-якої системи, якою ви керуєте.

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

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

Застосування цієї концепції до класів чи інших розділів коду призводить до меншого зв’язку. Бути ортогональними два класи не можуть залежати від реалізації один одного. Вони також не можуть обмінюватися глобальними даними. Зміна внутрішніх елементів одного класу не впливає на інший клас. Компоненти повинні бути незалежними та нести лише одну відповідальність.

Розглянемо метод, який зчитує список чисел із файлу і повертає їх у відсортованому порядку. Тепер вимоги змінюються, і цифри знаходяться в базі даних. Зміна цього методу для доступу до бази даних призведе до зміни клієнтського коду. Якби це були два різні методи, то нове джерело не вплине на метод сортування. Тільки код клієнта повинен знати джерело номерів.

Сильна згуртованість

Всередині програмного компонента код повинен бути міцно пов'язаний. Це свідчить про те, що код правильно розділений.

Якщо компонент мав дві або більше відносно від'єднаних частин, це може означати, що ці частини повинні бути в іншому компоненті або самостійно.

Слабке зчеплення

Між компонентами програмного забезпечення має бути мало зв’язків. Якщо два компоненти міцно пов'язані між собою, це може свідчити про те, що вони повинні бути одним компонентом, або що їх потрібно по-різному розділити на більше компонентів.