Ortogonalitate

În ingineria software, un sistem este considerat ortogonal dacă modificarea uneia dintre componentele sale modifică numai starea componentei respective.

De exemplu, luați în considerare un program cu trei variabile: a, b și c. Modificarea valorii lui a nu ar trebui să schimbe valoarea lui b sau c, cu condiția să fie independente.

Această proprietate este deosebit de importantă în depanarea unui program, deoarece se bazează pe reducerea numărului de părți în mișcare ale unui program pentru a identifica cauza principală a problemei.

Vezi următorul citat din „Art of programarea UNIX” a lui Eric S. Raymond:

Ortogonalitatea este una dintre cele mai importante proprietăți care pot ajuta la compactarea chiar și a proiectelor complexe. Într-un design pur ortogonal, operațiile nu au efecte secundare; fiecare acțiune (indiferent dacă este vorba de un apel API, o invocație macro sau o operație de limbaj) se schimbă doar un lucru fără a-i afecta pe alții. Există o singură modalitate de a schimba fiecare proprietate a oricărui sistem pe care îl controlați.

Ortogonalitatea este un principiu de proiectare software pentru scrierea componentelor într-un mod în care schimbarea unei componente nu afectează alte componente. Este combinația altor două principii, și anume coeziunea puternică și cuplarea slabă.

Este de fapt un termen împrumutat din matematică. De exemplu, două linii sunt ortogonale dacă sunt perpendiculare. În proiectarea software-ului, două componente sunt ortogonale dacă o schimbare în una nu o afectează pe cealaltă.

Aplicarea acestui concept la clase sau alte secțiuni de cod are ca rezultat o mai mică cuplare. Pentru a fi ortogonale două clase nu pot depinde una de cealaltă implementare. De asemenea, nu pot partaja date globale. Schimbarea internelor unei clase nu afectează cealaltă clasă. Componentele ar trebui să fie independente și să aibă o singură responsabilitate.

Luați în considerare o metodă care citește o listă de numere dintr-un fișier și le returnează în ordine sortată. Acum cerințele se schimbă și numerele se află într-o bază de date. Modificarea acestei metode pentru a accesa baza de date ar determina modificarea codului clientului. Dacă ar fi două metode diferite, atunci o nouă sursă nu ar afecta metoda de sortare. Numai codul clientului ar trebui să știe sursa numerelor.

Coeziune puternică

În interiorul unei componente software, codul ar trebui să fie puternic conectat. Aceasta este o indicație că codul este divizat corect.

Dacă o componentă are două sau mai multe părți relativ deconectate, aceasta poate indica faptul că acele părți ar trebui să se afle într-o componentă diferită sau singură.

Cuplaj slab

Între componentele software, ar trebui să existe puține conexiuni. Dacă două componente sunt puternic cuplate, aceasta poate indica faptul că trebuie să fie o componentă sau că trebuie să fie împărțite diferit în mai multe componente.