UML: ассоциации между специализированными классами - PullRequest
2 голосов
/ 19 марта 2012

Вот очень быстрый пример моей проблемы:

http://img19.imageshack.us/img19/3575/workertool.png

(я не могу разместить изображение здесь, потому что я новый пользователь)

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

public abstract class Worker{

  private Tool myTool;

}

public class ABCWorker extends Worker{

  public ABCWorker(){
    myTool = new ABCTool();
  }

  public work(){
    tool = (ABCTool) myTool;
    //use tool to do some work
  }

}

Как правильно смоделировать это в UML?На мой взгляд, есть только три возможности:

1) То, как я это сделал в примере.Это неправильно, однако, потому что он говорит, что ABCWorker может использовать любой инструмент.Однако он может использовать только ABCTool.

2) Поставить вторую связь между ABCWorker и ABCTool.Очевидно, что это неправильно, потому что это означало бы, что ABCWorker использует два инструмента, ABCTool и универсальный.

3) Установите только одну связь между ABCWorker и ABCTool.Также неправильно, потому что в нем пропущены отношения между Worker и Tool.

Так как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Вариант 2 почти правильный

2) Поставьте вторую связь между ABCWorker и ABCTool. очевидно неправильно, потому что это будет означать, что ABCWorker использует два инструмента, ABCTool и общий.

Вы определяете новое свойство ABCTools, которое переопределяет инструмент свойства.

http://www.uml -diagrams.org / УМЛ-core.html # переопределяема-элемент

class Worker {
     myTool:Tool;
}

class HardWorker { 
     hammer:ABCTool {redefines myTool}  
}
0 голосов
/ 19 марта 2012

Некоторые вещи просто не могут быть показаны на диаграмме классов. Это, например, один из тех случаев, когда вы не можете реально показать взаимодействие между объектами. И это нормально, потому что это диаграмма классов.

Если это действительно важно для вас, то вы должны смоделировать его, используя более подходящую диаграмму, чтобы объяснить это.

...