Cuplare vs coeziune
Cuplarea și coeziunea sunt două concepte găsite în Java (și în toate celel alte limbaje orientate obiect). Cuplarea măsoară cât de mult depinde fiecare dintre modulele de program de celel alte module de program. Coeziunea măsoară cât de puternic sunt legate fiecare dintre funcții în cadrul unui modul. De fapt, orice limbaj orientat obiect (inclusiv Java) are cele două obiective principale de a crește coeziunea și de a scădea cuplarea în același timp, pentru a dezvolta programe cât mai eficiente. Aceste două valori de inginerie software au fost dezvoltate de Larry Constantine pentru a reduce costurile de modificare și întreținere a software-ului.
Ce este coeziunea?
Cohesion măsoară cât de puternic sunt legate fiecare dintre funcții în cadrul unui modul de program. Clasele bine structurate duc la programe foarte coezive. Dacă o anumită clasă îndeplinește un set de funcții înrudite, se spune că acea clasă este coerentă. Pe de altă parte, dacă o clasă realizează o grămadă de funcționalități total nelegate, înseamnă că clasa nu este deloc coerentă. Este important să înțelegeți că a nu avea coezivitate nu înseamnă că aplicația generală nu are funcționalitatea necesară. Doar că, fără coeziune, va fi foarte dificil să gestionezi funcționalitatea, deoarece acestea vor fi împrăștiate în multe locuri greșite, pe măsură ce complexitatea aplicației crește în timp. Menținerea, modificarea și extinderea comportamentelor împrăștiate pe tot codul este foarte obositoare chiar și pentru cei mai experimentați programatori.
Ce este cuplarea?
Coupling măsoară cât de mult depinde fiecare dintre modulele de program de celel alte module de program. Interacțiunile dintre două obiecte apar deoarece există cuplare. Programele slab cuplate sunt foarte flexibile și extensibile. Cuplarea puternică nu este niciodată bună, deoarece un obiect poate fi foarte dependent de un alt obiect. Acesta este un coșmar atunci când codul este modificat, deoarece cuplarea ridicată înseamnă că programatorii trebuie să lucreze pe mai multe locuri de cod, chiar și pentru o singură modificare comportamentală. Cuplarea puternică duce întotdeauna la programe cu flexibilitate scăzută și scalabilitate/extensibilitate mai mică. Cu toate acestea, în limbaje de programare precum Java, evitarea completă a cuplării este imposibilă. Dar se recomandă ca programatorii să depună toate eforturile pentru a reduce cât mai mult cuplajul. De asemenea, este posibil să existe o oarecare cuplare pentru a ajuta obiectele să interacționeze între ele fără a le împiedica scalabilitatea și flexibilitatea.
Care este diferența dintre cuplare și coeziune?
Chiar dacă cuplarea și coeziunea se ocupă de calitatea unui modul în inginerie software, acestea sunt concepte complet diferite. Cohesion vorbește despre cât de mult sunt legate între ele funcționalitățile din cadrul modulului, în timp ce cuplarea se ocupă de cât de mult depinde un modul de celel alte module de program din întreaga aplicație. Pentru a avea software de cea mai bună calitate, coeziunea și cuplarea ar trebui să ajungă la cele două capete opuse ale spectrului lor. Cu alte cuvinte, cuplarea slabă și coeziunea puternică oferă cel mai bun software. Având câmpuri private, clase non-publice și metode private oferă o cuplare slăbită, în timp ce face toți membrii vizibili în cadrul clasei și având pachetul ca vizibilitate implicită oferă o coeziune ridicată.