【问题标题】:UML: Associations between specialised classesUML:专业类之间的关联
【发布时间】:2012-03-19 10:55:06
【问题描述】:

这是我的问题的一个非常简单的示例:

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 可以使用 any 工具。但是,它只能使用 ABCTool。

2) 在 ABCWorker 和 ABCTool 之间建立第二个关联。显然是错误的,因为这意味着 ABCWorker 使用两个工具,一个 ABCTool 和一个通用工具。

3) ABCWorker 和 ABCTool 之间只建立一个关联。也错了,因为它省略了Worker和Tool之间的关系。

那我该怎么做呢?

【问题讨论】:

    标签: inheritance uml associations modeling class-diagram


    【解决方案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}  
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我认为类图更适合我正在做的事情。我在写论文时遇到了这个问题,所以如果这真的不能在类图中显示,我想我可以做我在示例中所做的并在文本中说明 ABCWorker 将始终使用一个 ABC 工具。
      • 是的,唯一的其他解决方案是使用评论。但那是如果它与使用另一个图表无关。因此,根据这一点的重要性,创建一个新图表,或者只是评论它。
      猜你喜欢
      • 1970-01-01
      • 2014-07-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      相关资源
      最近更新 更多