2017-01-26 16 views
2

Я принимаю дополнительные классы интро Java в данный момент, и это, как класс кратко определил это:Cohesion and Coupling - Как определить порог?

Сплоченности: Цель высокой сплоченности, в данном случае это означает, что сплочения один модуль плотно сосредоточен на своей задаче.

Сцепление: цель для низкого сцепления, в этом случае соединение означает уровень протяженности в том, как переплетаются два или более модулей.

Как определить уровень сцепления, а также сцепление?

Например, некоторые из моих методов вызывают другие методы, которые находятся в одном классе. Это означает, что метод, который вызывает другие методы, зависит от других методов, чтобы метод «вызова» завершил свой блок кода. Означает ли это, что у меня низкая когезия и высокая связь с методами одного и того же класса? Или эти понятия относятся к разным классам и различным пакетам?

+0

Это проблема класса/модуля, а не проблема с методом. – Kayaman

+0

Спасибо! Заметки класса были не очень ясны, поэтому я хотел подтвердить. Есть ли что-то еще важное в этих концепциях, о которых я должен знать? – simmonson

ответ

1

Имеются метрики для сцепления/сцепления; см. https://softwareengineering.stackexchange.com/questions/151004/are-there-metrics-for-cohesion-and-coupling.

Таким образом, способ «определить» уровень сцепления/сцепления заключается в реализации инструмента, который измеряет соответствующие показатели. (Или найти существующий инструмент, который делает это. Например, Сонар.)

Как один определить порог для уровня сцепления и/или связи?

Я предполагаю, что вы имеете в виду ... как вы решаете, когда вы назовете значения соответствующих показателей «неприемлемыми» в вашей кодовой базе.

В принципе, это зависит от вас, чтобы решить. Я бы сделал это, посмотрев примеры, когда инструмент сообщает о «плохом» значении, и решите, насколько плохо я думал, что это действительно так. Кроме того, придерживайтесь пороговых значений по умолчанию в используемом инструменте.

+0

Приветствия ... Я изучу это дальше! – simmonson

3

Сцепление и развязка важны на всех уровнях: каждая строка кода должна иметь конкретное значение и цель, каждый метод должен иметь конкретное значение и цель, каждый класс должен иметь конкретное значение и цель, каждая упаковка должна иметь конкретное значение и цель, каждый репозиторий кода должен иметь конкретное значение и цель.

Это не означает, что метод не должен вызывать другой метод, что класс не должен использовать другой класс и т. Д .; скорее, это означает, что в идеале вы должны иметь возможность читать и понимать метод, не читая каждый другой метод, который он называет, читать и понимать класс, не читая каждый другой класс, который он использует, и т. д.

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

+0

Приветствия, именно так, как я изложил свой вопрос, вы, вероятно, можете сказать, что я еще новичок в Java ... Я прочитал Reddit AMA для инженеров-программистов IE, и они упомянули, что было много устаревшего кода .. Думаю, это связано с уровнем сплоченности и сцепления, но опять же это моя неопытность, угадывающая больше, чем что-либо. – simmonson

1

Возможно, я ошибаюсь, но вот только мой скромный ввод.

Сплоченность часто упоминается во времени вместе со сцеплением, но они имеют обратную связь. Высокое сцепление. Низкое сцепление.

Позвольте мне процитировать вам

Aim для высокой сплоченности, в этом случае единство означает, что один модуль плотно сосредоточены на своей задаче.

Так оно и есть. Что-то, что только делает одно и делает это хорошо. Например, метод сохранения объекта в базе данных должен сосредоточиться только на том, как сохранить этот объект в базе данных, он не должен беспокоиться о правильности этого объекта (все атрибуты экземпляра объекта передают все проверки схемы базы данных, в этом случае эта проверка должна быть обработана, возможно, перехватчиком).

Сцепление относится к степени, в которой 2 модуля зависят друг от друга, тем лучше, потому что это способствует техническому обслуживанию и повторному использованию и т. Д. Часто время, низкое сцепление достигается за счет использования событий, у нас есть излучатели событий и и они не должны ничего знать друг о друге. Даже излучатели только стреляют и забывают, и потребители будут принимать события, когда система доставляет им события.

+0

Спасибо, я понял определения и основывался на том, что видел на работе (не как инженер, я работаю как художник), логика в игровых машинах в значительной степени зависит от концепции «огонь и забыть». Я изучу это дальше ... – simmonson