Разница между ассоциацией и зависимостью? - PullRequest
76 голосов
/ 05 августа 2009

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

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

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

Ответы [ 7 ]

55 голосов
/ 05 августа 2009

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

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

44 голосов
/ 05 августа 2009

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

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

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

...

36 голосов
/ 03 декабря 2015

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

Ассоциация -> A has-a C объект (как переменная-член)

Зависимость -> A ссылки B (в качестве параметра метода или типа возврата)

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

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

22 голосов
/ 02 марта 2012

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

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

String name = null //: is a association.
13 голосов
/ 08 июля 2016

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

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

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

Ассоциация бывает двух типов -

  1. Композиция
  2. Aggregation

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

 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)

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

9 голосов
/ 27 августа 2014

Здесь: «Ассоциация против зависимости, агрегация против композиции» , у вас есть отличный vade mecum с диаграммами классов uml и фрагментами кода. Автор дает нам список отношений: Ассоциация, Зависимость, Агрегация, Композиция в одном месте.

3 голосов
/ 09 августа 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...