Разница между ассоциацией и зависимостью?
в диаграмме классов UML, в чем разница между отношением ассоциации и отношением зависимости?
из того, что я знаю, ассоциация-это более сильные отношения, чем зависимость, но я не уверен, насколько она сильнее.
любой пример будет более чем приветствуется :)
7 ответов:
в чем разница между зависимостью и ассоциации?:
В общем случае вы используете ассоциацию для представления чего - то вроде Поля в классе. Ссылка всегда есть, в том, что вы всегда можете спросить заказ для своего клиента. Это не должно быть на самом деле поле, если вы моделирование с более интерфейсной точки зрения, он может просто указать наличие метода, который вернет заказ клиенту.
цитата из 3-е издание UML Distilled (сейчас только выходит) " a существует зависимость между двумя элементами, если изменения в определении один элемент (поставщик) может привести к изменению другого (поставщика). клиент.") Это очень расплывчатые и общие отношения, поэтому UML имеет множество стереотипов для различных форм зависимости. В терминах кода такие вещи, как именование типа параметра и создание объект во временной переменной подразумевает зависимость.
...
ассоциация почти всегда подразумевает, что один объект имеет другой объект в качестве поля/свойства/атрибута (терминология отличается). Зависимость обычно (но не всегда) подразумевает, что объект принимает другой объект в качестве параметра метода, создает экземпляр или использует другой объект. Зависимость очень сильно подразумевается ассоциацией.
в терминах ООП:
Ассоциации -> A есть C объект (как переменная-член)
зависимостей --> A ссылки B (в качестве параметра метода или возвращаемого типа)
public class A { private C c; public void myMethod(B b) { b.callMethod(); } }есть еще и более подробный ответ.
зависимость похожа на то, когда вы определяете метод, который принимает строку(в Java, C#, поскольку строка является объектом в них) в качестве параметра, то ваш класс зависит от класса String.
Ассоциация похожа на то, когда вы объявляете строку в качестве атрибута в своем классе. затем ваш код связан со строковым классом.
String name = null //: is a association.
зависимость - изменение в классе влияет на изменение в его зависимом классе. Пример-круг зависит от формы (интерфейс). Если вы измените форму, это также повлияет на круг. Таким образом, круг имеет зависимость от формы.
Ассоциации - означает, что существует определенная связь между 2 объектами
(один-одному, один-многим,многие-многим)
Ассоциация имеет 2 типа -
- состав
агрегация
1) Состав сильнее Ассоциации или связь между 2 объектами. Вы создаете объект класс B внутри класс
public class A { B b; public void setB(){ this.b= new B(); } }если мы удалим класс A, B не будет существовать (объект B создается только внутри A).
другой пример -тело и печень .Печень не может существовать вне тела.
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 создается снаружи и передается в класс A)
еще один пример этого-человек и автомобиль . У человека есть автомобиль, но человек и автомобиль существуют независимо.
здесь: Ассоциации"против зависимостей между агрегацией и композицией", у вас есть большой vade mecum с диаграммами классов uml и фрагментами кода. Автор дает нам список отношений: Ассоциация, зависимость, агрегация, композиция в одном месте.
зависимость очень общая, и снижение сложности связано с уменьшением зависимостей как можно больше.
ассоциация-это сильная (статическая) зависимость. Агрегация и состав еще сильнее.
Comments