Диаграмма ассоциации и зависимости между 2 классами UML

#java #dependencies #uml #associations

#java #зависимости #uml #ассоциации

Вопрос:

Мой вопрос в том, можем ли мы иметь между 2 классами одновременно отношение ассоциации и зависимости. Я полагаю, что если у нас есть связь между 2 классами, зависимость уже включена. Например:

 abstract class CarDealer {
  protected String name;
  protected int soldCars;
  public Car (String name) {...}
  public abstract int getSoldCars(){...}
  public void sellCar(){...}
}

public class SimpleCarDealer extends CarDealer{
  private CarDealer bestColleague;
  public SimpleCarDealer(String name){...}
  public int getSoldCars(){...}
  public void serBestColleadue(CarDealer cd){...}
}
  

Комментарии:

1. У вас может быть более одной связи между одной и той же парой классов. Если вы это сделаете, то они могут быть разных типов.

2. «Я полагаю, что если у нас есть связь между 2 классами, зависимость уже включена». да, зависимость неявная. В любом случае вы также можете иметь зависимость, если это необходимо, это не запрещено

3. Похоже, что в этом случае у вас есть как обобщение ( extends Cardealer ), так и ассоциация ( private CarDealer bestColleague; )

Ответ №1:

Ассоциация — это более сильная форма зависимости. Итак, как только у вас есть ассоциация (то есть, по крайней мере, один класс может «видеть» другой через свойство), у вас уже есть зависимость. Зависимость иногда используется на ранней стадии проектирования, а позже заменяется ассоциацией. В этом случае вы удаляете зависимость. (Конечно, когда есть ассоциация, у вас, очевидно, есть зависимость, не так ли?) Вы покажете только зависимость, если свойства нет, а один класс использует другой, например, в качестве параметра в операциях.

Ответ №2:

Рассматривая семантику UML, вы не можете пропустить зависимость в целом. Потому что, по определению, «спецификация или реализация» зависимого элемента зависит от специфики или внедрения независимого элемента. В отличие от этого, ассоциация — это отношение между экземплярами этих связанных типов. Одним из следствий является то, что при объединении спецификации обоих классов по-прежнему независимы.