Разница между ассоциацией и зависимостью?

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

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

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

Ответ 1

В чем разница между зависимостью и ассоциацией?:

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

Процитировать из 3-го издания UML Distilled (сейчас просто) "a существует зависимость между двумя элементами, если изменения в определении один элемент (поставщик) может вызвать изменения в другом ( клиент)". Это очень неопределенные и общие отношения, поэтому UML имеет множество стереотипов для разных форм зависимости. В кодовых терминах такие вещи, как именование типа параметра и создание объект во временной переменной подразумевает зависимость.

...

Ответ 2

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

Ответ 3

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

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

String name = null //: is a association.

Ответ 4

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

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

Зависимость → Ссылки B (как параметр метода или тип возврата)

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

Существует также более подробный ответ.

Ответ 6

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

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

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

Ассоциация имеет 2 типа -

  • Состав
  • Агрегация

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

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

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

Другой пример - Body и Liver.Liver не может существовать вне тела.

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 создается снаружи и передается классу A)

Другой пример этого - Человек и Автомобиль. У человека есть автомобиль, но человек и автомобиль существуют независимо.

Ответ 7

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

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