2009-08-05 3 views
60

В диаграмме классов UML в чем разница между отношениями ассоциации и отношением зависимостей?Разница между ассоциацией и зависимостью?

Из того, что я знаю, ассоциация является более сильным отношением, чем зависимость, но я не уверен, насколько она сильнее.

Любой пример будет более чем приветствуется :)

ответ

34

What is the difference between dependency and association?:

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

Цитирую из 3-го издания УМЛ (теперь только из) «а зависимость существует между двумя элементами, если изменения в определении один элемент (поставщиком) может привести к изменениям в другой (клиент ) ». Это очень неопределенное и общее отношение, поэтому UML имеет множество стереотипов для разных форм зависимости. В кодовых терминах такие вещи, как именование типа параметра и создание объекта во временной переменной, подразумевают зависимость.

...

+6

Зачем отвечать, когда Мартин делает это намного лучше для вас ?! +1 – Randolpho

+3

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

+0

Эта статья хорошо говорит. На самом деле это совпадает с моими мыслями. Поэтому вытащить в нем несколько точек: ** (1) ** Вы не хотите показывать каждую зависимость от UML-диаграммы - их слишком много. Вы должны быть очень избирательными и показывать только те, которые важны для того, что вы общаетесь. ** (2) ** Если существует связь между двумя классами, существует также зависимость. Ассоциация подразумевает это, как и обобщение. ** Слишком очевидно, что для того, чтобы определить зависимость, это несколько надмножество отношений других отношений UML. ** – Mahesha999

42

Ассоциация почти всегда подразумевает, что один объект имеет другой объект в качестве поля/свойства/атрибута (терминология отличается). Обычно зависимость (но не всегда) подразумевает, что объект принимает другой объект в качестве параметра метода, создает экземпляр или использует другой объект. Зависимость очень подразумевается ассоциацией.

3

Зависимость очень общая и понижающая сложность заключается в максимально возможном уменьшении зависимостей.

Ассоциация является сильной (статической) зависимостью. Агрегация и состав еще сильнее.

20

Зависимость подобна тому, как вы определяете метод, который принимает String (в Java, C#, поскольку строка является объектом в них) в качестве параметра, тогда ваш класс зависит от класса String.

Ассоциация подобна тому, когда вы объявляете строку как атрибут в своем классе. , то ваш код связан со строковым классом.

String name = null //: is a association. 
7

Здесь: "Association vs. Dependency vs. Aggregation vs. Composition", у вас есть большой путеводитель с класса UML диаграмм и фрагментов кода. Автор дает нам список отношений: Ассоциация, Зависимость, Агрегация, Композиция в одном месте.

+0

Мне нравится это определение. Ассоциация: I (класс, который ссылается на другой класс) просто держит ссылку на объект, я его не использую, и члены этого класса мне не интересны. Зависимость: я использую некоторые члены, поэтому, если ссылочный класс изменится, это может повлиять на меня. Если бы я понял, что это было легко понять! – robsch

+0

Первый вопрос, который пришел мне на ум, когда я прочитал ваш комментарий: в случае ассоциации - зачем держать ссылку на объект и не использовать его? Вы имеете в виду, что ссылка - это только поле, только для возврата, если клиент хочет узнать о ссылке? – Rabiees

18

В терминах ООП:

Ассоциация ->имеет-а С объект (в качестве переменной-члена)

Зависимость ->A референции B (как метод или возвращаемый тип)

public class A { 
    private C c; 
    public void myMethod(B b) { 
     b.callMethod(); 
    } 
} 

Существует также more detailed answer.

+0

@Naruto_Uzumaki Агрегация - отношение целой части. Например, список воспроизведения и песни. Пожалуйста, проверьте мой другой ответ для более широкой дифференциации между Ассоциацией, зависимостью и агрегацией http://stackoverflow.com/a/34069760/1998422 –

+0

Из _UML Distilled_ book от _Martin Fowler_: «С классами зависимости существуют по разным причинам: один класс отправляет сообщение другому, один класс имеет другой как часть своих данных, один класс упоминает другого как параметр для операции « –

+0

« да », вы правы. Послал его. Мое извинение –

9

Dependency - Изменение в классе влияет на изменение это зависит от класса. Пример. Круг зависит от формы (интерфейса). Если вы меняете Shape, это также влияет на Circle. Итак, Circle имеет зависимость от Shape.

Ассоциация - означает, что существует определенная связь между 2 объектами

(один-один, один-многим, многие-многим)

Ассоциация 2 types-

  1. Агрегация

    1) Состав - strong Ассоциация или взаимосвязь между двумя объектами. Вы создаете объект в класса B внутри другого класса А

public class A { 
     B b; 
     public void setB(){ 
     this.b= new B(); 
     } 
    } 

Если мы удалим класс A, B не будет существовать (объект B создается внутри только).

Другой пример -Буд & Печень .Листер не может существовать вне кузова.

2) Агрегирование - слабый тип Ассоциации между 2 объектами.

public class A {  
      B b; 
      public void setB(B b_ref){ 
       this.b= b_ref; 
       /* object B is passed as an argument of a method */ 
       } 
    } 

Даже если вы удалите класс A, B будет существовать вне (B создается снаружи и передается к классу А)

Другой пример this- Man & Car. У человека есть автомобиль, но человек & Автомобиль существует независимо.

+0

Зависимость - это локальная область, где Association - это класс. – dimpiax

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