Sprzężenie a spójność
Łączenie i spójność to dwie koncepcje znalezione w Javie (i we wszystkich innych językach obiektowych). Sprzężenie mierzy, jak bardzo każdy moduł programu jest zależny od innych modułów programu. Spójność mierzy, jak mocno każda z funkcji jest powiązana w module. W rzeczywistości każdy obiektowy język (w tym Java) ma dwa główne cele: zwiększenie spójności i jednoczesne zmniejszenie sprzężenia, w celu opracowania 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 utrzymania oprogramowania.
Co to jest spójność?
Spójność mierzy, jak silnie powiązane są wszystkie funkcje w module programu. Dobrze zorganizowane klasy prowadzą do bardzo spójnych programów. Jeśli pewna klasa wykonuje zestaw ściśle powiązanych funkcji, klasa ta jest uważana za spójną. Z drugiej strony, jeśli klasa wykonuje szereg całkowicie niepowiązanych funkcjonalności, oznacza to, że klasa w ogóle nie jest spójna. Ważne jest, aby zrozumieć, że brak spójności nie oznacza, że ogólna aplikacja nie ma wymaganej funkcjonalności. Po prostu bez spójności bardzo trudno będzie zarządzać funkcjonalnością, ponieważ zostaną one rozproszone w wielu niewłaściwych miejscach wraz ze wzrostem złożoności aplikacji. Utrzymywanie, modyfikowanie i rozszerzanie zachowań rozproszonych po całym kodzie jest bardzo nużące nawet dla najbardziej doświadczonych programistów.
Co to jest łączenie?
Sprzężenie mierzy, jak bardzo każdy moduł programu jest zależny od innych modułów programu. Interakcje między dwoma obiektami występują, ponieważ występuje 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ć wysoce zależny od jakiegoś innego obiektu. To koszmar, gdy kod jest modyfikowany, ponieważ wysokie sprzężenie oznacza, że programiści muszą pracować nad kilkoma miejscami kodu, aby nawet jedną modyfikację behawioralną. 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 sprzężenia jest niemożliwe. Zaleca się jednak, aby programiści dołożyli wszelkich starań, aby maksymalnie ograniczyć sprzężenie. Możliwe jest także pewne sprzężenie, które pomaga obiektom oddziaływać na siebie bez ograniczania jego 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 zupełnie inne koncepcje. Spójność mówi o tym, jak bardzo funkcjonalność jest ze sobą powiązana w module, natomiast sprzężenie dotyczy tego, jak bardzo jeden moduł jest zależny od innych modułów programu w całej aplikacji. Aby mieć oprogramowanie najlepszej jakości, spójność i sprzężenie powinny sięgać dwóch przeciwnych krańców ich spektrum. Innymi słowy, luźne połączenie i silna kohezja zapewnia najlepsze oprogramowanie. Posiadanie pól prywatnych, niepublicznych klas i metod prywatnych zapewnia luźne łączenie, a jednocześnie sprawia, że wszyscy członkowie są widoczni w klasie, a posiadanie pakietu jako domyślnej widoczności zapewnia wysoką spójność.