Разница между ассоциацией и зависимостью?
В диаграмме классов 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();
}
}
Существует также более подробный ответ.
Ответ 5
Здесь: "Ассоциация против зависимости от агрегации или композиции" , у вас есть отличная madeum vade с диаграммами классов и классов uml сниппеты.
Автор дает нам список отношений: Ассоциация, Зависимость, Агрегация, Композиция в одном месте.
Ответ 6
Зависимость. Изменение класса влияет на изменение его зависимого класса. Пример. Круг зависит от формы (интерфейса). Если вы меняете Shape, это также влияет на Circle. Итак, Circle имеет зависимость от Shape.
Ассоциация - означает, что существует определенная связь между двумя объектами
(один-один, один-много, много-много)
Ассоциация имеет 2 типа -
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
Зависимость очень общая, а понижающая сложность - как можно меньше уменьшает зависимости.
Связь - сильная (статическая) зависимость. Агрегация и состав еще сильнее.