介绍
我想每个人都听过“两次测量,一次切割”这句话。这是编程中的真实建议。在花时间执行它之前考虑一下实现总是更好。在实现过程中,您经常需要创建类并考虑它们将如何交互。这一切的直观表示通常可以帮助您提出最正确的解决方案。这就是 UML 类图对我们有帮助的地方。什么是 UML?
如果您查看搜索引擎中的相关图像,您会发现 UML 与图表、箭头和正方形有关。您需要知道 UML 代表统一建模语言。统一是这里的重要词。这意味着我们的图像不仅会被我们理解,而且会被任何了解 UML 的人理解。它是绘制图表的通用语言。根据维基百科,
“UML 是软件工程领域的一种通用的、开发性的建模语言,旨在提供一种可视化系统设计的标准方法。”最有趣的是 UML 有规范,但不是每个人都猜到的。甚至还有一个 UML 2 规范。有关规范的更多信息,请访问对象管理组网站。事实上,这个小组开发了 UML 规范。同样有趣的是,UML 并不局限于描述类的结构。UML 图有很多种。维基百科对各种类型的 UML 图有简要描述:UML 图。回到UML类图,值得一提的是《Head First Design Patterns》这本书,它使用UML图来说明设计模式。最重要的是,确实使用了 UML。事实证明,了解它并了解如何使用非常有用。
应用
让我们弄清楚我们可以在 IDE 中使用 UML。我们将使用 IntelliJ IDEA 作为我们的 IDE。如果您使用的是 IntelliJ IDEA Ultimate,那么我们将“开箱即用”地安装“UML 支持”插件。它可以让你自动生成漂亮的类图。例如,使用 Ctrl+N 或“导航”->“类”菜单项转到 ArrayList 类。现在在类名称的上下文菜单中,选择“图表”->“显示图表弹出窗口”。结果,我们得到了一个漂亮的图表。

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
要在 IDEA 中查看结果,请选择“视图”->“工具窗口”->“PlantUML”。我们只得到两个代表类的方块。我们知道这两个类都实现了List接口。这种类关系称为实现。这种关系使用带虚线的箭头表示。让我们绘制它:
interface List
List <|.. ArrayList
List <|.. LinkedList
List是Collection类的子类之一。也就是说,它继承了Collection。这种关系称为泛化。它看起来像一个带有普通连续线的箭头。让我们绘制它:
interface Collection
Collection <|-- List
对于下一种关系,向ArrayList类描述添加一个关于包私有元素数组的条目:
~Object[] elementData
现在我们要显示ArrayList包含一些对象。这样的话,就会有聚合关系。 数组列表是一个集合,因为它包含其他对象。我们说聚合是因为列表的对象可以在没有列表的情况下存在:它们不是列表的组成部分。它们的生命周期与列表的生命周期无关。“聚合”一词来自拉丁语,翻译为“组装”,即由某物组成的某物。比如在生活中,我们有一个水泵总成(骨料),它由水泵和电机组成。组件本身可以拆卸,我们可以不理会它的一些组件。例如,出售或投入另一个装配体。在列表中也是如此。这用聚合处的空菱形和实线表示。我们将表示如下:
class Object{
}
ArrayList o- Object
现在我们要展示的是,与ArrayList不同,LinkedList类包含Node s — 引用存储数据的容器。在这种情况下,Node是LinkedList的一部分,并不独立存在。节点不是内容本身。它仅包含对内容的引用。例如,当我们将一个字符串添加到LinkedList时,我们将添加一个新节点,其中包含对该字符串的引用,以及指向上一个和下一个节点的链接. 这种关系称为组合。它是通过在复合材料(由组成部分制成的东西)上绘制一条带有填充菱形的连续线来描绘的。现在我们将关系表示为文本:
class Node{
}
LinkedList *-- Node
现在你需要学习如何描述另一种重要的关系:依赖。当一个类使用另一个类,但该类不包含也不继承所使用的类时使用它。例如,LinkedList和ArrayList知道如何创建ListIterator。我们将其表示为带虚线的箭头:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
完成所有这些之后,我们得到: 
自动化
有多种方法可以自动生成 PlantUML 图。例如,IDEA 有SketchIT插件,但它不能完全正确地绘制图表。假设接口的实现绘制不正确(显示为继承)。Internet 上有如何将其集成到项目构建过程中的示例。例如,您可以找到如何将uml-java-docklet与 Maven 一起使用。为了演示,我们将使用Maven Archetype快速创建 Maven 项目。跑步
mvn archetype:generate
为响应选择一个数字或应用过滤器,保留默认值 — 只需按 Enter 键。它将始终是“maven-archetype-quickstart”。选择最新版本。接下来,我们将回答一些问题并完成项目的创建: 
mvn clean install
和
mvn javadoc: javadoc
如果我们现在打开生成的文档 (explorer target\site\apidocs\index.html),我们将看到 UML 图。顺便说一句,实现关系现在显示正确了:)
GO TO FULL VERSION