2009-02-24 2 views
4

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

+1

Вы должны сказать ему, что его код не сплочен! –

+0

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

ответ

7

Я думаю, что правильный термин: cohesion.

В компьютерном программировании cohesion является мерилом того, насколько сильно связаны и связаны различные обязанности программного модуля. Сплоченность является порядковым типом измерения и обычно выражается как «высокая сплоченность» или «низкое сцепление» при обсуждении.

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

+1

Ах. Кажется, Google не может пройти тест Тьюринга ... пока. Неудивительно, что я не нашел ответа там! Принято для ссылки. – allyourcode

4

У меня был полный код Стив Макконнелл рядом с моим компьютером (то есть программисты библии) с открытой страницы, объясняющей сплоченности, так что я думал, что я разделю,

сплочения возникла из структурированного дизайна и обычно обсуждается в том же контексте как связь. Cohesion ссылается на на то, насколько тесно все подпрограммы в классе или весь код в подпрограмме поддерживают центральную цель, как сфокусированный класс. Классы, которые содержат , тесно связаны с функциональностью , описанной как имеющая сильное сцепление, , а эвристическая цель - сделать как можно более сильную сплоченность.

+0

+1. Добавьте некоторые ссылки. Код Полный сайт здесь http://www.cc2e.com/, и почему бы не ссылку «библеи программистов» на этот вопрос, где он побеждает на милях http://stackoverflow.com/questions/1711/what-is- the-single-most-influential-book-every-programmer-should-read – MarkJ

+0

@CodeKiwi У вас есть _Code Complete_ всегда рядом с вами? Это немного жутко. Спасибо за ссылку, хотя! – allyourcode

+0

haha, No Я в настоящее время читаю его, это probablly wouldnt больно сделать это, хотя, его большая книга. – CodeKiwi

1

Я использую термин «разделение проблем», чтобы объяснить это при реорганизации. Часто, когда код является довольно новым, все будет объединено вместе, поскольку отдельные проблемы сначала не ясны.

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

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

1

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

Как говорится в CodeWiki, сплоченность обычно обсуждается с помощью связи, где они могут действовать друг против друга, особенно там, где строгие интерфейсы не тщательно спланированы. Многие статьи о связности в googled относятся к дизайну OO, но сплоченность и связь не ограничиваются OO.

+0

Не будет ли обобщение функции сделать это _less_ cohesive в некоторых случаях? Я думаю, что это проблема с кодом моего коллеги: он пытается добиться большего, а не «делать одно хорошо», как это было предложено другим ответом. – allyourcode

+0

Несомненно, существует тонкая грань между нереальной репликацией и обобщением. Первая проблема - это проблема, которую так легко достичь. Ваша точка действительна, хотя, и я немного отредактировал свой пост, чтобы осветить ваши проблемы. –

 Смежные вопросы

  • Нет связанных вопросов^_^