这是我的问题的一个非常快速的例子:
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之间的关系。
那我该怎么做呢?
答案 0 :(得分:2)
选项2几乎是正确的
2)在ABCWorker和ABCTool之间建立第二个关联。明显 错误,因为这意味着ABCWorker使用两个工具,一个ABCTool 和通用的。
您定义了一个新属性ABCTools,它重新定义了属性工具。
http://www.uml-diagrams.org/uml-core.html#redefinable-element
class Worker {
myTool:Tool;
}
class HardWorker {
hammer:ABCTool {redefines myTool}
}
答案 1 :(得分:0)
有些事情无法在类图上显示。 例如,这是其中一种情况,您无法真正显示对象之间的交互。这是正常的,因为这是一个类图。
如果这对您来说非常重要,那么您应该使用更合适的图表对其进行建模,以便对此进行解释。