【发布时间】:2026-02-18 11:15:02
【问题描述】:
如何在 UML 中指示方法将返回对象集合?有没有比将集合类作为返回类型更好的方式来解释这种关系?
【问题讨论】:
-
答案中讨论的使用返回类型没有真正的替代方法。但也许这里的“模式”标签有点误导。
标签: oop collections uml design-patterns
如何在 UML 中指示方法将返回对象集合?有没有比将集合类作为返回类型更好的方式来解释这种关系?
【问题讨论】:
标签: oop collections uml design-patterns
我来晚了,因为我一直在寻找类似问题的答案。我正在写这篇文章,以防其他人正在寻找类似的答案。
你想指出一个方法返回一个特定类型的集合吗?如果是这样,对于一个方法,您应该能够将返回参数的类型和返回参数的多重性设置为 0..* 或 1..*。这将表明该方法返回指定的类型,并且它具有您声明的任何多重性。
例如使用 Library --- Book 示例,假设 Library 上有一个名为 GetBooks 的方法,它接受一个字符串参数、作者姓名,并返回 Book 实例的集合。 UML 看起来像这样:
图书馆 +GetBooks(authorName: string) : Book[0..*]
您的 UML 图表工具应该支持这一点;我正在使用魔术抽奖。这个 UML 声明 GetBooks 返回 0 个或许多 Book 实例。现在由程序员决定如何在实现语言中实现返回参数(如上面 Simon 所述)。
【讨论】:
您可以考虑使用“关联”。关联有三种基本类型:组合、聚合和“正常”关联。它们中的每一个都表达了整体对部分的不同存在依赖性,反之亦然。
通常通过用一条线连接两个类来表示关联。组合和聚合在组合/聚合侧有一个菱形符号。复合/集料由一个或多个部分组成。 (见wiki-article)
例子:
假设您有两个类:Library,Book。我们可以说图书馆是整体,而书是部分。我们可以这样记(ASCII 码,请谷歌查看真实图表)。
图书馆(聚合)---书(部分)
如果你想表达这些关系,联想会是你的朋友。
编辑:
正如我在评论中所说,我认为返回的集合没有特殊的符号。但是,您是对的,返回 Collection 是特定于语言的。但是您可以考虑返回一个数组 (String[]),这是表示一组值的更通用的方式,并且应该比 Collection 更独立于语言。然后取决于程序员如何实现它。他可能会使用Collection,一个C++ STL 向量……重点是:返回一组值。
【讨论】:
嗯,确实,在 UML 类图中没有明确的方式来表达集合类型。我读了一本书,他们为此批评了 UML,但他们提到,在 UML 的某些早期版本中存在集合类型。另一件事是对象约束语言(OCL),它与 UML(作为 OMG 标准)集成,并且有自己的集合类型,操作很好。
【讨论】:
有一种间接的表示方式。
您可以使用您的特定返回类型定义另一个具有复合关系 1..* 的复合类,并将这个新的复合类用作您的返回类型。
例如如果要返回 Book 类的集合,请创建一个与 Book 关联的 1..* 新 Books 类,并将 Books 类用作返回类型。
【讨论】: