2014-12-16 3 views
2

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

Вот определение, которое я нашел: «Связь между классами объектов - это счетчик числа других классов, к которым он связан».

Заранее спасибо.

ответ

9

Связь между объектами (CBO) - это подсчет количества классов, связанных с конкретным классом, например, когда методы одного класса вызывают методы или получают доступ к переменным другого. Эти вызовы должны учитываться в обоих направлениях, поэтому CBO класса A представляет собой размер набора классов, которые ссылаются на класс A, и те классы, которые ссылаются на класс A. Поскольку это набор - каждый класс подсчитывается только один раз, даже если ссылка работает в обоих направлениях, т. е. если A ссылается на ссылки B и B A, B подсчитывается только один раз.

Это определение дано здесь - www.virtualmachinery.com/sidebar3.htm

Существует еще некоторые детали в ссылке - а также интересное общее обсуждение метрик Чидамбера и Kemerer - СВО является частью этих показателей.

4

Сцепление - это когда класс (A) зависит (знает, требует, использует) в другом конкретном классе (B). Это означает, что когда вы изменяете открытый член B, который используется A, вы также должны изменить A. Вам нужна низкая связь между типами, чтобы вы могли менять классы без каких-либо побочных эффектов. Обычно соединение «приходит» вместе с плохим инкапсуляцией, поэтому у вас будет информация о знании, которая должна быть частной для B.

Некоторые типы достаточно общие (например, List in C#), и вы можете использовать их напрямую, не опасаясь побочных эффектов , Но независимо от того, какие классы вы определяете для своего собственного приложения, вам нужно знать, что они могут измениться. Поэтому во многих ситуациях вас больше интересует какое-либо поведение (или атрибуты) B, а не A, использующее целое B. В этих случаях лучше извлечь интерфейс (чтобы абстрагировать желаемое поведение), а затем A будет знать только об абстракции, в то время как B будет ее реализовывать. Это позволяет вам иметь более одной конкретной реализации (полезно каждый раз, когда вы имеете дело с вещами, такими как базы данных, сеть, импорт/экспорт и т. Д.), И A не будет знать о B.

Таким образом, A может бессознательно использовать любые из B, C, D и т. д., пока они реализуют интерфейс, и вы можете изменять вещи в B, C, D, если это не нарушает публичный контракт (интерфейс).

В то время как мы обычно хотим, чтобы наши классы были развязаны, но были сплоченными (как и для совместной работы), во многих ситуациях соединение не повредит вам, так как развязка может потребовать больше усилий, чем обеспечить ценность. Разработчик должен определить эти ситуации и принять правильное решение. Тем не менее, это связано с опытом, поэтому, в то же время, просто старайтесь не связывать свои классы слишком много.

+0

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

+0

Когда разработчик говорит: «этот класс связан с другим», это значение выше. Ваш показатель CBO, вероятно, просто подсчитывает, сколько классов использует непосредственно определенный класс. – MikeSW

4

Вот пример с UML, который дополняет другие ответы:

UML class diagram showing CBO for 4 different classes that are coupled in various ways

Примечания:

  • СВО не заботится о направлении зависимости. D имеет CBO 1, потому что C зависит от него, хотя D зависит от каких-либо других классов. B и C - аналогичные случаи.
  • Связывание может осуществляться через атрибуты (состав), ассоциации, локальные переменные, инстанцианты или вложенные зависимости (аргументы в методы).
Смежные вопросы