Связь против сплоченности
Связь и связность - это две концепции, встречающиеся в Java (и во всех других объектно-ориентированных языках). Связывание измеряет, насколько каждый из программных модулей зависит от других программных модулей. Сплоченность измеряет, насколько сильно каждая из функций связана внутри модуля. На самом деле, любой объектно-ориентированный язык (включая Java) имеет две основные цели: одновременно повысить связность и уменьшить связанность, чтобы разрабатывать наиболее эффективные программы. Эти две метрики разработки программного обеспечения были разработаны Ларри Константином для снижения затрат на модификацию и поддержку программного обеспечения.
Что такое сплоченность?
Сплоченность измеряет, насколько сильно каждая из функций связана с программным модулем. Хорошо структурированные занятия ведут к очень связным программам. Если определенный класс выполняет набор тесно связанных функций, этот класс называется связным. С другой стороны, если класс выполняет кучу совершенно не связанных между собой функций, это означает, что класс вообще не связан. Важно понимать, что отсутствие связности не означает, что приложение в целом не имеет требуемой функциональности. Просто без сплоченности будет очень сложно управлять функциональностью, потому что она будет разбросана во множестве неправильных мест по мере увеличения сложности приложения со временем. Поддерживать, модифицировать и расширять поведение, разбросанное по всему коду, очень утомительно даже для самых опытных программистов.
Что такое соединение?
Coupling измеряет, насколько каждый из программных модулей зависит от других программных модулей. Взаимодействия между двумя объектами происходят из-за связи. Слабосвязанные программы отличаются высокой гибкостью и расширяемостью. Сильная связь никогда не бывает хорошей, потому что один объект может сильно зависеть от другого объекта. Это кошмар, когда код модифицируется, потому что высокая связанность означает, что программистам нужно работать с несколькими местами кода даже для одной поведенческой модификации. Сильная связь всегда приводит к программам с низкой гибкостью и меньшей масштабируемостью/расширяемостью. Однако в таких языках программирования, как Java, полностью избежать сопряжения невозможно. Но рекомендуется, чтобы программисты приложили все усилия, чтобы максимально уменьшить связь. Также возможно иметь некоторую связь, чтобы помочь объектам взаимодействовать друг с другом, не препятствуя его масштабируемости и гибкости.
В чем разница между Coupling и Cohesion?
Несмотря на то, что связь и связность связаны с качеством модуля в программной инженерии, это совершенно разные понятия. Сплоченность говорит о том, насколько функциональные возможности связаны друг с другом внутри модуля, а связанность касается того, насколько один модуль зависит от других программных модулей в рамках всего приложения. Чтобы иметь программное обеспечение самого высокого качества, сплоченность и связь должны достигать двух противоположных концов своего спектра. Другими словами, слабая связанность и сильная связанность обеспечивают лучшее программное обеспечение. Наличие приватных полей, непубличных классов и приватных методов обеспечивает слабую связь, в то время как все члены становятся видимыми внутри класса, а пакет в качестве видимости по умолчанию обеспечивает высокую связность.