Свързаност (програмиране)

В програмирането под свързаност или зависимост (на английски: coupling или dependency) се разбира степента, в която един програмен модул разчита на друг програмен модул. Свързаността може да бъде „висока“ или „ниска“. Ниска свързаност имаме когато един модул не е нужно да се бъде заинтересован от вътрешната имплементация на друг модул, и взаимодейства с него чрез стабилен интерфейс (виж капсулиране). При този вид свързаност промяна в имплементацията на един модул не изисква модификация в имплементацията на друг модул. Ниската свързаност е знак на добре структурирана компютърна система. Обаче за да се постигне максимална ефективност най-вероятно е нужно системата да бъде с по-висока свързаност. В модерните компютърни системи производителността често може да бъде по-ниска за сметка на по-ниско свързване — това е така понеже изгодите при самия процес на разработка са по-високи от колкото изгодите от производителността по време на самото използване на системата.

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

Съществуват следните видове свързаност (от най-ниска към най-висока):

  • Даннова свързаност (Data coupling) – налице е когато модулите споделят данни, например чрез параметри. Всяка данна е елементарна и представлява единствената информация, която модулите си споделят (например подаване на цяло число на функция, която изчислява квадратен корен).
  • Свързаност чрез структурирани данни (Stamp coupling/Data-structured coupling) – когато модулите споделят една композитна структура от данни, като никой от тях не знае каква част от структурата ще бъде използвана от другия (например подаване на запис за студент на функция, която калкулира неговия среден успех).
  • Контролна свързаност (Control coupling) – един модул контролира логиката на друг чрез подаване на информация какво да прави (например подаване на флаг, указващ избор на конкретно поведение от няколко алтернативи).
  • Външна свързаност (External coupling) – възниква когато два модула споделят външно наложен формат на данните, комуникационен протокол или интерфейс на устройство.
  • Свързаност чрез общи данни (Common coupling) – налице е когато два модула споделят едни и същи глобални данни (например глобална променлива).
  • Свързаност по съдържание (Content coupling) – когато един модул променя или разчита на вътрешното поведение на друг модул (например достъпване на данни, локални за друг модул)
  • В Обектно-ориентираното програмиране наследствената свързаност (subclass coupling) описва специален случай на свързаност между родителски клас и неговия наследник. Родителският клас няма никаква връзка със своя наследник, така че тази свързаност е еднопосочна (т.е. родителят е напълно функционален клас сам по себе си). Трудно е да се определи дали този тип свързаност е ниска или висока – в повечето случаи зависи от конкретната ситуация.

Свързаността обикновено се контрастира с кохезията. Ниската свързаност често означава висока кохезия и обратното – висока свързаност предполага наличие на ниска кохезия. Тези измерители на качеството на софтуера – свързаността и кохезията, са въведени от Лари Константин, оригиналния автор на Структурния дизайн.

Зависимостта е често срещано понятие когато се говори за менажиране на софтуерните пакети. За да може един софтуерен пакет да работи или да бъде напълно функционален, той може да зависи от други пакети. Тези други пакети следва да са инсталирани и техните специфични версии трябва да бъдат опознати ако е нарушена обратната съвместимост при прехода между версиите. Пакетният формат Apt както и някои версии на пакетния формат RPM включват и информация за зависимостите между пакетите. Това е голямо удобство при осъвременяването на софтуера но може да доведе до „Ад на зависимостите“.

Системи за изграждане като Make също работят на база зависимости в смисъла, че един по-комплексен обект (като компютърна програма), бива свързан само след като всички обекти, от които зависи, са вече изградени (например обектите, които включва в себе си).

Вижте също редактиране

    Тази страница частично или изцяло представлява превод на страницата Dependency_(computer_science) в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​