【问题标题】:Object-languages misdescribed by UML?UML 错误描述的对象语言?
【发布时间】:2016-09-07 14:44:57
【问题描述】:

我读过 UML 默认假定:

  1. 一个类可以继承多个其他类
  2. 一个对象只是一个类的一个实例
  3. 给定类的对象不能更改为另一个类

这让我想到了一个问题:因为有 3 个假设,所以有 2^3 种可能的组合。你能给我提供每种语言的例子吗?

我的意思是,Java 是“假-真-真”,而 C++ 是“真-真-真”。其他6个人呢?还是我误解了假设?

【问题讨论】:

  • 你从哪里读到的,你为什么认为这些是假设?
  • 这是在法国的一所大学教授的演讲中写的。
  • 你不会在这里得到例子(这是题外话)。 UML 本身就是一种语言。编程语言可以做他们想做的事,完全不受 UML 所说的约束。
  • 2 和 3 在 UML 中是不正确的。
  • 我建议仔细阅读这份编程语言列表,看看哪些适合:99-bottles-of-beer.net/abc.html 玩得开心!

标签: class inheritance casting uml programming-languages


【解决方案1】:

让我们看看OMG的UML 2.5标准,有一个明确的答案:

1.类继承

UML 2.5 标准明确定义一个类可以没有或有多个超类,相反,一个类可以是没有或多个类的超类(参见第 11.4.2 和 11.8.3.6 节)。

因此 UML 明确地允许多重继承(如在 C++ 或 Python 中)。但是你也可以限制自己,只使用单一继承和几个接口实现,比如在 Java 和 C# 中。您将使用实现关系来显示来自抽象接口的“继承”(继承箭头随后被点缀)。

2。对象和类

9.8.1: InstanceSpecifications 表示模型中的分类器实例 系统。它们通常用于对示例配置进行建模 实例。

仅供参考:标准中使用的术语更笼统,但对象是实例,类是分类器。然后在第 9.8.3 章的语义中进一步细化了这个定义:

InstanceSpecification 可能代表:
• 分类 通过一个或多个分类器进行实例化,其中任何一个都可以是抽象的。

因此 UML 允许对象成为多个类的实例化。我不知道允许这样做的语言,但如果你这样做,请毫不犹豫地发表评论;-)。

3.更改对象类别

我必须承认我不能 100% 回答这个答案。我不这么认为,因为成为另一个类的实例意味着重新实例化一个类,所以它不再对应于实例化的定义。
此外(见 9.8.3):

InstanceSpecification 可以表示某个时间点的实例 (快照)。可以使用多个对实例的更改进行建模 InstanceSpecification,每个快照一个。

这有点模棱两可:给定图中的给定对象不能更改类。但是,您可以在不同的图表(快照)中多次表示对象以显示变化。

结论

因此,您的假设 1 为真,2 为假,3 为真或假,具体取决于您是在图表级别还是模型级别进行推理。

【讨论】:

  • 谢谢Christophe,这是一个非常有趣的答案,证明原来的问题是不正确的。我要投票,但不要将答案标记为已接受,因为我正在寻找语言。 Jim 的建议 rdfs 是一个好的开始。据我了解,您认为可能不存在(2)和(3)可能存在的这么多语言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 2019-08-08
  • 1970-01-01
  • 2022-08-09
  • 1970-01-01
相关资源
最近更新 更多