【问题标题】:UML: when one class have as method parameter pointer to other classUML:当一个类具有指向另一个类的方法参数指针时
【发布时间】:2013-03-23 14:04:53
【问题描述】:

当一个类具有指向另一个类的方法参数指针(或引用,或对象)时,在UML中它反映为关联或聚合,带有菱形,还是有一些特定的符号?

【问题讨论】:

    标签: oop uml class-diagram


    【解决方案1】:

    正如其他人所解释的,您应该使用依赖而不是任何形式的关联(聚合和组合)。

    依赖意味着源元素的规范或实现需要目标元素。

    但是,有许多不同类型的依赖项。依赖的类型可以通过关键字和原型来指定。在您的情况下,您应该使用dependency 和关键字<<use>>

    为了解释<<use>>,我从第196页引用了本书UML 2 and The Unified Process的一部分:

    这种依赖(使用)是由以下任何一种情况产生的:

    1- A类的操作需要B类的参数

    2- A 类的操作返回 B 类的值

    3- A 类的操作在其实现的某处使用 B 类的对象,但不作为属性。

    P.S:依赖项可以具有的其他关键字/原型是调用、创建、派生、实例化、允许、实现、细化和跟踪。

    【讨论】:

    • 你怎么知道在这种情况下它是使用的?
    • @icepack 这就是<<use>> 的定义。请参阅我在 UML 2 和统一流程书的答案中添加的部分。
    • 问题中没有任何内容将其限制为这种类型。可以是调用或跟踪,例如
    • @icepack 绝对不是。调用和跟踪依赖具有完全不同的含义。阅读UML规范:“定义并指定从一个操作到另一个操作的调用关系,以便源元素调用目标操作。” “跟踪关系意味着依赖元素导致独立跟踪语义依赖关系(例如,从用例到类)。"
    • @icepack 我认为我们不在同一页面上。 “当一个类具有指向另一个类的方法参数指针时”是问题的标题。 “A 类的操作需要 B 类的参数”显然匹配它。我不知道您在建议具有明显不同含义的 trace 或 call 时在说什么。
    【解决方案2】:

    您需要的不是关联(也不是特定关联的聚合或组合),因为关联指的是 ClassA 的属性,属于 ClassB 类型。

    在这里,对于方法参数,您可以在类之间使用依赖箭头(虚线箭头)。这是一个非常普遍的关系,应该符合您的目的。

    请参见此处的示例以获得解释:http://martinfowler.com/bliki/DependencyAndAssociation.html

    【讨论】:

    • 好点,因为引用似乎是瞬态的而不是静态的,依赖关系会更好
    【解决方案3】:

    Association 是一个类到另一个类的链接,因此指针/引用描述了一个关联。

    Aggregation/Composition 描述关联的类型,因此实际上是它的详细说明(但有些关联类型不是聚合/组合)。

    您是否要使用聚合或关联取决于您要在图表中显示的详细程度。

    鉴于问题描述,连接是较弱的,因为它不是静态链接,而是临时链接。在这种情况下,更合适的是使用Dependency 关系而不是关联。

    【讨论】:

      【解决方案4】:

      “使用依赖项没有指定客户端如何使用供应商,除了供应商被客户的定义或实现使用。例如,它可能意味着(客户)中的某些方法) 类使用另一个(供应商)类的对象(例如参数)。”

      参考:enter link description here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-08
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 2023-03-26
        • 2017-02-27
        相关资源
        最近更新 更多