UML对象图:父类还是子类

3

假设我有以下类:

public class ParentClass{}

其中一个子类是:

public class ChildClass extends ParentClass{}

让我们考虑另一个类:

public class Foo{
    
    private ParentClass field;
    
    public Foo(){
        
        field = new ChildClass();
        
    }
    
    public static void main(String[] args){
        
        Foo foo = new Foo();
        
    }
    
}

在绘制 foo 的 Object Diagram 时,我不确定是应该写 ChildClass 还是 ParentClass
1个回答

3
在您的程序中,fieldChildClass的一个实例,对象图的目的是展示实例的有效类型(以及它们的属性值,如果有的话)=> 使用正确的图表应该是:

enter image description here


[从我的回答中的备注编辑]

使用第二个图表也是合法的,但这会隐藏实例确切地ChildClass的事实,因此最好使用第一个图表来指出。

我忘了提到在您的两个图表中,两个实例之间的线并不对应于它们之间的关联关系,对于第一个图表的正确做法是:

enter image description here

考虑到您的Foo实例是通过名为foo的变量保存的,将foo命名为您的Foo实例似乎是合理的。


1
谢谢,我本来就想这样做,但不确定。 - Axel Carré
当在冒号前面放置对象名称时,它会更清晰明了。 - qwerty_so
有趣。我不是一个很大的对象图用户,但我会使用foo:Foo --- field:ParentClass,因为已知field的类是ParentClass。在规范中哪里说它应该显示有效类型?我只在第125页找到了“InstanceSpecification的目的是展示实例的相关信息。实例符合InstanceSpecification的每个分类器...”,这将根据图表所需的内容选择其中之一或两者或全部。 - Christophe
1
@Christophe,也许我在回答中没有表达清楚,我并没有说第二张图是错误的。既然知道Foo的实例肯定与ChildClass的实例相关联,为什么要在图表中隐藏它呢?我们制作图表是为了隐藏知识/信息还是展示它?对我来说,“展示实例中有趣的内容”始于该上下文中实例的有效类型。 - bruno
1
学到了新东西 :-) - qwerty_so
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接