Сцепление / Сцепление
В то время как на этом форуме есть много хороших примеров, которые содержат примеры связывания и сплоченности, я изо всех сил стараюсь полностью применить его к моему коду. Я могу определить части в моем коде, которые могут нуждаться в изменении. Могут ли какие-либо эксперты по Java взглянуть на мой код и объяснить мне, что является хорошим или плохим. Я не против изменить это сам вообще. Просто многие, похоже, не согласны друг с другом, и мне трудно понять, каким принципам следовать...
4 ответа
Я могу порекомендовать книгу Алана и Джеймса " Объяснение шаблонов проектирования" - новый взгляд на объектно-ориентированное проектирование (ISBN-13: 978-0321247148):
Это отличная книга о решениях " есть и есть", включая сплоченность и связь в объектно-ориентированном дизайне.
Во-первых, я хотел бы сказать, что основная причина, по которой вы получаете такие разные ответы, заключается в том, что со временем это действительно становится искусством. Многие из мнений, которые вы получаете, не сводятся к жесткому правилу или факту, а скорее сводятся к общему опыту. После 10-20 лет этого вы начинаете вспоминать, что вы делали, что вызывало боль, и как вы избегали делать это снова. Многие ответы работают на некоторые проблемы, но их мнение определяет индивидуальный опыт.
В вашем коде есть только одна действительно важная вещь, которую я бы изменил. Я хотел бы рассмотреть вопрос о том, что называется шаблоном команд. Информацию об этом не должно быть трудно найти ни в Интернете, ни в книге GoF.
Основная идея заключается в том, что каждая из ваших команд "добавить ребенка", "добавить родителя" станет отдельным классом. Логика для одной команды заключена в одном небольшом классе, который легко тестировать и изменять. Затем этот класс должен быть "выполнен" для выполнения работы вашего основного класса. Таким образом, ваш основной класс должен иметь дело только с разбором командной строки и может потерять большую часть своих знаний о FamilyTree. Он просто должен знать, какая командная строка соответствует каким классам команд, и запускать их.
Это мои 2 цента.
Короче:
Сплоченность в разработке программного обеспечения, как и в реальной жизни, заключается в том, насколько элементы, составляющие единое целое (в нашем случае, скажем, класс), можно сказать, что они на самом деле принадлежат друг другу. Таким образом, это мера того, насколько тесно связана каждая часть функциональности, выраженная в исходном коде программного модуля.
Один из способов взглянуть на сплоченность в терминах ОО - это если методы в классе используют какой-либо из частных атрибутов.
Теперь обсуждение более масштабное, чем это, но высокая когезия (или лучший тип когезии - функциональная сплоченность) - это когда части модуля сгруппированы, потому что все они вносят вклад в одну четко определенную задачу модуля.
Связывание простыми словами - это то, сколько один компонент (опять же, представьте себе класс, хотя и не обязательно) знает о внутренних принципах работы или внутренних элементах другого, т. Е. Сколько он знает о другом компоненте.
Слабая связь - это метод соединения компонентов в системе или сети таким образом, чтобы эти компоненты зависели друг от друга в максимально возможной степени…
В длинных:
Я написал в блоге об этом. В нем все подробно обсуждается, с примерами и т. Д. Также объясняются преимущества того, почему вы должны следовать этим принципам. Я думаю, что это может помочь...
Связь определяет степень, в которой каждый компонент зависит от других компонентов в системе. Учитывая два компонента A и B, сколько кода в B должно измениться, если A изменится. Сплоченность определяет меру того, насколько согласованно или тесно связаны различные функции одного программного компонента. Это относится к тому, что делает класс. Низкая сплоченность будет означать, что класс выполняет большое количество действий и не сосредоточен на том, что он должен делать. Высокая сплоченность тогда означала бы, что класс сосредоточен на том, что он должен делать, то есть только на методах, относящихся к намерению класса. Примечание. Хорошие API-интерфейсы демонстрируют слабую связь и высокую когезию. Одной из наиболее отвратительных форм тесной связи, которых всегда следует избегать, является наличие двух компонентов, которые прямо или косвенно зависят друг от друга, то есть цикл зависимости или циклическая зависимость. Подробная информация в ссылке ниже http://softwarematerial.blogspot.sg/2015/12/coupling-and-cohesion.html