Sprzężenie a spójność
Sprzęganie i spójność to dwie koncepcje występujące w Javie (i we wszystkich innych językach obiektowych). Sprzężenie mierzy, jak bardzo każdy z modułów programu jest zależny od innych modułów programu. Spójność mierzy, jak silnie każda z funkcji jest powiązana w module. Właściwie każdy język zorientowany obiektowo (w tym Java) ma dwa główne cele: zwiększenie spójności i jednoczesne zmniejszenie sprzężenia w celu tworzenia najbardziej wydajnych programów. Te dwa wskaźniki inżynierii oprogramowania zostały opracowane przez Larry'ego Constantine'a w celu zmniejszenia kosztów modyfikacji i konserwacji oprogramowania.
Co to jest spójność?
Spójność mierzy stopień powiązania poszczególnych funkcji w ramach modułu programu. Dobrze zorganizowane zajęcia prowadzą do wysoce spójnych programów. Jeśli pewna klasa wykonuje zestaw wysoce powiązanych funkcji, mówi się, że ta klasa jest spójna. Z drugiej strony, jeśli klasa wykonuje kilka całkowicie niepowiązanych ze sobą funkcji, oznacza to, że klasa nie jest w ogóle spójna. Ważne jest, aby zrozumieć, że brak spójności nie oznacza, że cała aplikacja nie ma wymaganej funkcjonalności. Tyle tylko, że bez spójności bardzo trudno będzie zarządzać funkcjonalnościami, ponieważ będą one rozproszone w wielu niewłaściwych miejscach wraz ze wzrostem złożoności aplikacji z czasem. Utrzymywanie, modyfikowanie i rozszerzanie zachowań rozsianych po całym kodzie jest bardzo żmudne nawet dla najbardziej doświadczonych programistów.
Co to jest sprzęganie?
Sprzęganie mierzy, jak bardzo każdy z modułów programu jest zależny od innych modułów programu. Interakcje między dwoma obiektami występują, ponieważ istnieje sprzężenie. Luźno powiązane programy charakteryzują się dużą elastycznością i rozszerzalnością. Silne sprzężenie nigdy nie jest dobre, ponieważ jeden obiekt może być silnie zależny od innego obiektu. Jest to koszmar, gdy kod jest modyfikowany, ponieważ wysokie sprzężenie oznacza, że programiści muszą pracować na kilku miejscach kodu nawet przy pojedynczej modyfikacji behawioralnej. Silne sprzężenie zawsze prowadzi do programów o niskiej elastyczności i mniejszej skalowalności/rozszerzalności. Jednak w językach programowania, takich jak Java, całkowite uniknięcie łączenia jest niemożliwe. Jednak zaleca się, aby programiści dołożyli wszelkich starań, aby zmniejszyć sprzężenie tak bardzo, jak to możliwe. Możliwe jest również sprzężenie, które pomoże obiektom wchodzić ze sobą w interakcję bez ograniczania ich skalowalności i elastyczności.
Jaka jest różnica między sprzężeniem a spójnością?
Mimo że sprzężenie i spójność dotyczą jakości modułu w inżynierii oprogramowania, są to całkowicie różne koncepcje. Spójność mówi o tym, jak bardzo funkcjonalności są ze sobą powiązane w module, podczas gdy łączenie dotyczy tego, jak bardzo jeden moduł jest zależny od innych modułów programu w ramach całej aplikacji. Aby mieć oprogramowanie najlepszej jakości, spójność i sprzężenie powinny sięgać dwóch przeciwległych krańców ich spektrum. Innymi słowy, luźne sprzężenie i silna spójność zapewniają najlepsze oprogramowanie. Posiadanie pól prywatnych, klas niepublicznych i metod prywatnych zapewnia luźne sprzężenie, podczas gdy wszystkie elementy członkowskie są widoczne w klasie, a domyślna widoczność pakietu zapewnia wysoką spójność.