UML 中的语义关系

Posted

技术标签:

【中文标题】UML 中的语义关系【英文标题】:Semantic relationship in UML 【发布时间】:2014-11-15 22:54:49 【问题描述】:

我在 UML 中找到了如下的关联定义。 UML 中的“关联”定义为 classes,表示两个或多个类之间的语义关系 涉及它们实例之间的连接(链接)。

我不清楚什么是语义关系。任何人都可以通过将其与非语义关系进行比较来解释它吗?

【问题讨论】:

+1 回答一个有趣的问题 - 什么是真正的关联。 确实! “语义关系”在 UML 2.5 规范中只出现一次,它用于定义关联...... 【参考方案1】:

语义学的主题是意义。如果一件事有某种东西通过感官与另一件事联系起来,那就是语义关系。这个定义非常广泛。而且,应用于UML关系,不正确。它不正确有两个原因。

首先,UML 不仅涵盖类实例语言,例如 Java 或 C++,还涵盖由 Prototypes 创建的具有遗传性的纯对象语言。您的定义根本没有涵盖第二个变体。

其次,在 UML 中,您可以通过一些复杂的 AssociationClass 将 A 类连接到 B 类,这由一个带箭头的框表示,而不仅仅是箭头。它仍将被命名为关联,它也是一种语义关系。但是a语义关系通过两个类从A到B,它仍然是语义关系,但在UML中不是关联。

如果您想深入研究主题,最好阅读 UML 文档:“关联对表示类型实例之间链接的一组元组进行分类。”(UML 2.5,第 11.5.1 段)。注意:两个实例之间的任何链接都可以显示为关联。也许您正在阅读的书完全没有那么糟糕,但是在您引用的地方,作者只是试图使用漂亮的词而不理解它们的含义,甚至没有试图让读者理解并做到正确。

【讨论】:

在谈论 UML 时,您不应该说“链接”是“关联”,因为 UML 对这些术语的使用是不同的(正如您在同一段中所说:“关联对链接进行分类")。 @gwag 1. 不是我。文档中说。 2. 没那么简单。如果关联是在类之间,它对链接进行分类,是的。但如果它是在对象之间,它就是链接本身。但是文字可以改进。谢谢你的来信。 Gangnus:谢谢你的回答。你能给我一个非语义关系的简单例子吗?那么我就可以清楚地弄清楚什么是语义关系了。 @user3397694 是的,这是没有意义的关系,是错误想象的。那里这个词绝对是多余的。只有错误的关系可以是非语义的。 @Gangnus 感谢您的回答。假设“我和我的兄弟”之间的关系是语义关系。而“我和与我同车厢的人”的关系是非语义关系。我的理解正确吗?【参考方案2】:

纯文本关联

关联是一种语义关系。 UML 子句意味着关联类的实例之间存在结构关系,独立于任何特定实现。 “语义”强调关系是实例本身之间的关系,而不仅仅是操作的“意外”:

主要在对象之间存在结构关系的情况下使用关联。不要使用它们来显示瞬时关系,例如过程的参数或局部变量。- 统一建模语言用户指南,第二版

中的 Booch、Rumbaugh 和 Jacobson

更多参数

什么是“语义”?

semantic”这个词是从linguistics借来的,指的是单词背后的含义。语言学家将单词(例如“汽车”、“司机”)映射到它们的含义(例如,一辆真实的汽车、一个真实的人),并根据这种映射分析单词之间的关系:

因此,如果您有 CarDriver 类,将其应用于 UML(建模语言),您可以将语义关系建模为两个类之间的关联。

什么不是语义?

并非所有关系都具有语义性质。可以有dependencies,可以表达技术关系:

操作期间的瞬态关系:例如,对于工厂模式,DriverFactory«create» Driver 实例。工厂和驱动程序的两个实例仅在创建操作的确切时刻相关。但是这两个实例在纳秒之后是完全独立的。如果操作的实现需要创建另一个类的本地实例,这同样适用。这两个类没有关联,因为我们可以想象另一个实现在没有这样的实例的情况下也能工作。 结构依赖:也许一个操作需要一些其他类作为参数。由于参数本身是瞬态的,因此没有关联。但是,这个班级需要了解其他班级。

为了记录,我很感谢 public domain contributor 提供的好车和司机,感谢 18f 提供有关包容性沟通的建议。

【讨论】:

以上是关于UML 中的语义关系的主要内容,如果未能解决你的问题,请参考以下文章

UML语言体系

看懂UML视图中的各种关系

UML类图(大话数据模式)

UML 中关系详解以及在visio中的表示

UML与数据库应用系统

UML关系入门