-
Notifications
You must be signed in to change notification settings - Fork 17
exam13 2
! Вопрос не так звучит
Перед тем как начать, нужно прояснить один важный момент. Помимо слова "связность" в большинстве источников применяется также и второе - "связанность", которое хоть и звучит похоже, но отражает совершенно другую суть.
Связь слов с их английскими аналогами в интернет-источниках различается: где-то связанность - это cohesion, а связность - coupling, и наоборот; поэтому, в пределах данного реферата словам будут присвоены такие английские аналоги и трактовки, которые (по мнению автора) звучат наиболее логично. В связи с этим, четко определим термины:
- Связанность переводится как "coupling" и применяется к классам и межклассовым взаимодействиям (от слова "присоединение");
- Связность переводится как "cohesion" и применяется к содержимому классов (от слова "сплоченность").
Связанность также называют "зацеплением".
Любое программное обеспечение должно быть понятным, читаемым и легко сопровождаемым. В идеале, конечно. Высокая оценка этих параметров базируется, однако, не только на модульности и наличии комментариев в коде, но и на том, как построены взаимосвязи между элементами кода, а конкретно в данном случае - между классами.
Каждый класс должен обладать относительно высоким уровнем самостоятельности и не вызывать лавину изменений в других классах, с которыми он связан, если сам меняется каким-либо образом. Это и приводит нас к термину "связанность":
Связанность - мера взаимосвязанности программных модулей (классов) между собой, отражаемая в количестве изменений, вносимых в зависимые классы при переписывании какого-то функционала основного класса.
Существует несколько видов связанности, применяемых в различных ситуациях:
- связанность по общей области - два класса используют общую область данных;
- связанность по содержимому - некоторые или классы включены в некоторый класс как составные части;
- связанность по управлению - один класс обменивается данными с другим с явной целью повлиять на его последующее выполнение;
- связанность по данным - выходные данные одного класса служат входными данными другого класса;
- смешанная связанность - различные подмножества значений некоторого класса используются в нескольких классах для разных и несвязанных целей;
- патологическая связанность - один класс зависит от деталей внутренней реализации другого класса или влияет на нее.
Стоит отметить, что программный продукт всегда должен реализовываться по принципу слабой связанности, так как в итоге получится наименее запутанным и наиболее гибким на уровне кода.
Представим себе цех некоторого большого завода, который занимается тем, что собирает две детали в одну и передает новую составную деталь в следующий цех. Задача у его работников простая, и они не должны, к примеру, добывать материал для этих деталей, рассчитывать их прочность и прочие параметры - всем этим занимаются другие люди, который в этот цех не входят.
Точно также и с условными "работниками" класса: если существует класс, предназначенный для сравнения чисел, он не должен складывать их, умножать друг на друга или совершать иные преобразования. Для этого гораздо более логично было бы использовать другой класс.
На основе этих аналогий выведем определение термина "связность":
Связность - мера взаимосвязанности элементов внутри класса, которая определяет, насколько они однородны по своему предназначению.
Связность тоже бывает разная:
- случайная связность - задачи класса между собой не связаны;
- коммуникационная связность - задачи класса используют одни и те же входные данные, либо производят одни и те же выходные данные;
- функциональная связность - задачи класса направлены на помощь в выполнении одной и той же функции;
- логическая связность - задачи класса выполняют логически схожие функции, например, по признаку принципа их работы;
- процедурная связность - задачи класса участвуют в какой-то программной процедуре;
- последовательностная связность - задачи класса выполняются последовательно, выходные данные одной становятся входными данными другой;
- временная связность - задачи класса требуются для определенной фазы выполнения программы (инициализация окна программы, например).
Добавив к выводу из предыдущего раздела то, что модули программного продукта сами по себе должны обладать высокой связностью, мы получим принцип "низкая связанность - высокая связность", на котором строится любое нормальное программное обеспечение, и о котором ни в коем случае нельзя забывать.
! Нет части про связность или связанность ОБЪЕКТОВ (экземпляров)
Страница в Википедии о связности
Страница в Википедии о зацеплении (связанности)
Некоторые принципы разработки программ
Выполнил: Шаховцев Даниил
Проверяющий 1: Кривопалова Майя
Проверяющий 2: Иванкин Федор