我在UML中找到了关联的定义,如下所示。 UML中的“关联”被定义为一种关系 classes,表示两个或多个类之间的语义关系 涉及其实例之间的连接(链接)。
我不清楚什么是语义关系。任何人用例子将其与非语义关系进行比较来解释它?
答案 0 :(得分:1)
语义学的主题是有意义的。如果有一件事情通过意义与另一件事联系在一起,那就是语义关系。这个定义非常广泛。并且,应用于UML关系,不正确。这有两个原因是错误的。
首先,UML不仅涵盖了类实例语言,例如Java或C ++,还包括由Prototypes创建的具有遗传性的纯对象语言。第二种变体根本不在你的定义中。
其次,在UML中,你可以让A类通过一些复杂的AssociationClass连接到B类,它由一个带箭头的框显示,而不是箭头。它仍将被命名为一个关联,它也是一种语义关系。但是语义关系从A到B通过两个类,它仍然是一个语义关系,但它不是UML中的关联。
如果您想深入研究主题,请更好地阅读UML文档: “关联对一组表示类型化实例之间链接的元组进行分类。” (UML 2.5,第11.5.1节)。注意:两个实例之间的任何链接都可以显示为关联。也许你正在读的书完全没有那么糟糕,但是在你引用的那个地方,作者只是试图使用不理解其含义的漂亮词语,甚至不想让读者理解并且是正确的。
答案 1 :(得分:1)
关联表示根据UML规范的语义关系。
semantic关系 是关于意义的关系,其本身具有意义。
该术语是借用到linguistics和相关学科的,在这些学科中单词被映射为其含义,并且根据该映射来分析单词之间的关系。但是在开始抽象之前,一张图片价值1000字:
因此,使用UML(建模语言)的这一元素而不是英语单词(自然语言):如果您拥有类Car
和Driver
,则可以将语义关系建模为两个类之间的关联。
某些Driver
与它们的Spouse
之间也可能存在语义关系,这意味着您也可以对这种关联进行建模。但这不是强制性的。幸好!因为否则,通过传递性,您很快就会在模型中拥有世界其他地方;-)
如果它与您的应用程序域相关,那么您当然也可以显示此关联(例如,您在一家保险公司工作,其价格取决于拥有驾照的家庭成员的数量)。而且,您甚至可能想通过使用notation for derived association with the leading /
来明确Spouse
和Car
的间接关系。
并非所有关系都是语义性质的。例如,您可以拥有dependencies,可以表达技术关系。例如,如果您使用工厂设计模式,则DriverFactory
将«create»
Driver
。这本身没有任何意义:这只是表示形式领域中的一种关系。另一方面,您可能想给它一个含义,让工厂跟踪所创建的驱动程序,即使仅在您的抽象设计的意义上有意义,而不是在现实世界中。如果有帮助,您可以将其设为关联。
最终,当您想要查看关联时,您有一定的解释空间。 sparsely可使用它,但是,如果您希望模型对您有所帮助。
为了便于记录,我只能绘制矩形,对于public domain contributor好的汽车和驾驶员,以及18f的包容性沟通建议,我深表感谢。
em>