介绍
我想每个人小时候都听过这样一句话:“测量两次,切割一次”。在编程中也是如此。在花时间执行之前先考虑一下实施总是更好的做法。通常在实现过程中,您必须创建类并发明它们的交互。通常,这种视觉表示可以帮助以最正确的方式解决问题。这就是UML帮助我们的地方。什么是UML?
如果您查看搜索引擎中的图片,就会清楚UML是关于图表、箭头和正方形的东西。重要的是 UML 转换为统一建模语言。统一这个词在这里很重要。也就是说,我们的图片不仅可以被我们自己理解,也可以被了解 UML 的其他人理解。原来这是一种绘制图表的国际语言。
正如维基百科所说
UML 是一种图形描述语言,用于软件开发、业务流程建模、系统设计和显示组织结构中的对象建模。并不是每个人都想到或意识到的最有趣的事情是 UML 有规范。此外,甚至还有 UML2 规范。有关该规范的更多详细信息可以在对象管理组网站上找到。实际上,这个小组正在开发 UML 规范。同样有趣的是,UML 不仅限于描述类的结构。UML 图有多种类型。UML 图类型的简要描述可以在同一维基百科中看到:UML 图或 Timur Batyrshinov 的视频UML 图评论。UML 还广泛用于描述各种流程,例如:使用 JWT 的单点登录。回到 UML 类图的使用,值得注意的是《Head First: Design Patterns》一书,其中的模式是通过那些相同的 UML 图来说明的。事实证明UML确实被使用了。事实证明,了解和理解其应用是一项非常有用的技能。
应用
让我们看看如何从 IDE 使用相同的 UML。让我们将IntelliJ Idea作为一个 IDE 。如果我们使用IntelliJ Idea Ultimate,那么我们将开箱即用安装“ UML Support ”插件。它允许您自动生成漂亮的类图。例如,使用 Ctrl+N 或菜单项“Navigate”->“Class”我们转到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
包含一些对象的内容。在这种情况下,连接类型将为聚合。本例中的单位是ArrayList
,因为 它包含其他对象。我们选择聚合是因为列表中的对象可以在没有列表的情况下生存:它们不是列表的组成部分。他们的生命周期与列表的生命周期无关。聚合从拉丁语翻译为“组装的”,即由某物组成的某物。例如,生活中有一个抽油机,它由泵和电机组成。该装置本身可以拆卸,留下一些组件。例如,出售或放入另一个单位。名单也是如此。这以单位附近的空菱形和连续线的形式表示。让我们这样描述它:
class Object{
}
ArrayList o- Object
现在我们想要表明,与 不同的是ArrayList
,该类LinkedList
包含Node
引用存储数据的容器。在这种情况下,Node
他们就是自己的一部分LinkedList
,无法单独生活。Node
不是直接存储的内容,而仅包含指向它的链接。例如,当我们添加到LinkedList
一行时,我们添加一个 new Node
,其中包含指向该行的链接,以及指向上一行和下一行的链接Node
。这种类型的通信称为组合。为了显示复合材料(由多个部分组成的复合材料),需要绘制一个彩色菱形,并用一条连续的线通向它。现在让我们将其写为连接的文本显示:
class Node{
}
LinkedList *-- Node
现在我们需要学习如何显示另一种重要的关系类型——依赖关系。当一个类使用另一个类,并且该类不包含正在使用的类并且不是其后代时,将使用它。例如,LinkedList
他们ArrayList
知道如何创建ListIterator
. 让我们将其显示为带有虚线的箭头:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
毕竟,它看起来像这样:
自动化
有多种方法可以自动生成 PlantUML 图。例如,Idea有一个SketchIT插件,但它不能完全正确地绘制它们。例如,接口的实现绘制不正确(显示为继承)。互联网上也有一些示例,说明如何将其构建到项目的构建生命周期中。假设有一个使用uml-java-docklet的Maven示例。为了展示这是如何完成的,我们将使用Maven Archetype快速创建 Maven 项目。让我们执行命令: 当要求选择过滤器(选择数字或应用过滤器)时,只需按 Enter 键即可保留默认值。这将始终是“ maven-archetype-quickstart ”。选择最新版本。接下来我们回答问题并完成项目的创建:mvn archetype:generate
mvn clean install
mvn javadoc:javadoc
GO TO FULL VERSION