【问题标题】:UML - Object Method Returns a CollectionUML - 对象方法返回一个集合
【发布时间】:2026-02-18 11:15:02
【问题描述】:

如何在 UML 中指示方法将返回对象集合?有没有比将集合类作为返回类型更好的方式来解释这种关系?

【问题讨论】:

  • 答案中讨论的使用返回类型没有真正的替代方法。但也许这里的“模式”标签有点误导。

标签: oop collections uml design-patterns


【解决方案1】:

我来晚了,因为我一直在寻找类似问题的答案。我正在写这篇文章,以防其他人正在寻找类似的答案。

你想指出一个方法返回一个特定类型的集合吗?如果是这样,对于一个方法,您应该能够将返回参数的类型和返回参数的多重性设置为 0..* 或 1..*。这将表明该方法返回指定的类型,并且它具有您声明的任何多重性。

例如使用 Library --- Book 示例,假设 Library 上有一个名为 GetBooks 的方法,它接受一个字符串参数、作者姓名,并返回 Book 实例的集合。 UML 看起来像这样:

图书馆 +GetBooks(authorName: string) : Book[0..*]

您的 UML 图表工具应该支持这一点;我正在使用魔术抽奖。这个 UML 声明 GetBooks 返回 0 个或许多 Book 实例。现在由程序员决定如何在实现语言中实现返回参数(如上面 Simon 所述)。

【讨论】:

    【解决方案2】:

    您可以考虑使用“关联”。关联有三种基本类型:组合、聚合和“正常”关联。它们中的每一个都表达了整体对部分的不同存在依赖性,反之亦然。

    通常通过用一条线连接两个类来表示关联。组合和聚合在组合/聚合侧有一个菱形符号。复合/集料由一个或多个部分组成。 (见wiki-article

    例子:

    假设您有两个类:Library,Book。我们可以说图书馆是整体,而书是部分。我们可以这样记(ASCII 码,请谷歌查看真实图表)。

    图书馆(聚合)---书(部分)

    如果你想表达这些关系,联想会是你的朋友。

    编辑:

    正如我在评论中所说,我认为返回的集合没有特殊的符号。但是,您是对的,返回 Collection 是特定于语言的。但是您可以考虑返回一个数组 (String[]),这是表示一组值的更通用的方式,并且应该比 Collection 更独立于语言。然后取决于程序员如何实现它。他可能会使用Collection,一个C++ STL 向量……重点是:返回一组值。

    【讨论】:

    • 对,但我如何表明一个方法正在返回该关联?
    • 通常一个方法定义一个类的行为。所以没有办法用类图来表示该方法返回一个集合(除了指明它的返回值)。
    • 那么我只想说该方法返回 Collection (在Java中)?我认为在 UML 中通常会避免使用这种特定于语言的表示法。
    • 有道理。感谢您的帮助!
    【解决方案3】:

    嗯,确实,在 UML 类图中没有明确的方式来表达集合类型。我读了一本书,他们为此批评了 UML,但他们提到,在 UML 的某些早期版本中存在集合类型。另一件事是对象约束语言(OCL),它与 UML(作为 OMG 标准)集成,并且有自己的集合类型,操作很好。

    【讨论】:

      【解决方案4】:

      有一种间接的表示方式。

      您可以使用您的特定返回类型定义另一个具有复合关系 1..* 的复合类,并将这个新的复合类用作您的返回类型。

      例如如果要返回 Book 类的集合,请创建一个与 Book 关联的 1..* 新 Books 类,并将 Books 类用作返回类型。

      【讨论】:

        最近更新 更多