при использовании одного объекта в качестве поля (ассоциации) или параметра метода (зависимости) внутри другого объекта - PullRequest
0 голосов
/ 02 ноября 2018

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

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

Ассоциация -> Объект has-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 - Любой пример будет более чем приветствоваться:)

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

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

0 голосов
/ 02 ноября 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, это зависимость.

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