при использовании одного объекта в качестве поля (ассоциации) по сравнению с параметром метода (зависимость) как внутри другого объекта

В диаграмме классов UML ассоциация является более сильной взаимосвязью, чем зависимость,

связь и зависимость могут быть реализованы следующим образом:

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

public class A {
    private B b;
    A(B b){
        this.b= b;
    }
    public void myMethod() {
        b.callMethod();
    }
}

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

public class A {

public void myMethod(B b) {
    b.callMethod();
}

}

В приведенном выше примере вызов b.callMethod() может быть выполнен с использованием ассоциации или зависимости.

Я хочу знать, когда использовать один из подходов:

  • один объект имеет другой объект как поле (ассоциацию)
  • объект принимает другой объект как параметр метода (зависимость) ???

p.s - Любой пример приветствуется :)


person Susantha7    schedule 02.11.2018    source источник
comment
вопрос был отредактирован   -  person Susantha7    schedule 02.11.2018


Ответы (2)


Вы моделируете ассоциацию только для тех, кто намеревается ввести собственность в любом из связанных классов. Если это не так, и вы только ссылаетесь на другой класс в параметре или около того, вы будете использовать зависимость. В процессе моделирования вы обычно начинаете с простой ассоциации или специальной зависимости. Это потому, что вы чувствуете связывающую силу между ними. Простая (в конечном итоге направленная) ассоциация является первым признаком собственности. На более позднем этапе проектирования вы назовете роль и добавите множественность (тем самым удалив стрелку направления, поскольку направление теперь уточняется с помощью использования имени роли). Наконец, вы помещаете точку, чтобы показать, что имя роли должно быть реализовано как собственное свойство. Зависимости - это скорее необязательная вещь, например «также смотрите здесь». Это просто помогает перейти в нужную позицию, но вы не создадите для нее никаких свойств.

person qwerty_so    schedule 02.11.2018
comment
если подключенный класс (class B) используется в нескольких методах в другом классе (в class A), тогда можно вводить ассоциацию, а не зависимость? - person Susantha7; 02.11.2018
comment
если связанный класс (class B) используется в одних методах в другом классе (в class A), тогда можно вводить зависимость, а не ассоциацию? - person Susantha7; 02.11.2018
comment
я хочу знать, как решить, что класс (class B) использовать в качестве ассоциации или зависимости внутри другого класса (class A), каковы причины, которые необходимо учитывать для этого - person Susantha7; 02.11.2018
comment
Я сказал вам, когда использовать ассоциации. Прямо в первом предложении моего ответа. Что ты не понимаешь в этом? - person qwerty_so; 02.11.2018
comment
Хорошо, спасибо, похоже, нет жесткого правила для решения использовать класс b в качестве ассоциации или приличия, в зависимости от моих потребностей, я могу решить, какое использование и когда .. - person Susantha7; 02.11.2018
comment
Нет никаких правил, кроме утверждения в моем первом предложении. Теоретически вы можете просто использовать зависимость. - person qwerty_so; 02.11.2018

Давайте посмотрим на пример с принтером:

public class Printer {

   private Paper paper;
   private Inks inks;

   Printer(Paper paper, Inks inks){
      this.paper = paper;
      this.inks = inks;
   }

   public PrintedFile print(PDFFile pdfFile){
     // print PDFFile to paper
   }
}

Ассоциация (принтер имеет ...) (агрегирование / состав): 1) Бумага 2) Чернила

Зависимость: 1) PDF-файл (PDF-файл не является частью принтера, принтер просто его использует ...)

Резюме: Если объект A должен ИМЕТЬ объект B как внутреннюю часть самого себя, это ассоциация. Если объект A просто использует объект B, а объект B НЕ является частью объекта A, это зависимость.

person Che_D    schedule 02.11.2018