JavaRush /Java 博客 /Random-ZH /UML:从理论到实践
Viacheslav
第 3 级

UML:从理论到实践

已在 Random-ZH 群组中发布

介绍

我想每个人小时候都听过这样一句话:“测量两次,切割一次”。在编程中也是如此。在花时间执行之前先考虑一下实施总是更好的做法。通常在实现过程中,您必须创建类并发明它们的交互。通常,这种视觉表示可以帮助以最正确的方式解决问题。这就是UML帮助我们的地方。

什么是UML?

如果您查看搜索引擎中的图片,就会清楚UML是关于图表、箭头和正方形的东西。重要的是 UML 转换为统一建模语言。统一这个词在这里很重要。也就是说,我们的图片不仅可以被我们自己理解,也可以被了解 UML 的其他人理解。原来这是一种绘制图表的国际语言。

UML:从理论到实践 - 1

正如维基百科所说

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类。现在,通过类名称的上下文菜单,选择“图表”->“显示图表弹出窗口”。结果,我们得到了一个漂亮的图表:
UML:从理论到实践 - 2
但如果你想自己画,而你连 Idea 的终极版都没有怎么办?如果我们使用IntelliJ Idea Community Edition,那么我们别无选择。为此,您需要了解此类 UML 图的结构。首先,我们需要安装Graphviz。这是一组用于可视化图形的实用程序。它由我们将使用的插件使用。安装完成后,您需要将Graphviz安装目录中的bin目录添加到您的PATH环境变量中。之后,在 IntelliJ Idea 中,从菜单中选择“文件”->“设置”。在“设置”窗口中,选择“插件”类别,单击“浏览存储库”按钮并安装PlantUML 集成插件。为什么PlantUML这么好?它使用一种称为“”的图形描述语言来描述 UML,这使得它更加通用,因为...... 这种语言不仅被 PlantUML 使用。而且,我们下面所做的一切不仅可以在 IDE 中完成,还可以在在线服务planttext.com中完成。安装PlantUML插件后,我们就可以通过“文件”->“新建”来创建UML图。让我们创建一个“UML 类”类型的图。在此过程中,会自动生成带有示例的模板。让我们删除它的内容并创建我们自己的内容,并使用 Habr 的一篇文章:类关系 - 从 UML 到代码。为了理解如何在文本中描述这一点,让我们看一下 PlantUML 手册:plantuml class-diagram。一开始有一个表格显示了如何描述连接:
UML:从理论到实践 - 3
我们还可以在这里查看连接本身:“ UML 中类之间的关系。示例”。基于这些材料,让我们开始创建我们的 UML 图。让我们添加以下内容来描述这两个类:

@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
毕竟,它看起来像这样:
UML:从理论到实践 - 4
您可以根据需要了解尽可能多的细节。所有名称均在此处表示:“ PlantUML - 类图”。此外,绘制这样的图表并没有什么超自然的,并且在执行任务时,您可以快速手绘它。这将培养您思考应用程序架构的技能,并帮助您尽早识别类结构缺陷,而不是在您花了一天时间实现错误的模型之后。我认为这是尝试一下的好理由?)
UML:从理论到实践 - 5

自动化

有多种方法可以自动生成 PlantUML 图。例如,Idea有一个SketchIT插件,但它不能完全正确地绘制它们。例如,接口的实现绘制不正确(显示为继承)。互联网上也有一些示例,说明如何将其构建到项目的构建生命周期中。假设有一个使用uml-java-docklet的Maven示例。为了展示这是如何完成的,我们将使用Maven Archetype快速创建 Maven 项目。让我们执行命令: 当要求选择过滤器(选择数字或应用过滤器)时,只需按 Enter 键即可保留默认值。这将始终是“ maven-archetype-quickstart ”。选择最新版本。接下来我们回答问题并完成项目的创建: mvn archetype:generate
UML:从理论到实践 - 6
由于 Maven 不是本文的重点,因此您可以在Maven 用户中心找到 Maven 问题的答案。在生成的项目中,打开项目描述文件pom.xml进行编辑。让我们将uml-java-docklet 安装说明中的内容复制到其中。在 Maven 中央存储库中找不到描述中使用的工件。但这对我有用: https: //mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0。也就是说,在该描述中,您只需将“ info.leadinglight ”中的groupId替换为“ com.chfourie ”,并将版本设置为“ 1.0.0 ”。之后,我们可以在pom.xml文件所在的目录中执行这些命令:和。现在,如果我们打开生成的文档(explorer target\site\apidocs\index.html),我们将看到 UML 图。顺便说一句,这里的实现已经正确显示) mvn clean installmvn javadoc:javadoc

结论

正如您所看到的,UML 允许您可视化应用程序的结构。而且,UML 不仅限于此。使用 UML,您可以描述公司内的各种流程或描述您正在编写的函数在其中运行的业务流程。UML 对您个人有多大用处取决于您自己,但花时间更详细地阅读它无论如何都会很有用。#维亚切斯拉夫
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION