Найти в Дзене
Квант

Low Coupling (низкая связность) и High Cohesion (высокое зацепление)

Low coupling - Низкая связность Coupling - [ˈkəp(ə)lɪŋ] - связность "Low coupling" (Низкая связность) - это термин, используемый в программной инженерии для описания степени взаимозависимости между различными модулями или компонентами системы. Он относится к тому, насколько один модуль взаимодействует с другим модулем через простой и стабильный интерфейс и не нуждается в заботе о внутренней реализации другого модуля. Другими словами, низкая связность указывает на то, что каждый модуль, класс или компонент должен иметь как можно меньше зависимостей, а изменение одного модуля должно иметь мало или никакого влияния на другие модули. Низкая связность является ключевым фактором для создания гибких и легко поддерживаемых систем. Она позволяет разрабатывать и тестировать каждый модуль независимо, уменьшая влияние изменений на другие компоненты системы . Более того, низкая связность облегчает масштабирование системы и уменьшает вероятность ошибок при изменении кода. Примеры высокой связности
Оглавление
Хорошо: Высокая связность и Низкое зацепление. Плохо: Низкая связность и Высокое зацепление.
Хорошо: Высокая связность и Низкое зацепление. Плохо: Низкая связность и Высокое зацепление.

Low coupling - Низкая связность

Coupling - [ˈkəp(ə)lɪŋ] - связность

"Low coupling" (Низкая связность) - это термин, используемый в программной инженерии для описания степени взаимозависимости между различными модулями или компонентами системы. Он относится к тому, насколько один модуль взаимодействует с другим модулем через простой и стабильный интерфейс и не нуждается в заботе о внутренней реализации другого модуля. Другими словами, низкая связность указывает на то, что каждый модуль, класс или компонент должен иметь как можно меньше зависимостей, а изменение одного модуля должно иметь мало или никакого влияния на другие модули.

Низкая связность является ключевым фактором для создания гибких и легко поддерживаемых систем. Она позволяет разрабатывать и тестировать каждый модуль независимо, уменьшая влияние изменений на другие компоненты системы . Более того, низкая связность облегчает масштабирование системы и уменьшает вероятность ошибок при изменении кода.

Примеры высокой связности

Примером высокой связности может быть класс "Кредитная карта", который специализирован на проверке и обработке информации о кредитных картах. В этом классе будут методы для проверки номера кредитной карты, проверки срока действия карты и проверки кода безопасности. Все эти методы относятся к одной области знаний и должны быть близко расположены друг к другу.

class Credit_Card {
method check_Number() {}
method check_Date() {}
method check_CVC() {}
}

Пример низкой связности

Примером низкой связности может быть класс "Кредитная карта", который также содержит методы для обработки платежей. Эти методы не относятся к проверке информации о кредитных картах и должны быть вынесены в отдельный класс "Платежи".

class Credit_Card {
method check_Number() {}
method check_Date() {}
method check_CVC() {}
////////// Платежи //////////
method make_transaction() {}
method make_overdraft() {}
}

Достижение высокой связности

Чтобы достичь высокой связности, следует использовать следующие методы:

  • Разделение ответственности (Separation of concerns): Каждый модуль или класс должен выполнять только одну задачу. Это позволяет сделать код более читаемым и понятным, а также уменьшает сложность системы.
  • Модульность: Разбейте систему на независимые модули, каждый из которых выполняет определенную функцию. Это позволяет легко изменять и тестировать каждый модуль независимо.
  • Использование интерфейсов: Используйте интерфейсы для обеспечения простого и стабильного взаимодействия между модулями.
  • Использование шаблонов проектирования: Шаблоны проектирования помогают создавать гибкие и легко поддерживаемые системы с высокой связностью и низкой связностью.
  • Тестирование: Тестирование помогает обнаруживать ошибки и проблемы в системе, что позволяет улучшить её качество и поддерживаемость.

High cohesion - Высокое зацепление

Cohesion - [kə(ʊ)ˈhiːʒn] - зацепление

"High cohesion" (Высокое зацепление) - это термин, который относится к степени того, насколько элементы модуля или класса принадлежат друг другу. Высокая связность означает, что связанный код должен быть близко расположен друг к другу, поэтому мы должны стремиться к высокой связности и связывать весь связанный код вместе как можно ближе.

"Низкая связность" часто сочетается с "высоким зацеплением", что относится к степени того, насколько элементы модуля или класса принадлежат друг другу. Это два разных шаблона, которые стоит рассматривать всегда вместе. Если бы будем стремиться к низкому зацеплению, то придём к тому что у нас будет только один класс со всем подряд. В этом случае связи между классами исчезнут и один класс будет содержать всю подряд бизнес-логику (например, проверка номера кредитной карты и проведение оплат). Суть обоих шаблонов состоит в том чтобы в системе были слабо связанные классы которые содержали связанную бизнес-логику.

Слабо связанные классы должны содержать связанную бизнес-логику

Уменьшение зацепления

Существует несколько методов уменьшения зацепления в программной инженерии. Они описаны в виде шаблонов проектирования и могут быть использованы для создания гибких и легко поддерживаемых систем с высокой связностью и низкой связностью:

  • Инверсия управления (Inversion of Control, IoC): Этот метод позволяет уменьшить зацепление, перенеся ответственность за создание объектов на другой компонент системы. Это делает систему более гибкой и легко поддерживаемой.
  • Внедрение зависимости (Dependency injection, DI): Этот метод позволяет уменьшить зацепление, разрывая связь между компонентами системы. Вместо того, чтобы компоненты напрямую зависели друг от друга, они зависят от абстрактных интерфейсов.
  • Многослойная архитектура: Этот метод позволяет уменьшить зацепление, разделяя систему на слои. Каждый слой выполняет определенную функцию и зависит только от слоя, который находится непосредственно под ним. Примером могут быть шаблоны Model-View-Controller, Model-View-Presenter, Model-View-ViewModel и т. п.
  • Шаблоны проектирования: Шаблоны проектирования помогают создавать гибкие и легко поддерживаемые системы с высокой связностью и низкой связностью.