【问题标题】:Which kinds of associations do classes have in a system? How to best represent them in UML?类在系统中具有哪些类型的关联?如何在 UML 中最好地表示它们?
【发布时间】:2010-11-03 02:51:59
【问题描述】:

这篇文章其实分为两个问题:

通常有哪些关联类/接口?

我会说至少有 3 种依赖关系:

  • 继承:我想我们都知道这一点)
  • 依赖:我的意思是如果class A依赖于class B,我只能实例化class A,如果我将class B作为构造函数参数传递。这是正确的吗?
  • 使用:class A 使用 class B,如果在 class A 的代码中存在任何对 class B 的引用,则既不是依赖的继承。

这些是类之间唯一的关联吗?我对它们的含义的解释是否正确?

我们有兴趣在 UML 图(主要是类/包图)上显示哪种依赖关系?

到目前为止,我大多只在类图中放置描述依赖关系的箭头。但是现在想起来,大部分时间我看类图,我会发现一些类似的东西

其中仅显示 Inherits 和 Uses 关联。但是类图中的Uses 与我上面定义的Uses 并不完全相同。它们只是告诉你在一个非原始类型的类上有一个 getter。

我想如果我必须查看一些系统的文档,我想知道系统中不同的类是如何相互依赖的。我肯定想看看某种Dependency Graph。

将类图限制为Inherits/Uses 关联,然后使用其他显示Depends/Uses 关联的图表/图表会更好吗?

你喜欢它,为什么?

谢谢

【问题讨论】:

    标签: c# java oop uml


    【解决方案1】:

    首先,您应该停止谈论继承、依赖和使用关系作为“关联”。 “关联”一词在 UML 中具有特殊含义;见下文。

    在您提到的三种关系中,通常只在类图中显示继承(技术上的泛化)关系。它们使用带有空心三角形箭头的实线表示。

    如果你想显示类之间的依赖/使用关系,你应该使用 UML 依赖表示法;即带有“vee”箭头的虚线。

    类图中通常描述的另一种关系是关联。即类实例之间的信息承载关系,通常使用(例如)指针或数据库外键/索引来表示。

    我想这是个人喜好问题,但我不想在对象图上看到依赖/使用关系。布局泛化线和关联线已经够难的了。其他行只会使图表过于“忙碌”。

    UML 用户指南说:

    “请记住,在单个图表或视图中对一组抽象之间的所有关系进行建模既不受欢迎也没有必要。相反,通过考虑系统上的不同视图来构建系统的关系。突出显示有趣的集合各个图表中的关系。”

    【讨论】:

    • +1 表示关联。如果图表的目的是理解问题域,那么关联就是“秘诀”。特别是如果您使用动词短语来命名它们。在查看代码体并尝试理解其结构时,依赖性、使用等更有用。
    • 你说的是对象图还是类图? en.wikipedia.org/wiki/Object_diagram
    • 类图(尽管这些通常被混淆地称为“对象模型”)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    相关资源
    最近更新 更多