2012-03-19 125 views
2

之间的关联下面是我的问题,一个很简单的例子:UML:专业类

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

有些东西不能显示在类图上。 例如,这是其中一种情况,您无法真正显示对象之间的交互。这很正常,因为这是一个类图。

如果这对你来说真的很重要,那么你应该使用更合适的图表对它进行建模,以解释这一点。

+0

我认为类图是更适合我在做什么。我在讨论论文时遇到了这个问题,所以如果这真的不能在类图中显示出来,我想我可以放弃我在示例中做的事情,并在文本中说明ABCWorker将始终使用一个ABCTool。 – aheld 2012-03-19 11:07:11

+0

是的,唯一的解决方案是使用评论。但是,这是如果它不使用另一个图。所以根据这个重要性,创建一个新的图表,或者只是评论一下。 – squelos 2012-03-19 11:18:15

1

选项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} 
}