我是一个正在开发IEEE标准的工作组的成员。标准的问题域表示为面向对象的模型。该模型独立于任何特定的实现语言,但确实使用UML来表达模型的各个方面。文本中的许多地方都引用了“ Foo实例”,其中Foo是抽象类。真正的意思是“ Foo的任何实例化子类的实例”。
根据我的经验,“ Foo实例”被理解为“ Foo的任何可实例化子类的实例”。这是大多数精通面向对象模型的人所共有的理解吗?如果是这样,我们是否可以提供一些很好的参考来支持这种理解?如果不是人们通常理解的东西,那么我们需要更改很多文本,但这就是它的做法。
答案 0 :(得分:1)
这个问题有两个方面,首先是在UML的意义上是正确的,其次是在现实中如何理解。 让我们从简单的方面开始。 UML标准明确指出,分类器的任何实例也是其任何归纳的实例
分类器的实例也是每个实例的(间接)实例 它的概括。适用于以下实例的任何约束 概括也适用于分类器的实例。
这只是一个非常静态的视图。但是,不是最佳答案,因为它没有说明如何动态使用实例。但是该标准还指出,任何实例都可以用作其广义分类器的实例:
类型一致性意味着如果一种类型符合另一种类型,则任何 第一个Type的实例可用作TypedElement的值 其类型被声明为第二个Type。分类器是类型, 并符合自身及其所有概括。
所以在那种情况下,标准很明确。
第二方面,现实。实际上,大多数实际应用的OOP语言都支持多态。简单来说,任何类的对象都可以被视为其任何超类的对象。因此,大多数人都按照您的意思来解释它。
因此,我建议在您的标准中以建议的方式使用它,并在介绍性章节中另外编写它,以帮助解释。
所有引用均参考OMG UML 2.5.1。