Ортогоналност в софтуерното инженерство

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

В софтуерното инженерство системата се счита за ортогонална, ако промяната на един от нейните компоненти променя само състоянието на този компонент.

Например, помислете за програма с три променливи: a, b и c. Промяната на стойността на a не трябва да променя стойността на b или c, при условие че те са независими.

Това свойство е особено важно при отстраняване на грешки в програма, тъй като се разчита на стесняване на броя на движещите се части на програма, за да се идентифицира основната причина за проблема.

Вижте следния цитат от „Изкуството на UNIX програмирането” на Ерик С. Реймънд:

Ортогоналността е едно от най-важните свойства, което може да помогне дори сложните дизайни да бъдат компактни. В чисто ортогонален дизайн операциите нямат странични ефекти; всяко действие (независимо дали става дума за извикване на API, извикване на макрос или езикова операция) променя само едно, без да засяга другите. Има един и единствен начин да промените всяко свойство на която и да е система, която контролирате.

Ортогоналността е принцип на софтуерния дизайн за писане на компоненти по начин, по който промяната на един компонент не засяга други компоненти. Това е комбинацията от два други принципа, а именно силна сплотеност и свободно свързване.

Това всъщност е термин, заимстван от математиката. Например, две линии са ортогонални, ако са перпендикулярни. В софтуерния дизайн два компонента са ортогонални, ако промяната в единия не засяга другия.

Прилагането на тази концепция към класове или други раздели на кода води до по-малко свързване. За да бъдат ортогонални, два класа не могат да зависят един от друг. Те също не могат да споделят глобални данни. Смяната на вътрешните елементи на един клас не засяга другия клас. Компонентите трябва да са независими и да имат само една отговорност.

Помислете за метод, който чете списък с числа от файл и ги връща в сортиран ред. Сега изискванията се променят и номерата са в база данни. Промяната на този метод за достъп до базата данни ще доведе до промяна на клиентския код. Ако това бяха два различни метода, тогава нов източник няма да повлияе на метода на сортиране. Само клиентският код трябва да знае източника на номерата.

Силна сплотеност

Вътре в софтуерен компонент кодът трябва да е силно свързан. Това е индикация, че кодът е правилно разделен.

Ако даден компонент е имал две или повече относително несвързани части, това може да означава, че тези части трябва да са в различен компонент или сами по себе си.

Разхлабено съединение

Между софтуерните компоненти трябва да има малко връзки. Ако два компонента са силно свързани, това може да означава, че те трябва да бъдат един компонент или че трябва да бъдат разделени по различен начин на повече компоненти.