把聚合关系画成方框套方框是不是更好
小林 2022-7-13 11:16
我想把聚合关系画成下面这样可以吗,好像边界更清晰了。

UMLChina潘加宇
这里面涉及到一些知识点,要理清楚才行。
首先,如果是在对象级别,那可以,不会有歧义,像图1下部的对象关系。

图1
如果是类图,会存在歧义,根源是《软件方法》第8章所说“人有男有女”、“人有手有脚”的集合个体问题。
如果用套框来表示的话,就可能有两种意思,如图2:

图2
所以,干脆就不套框了,用不同连线来表达:

图3
如果坚持要套框,可以强制规定套框表示的是哪一种。
UML从2.0开始提供的“结构化类”表示,相当于规定套框表达的是组合关联(个体关系)。图4和图5摘自《UML参考手册(第二版)》。
图4相当于类图的变体:

图4 摘自《UML参考手册(第二版)》
图5则是图4中所表达的TicketOrder类的一个对象:

图5 摘自《UML参考手册(第二版)》
不过,我认为这样的表示容易模糊类和对象的区别,如果一定要在类图上使用套框,把套框的含义规定为泛化关系更合适,就像David C. Hay所用的,图6摘自David C. Hay的书“Data Model Patterns: Conventions of Thought”。

图6 摘自Data Model Patterns: Conventions of Thought
