John Squirrels
第 41 级
San Francisco

UML 类图

已在 随机的 群组中发布
个会员

介绍

我想每个人都听过“两次测量,一次切割”这句话。这是编程中的真实建议。在花时间执行它之前考虑一下实现总是更好。在实现过程中,您经常需要创建类并考虑它们将如何交互。这一切的直观表示通常可以帮助您提出最正确的解决方案。这就是 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 类。现在在类名称的上下文菜单中,选择“图表”->“显示图表弹出窗口”。结果,我们得到了一个漂亮的图表。 UML:从理论到实践 - 2 但是如果你想自己画图怎么办?如果您没有终极版怎么办?使用 IntelliJ IDEA Community Edition,我们别无选择。所以我们需要了解 UML 图是如何组织的。第一的,. 它是一组图形可视化工具。我们将使用的插件取决于它。安装完成后,需要将Graphviz安装目录下的bin目录添加到PATH环境变量中。之后,在 IntelliJ IDEA 中,选择菜单中的文件 -> 设置。在“设置”窗口中,选择“插件”类别,单击“浏览存储库”按钮,安装PlantUML 集成插件。PlantUML 有什么好处?它使用称为“点”的图形描述语言来描述 UML,这使得它更加通用,因为点语言不仅仅被 PlantUML 使用。更重要的是,我们在下面所做的一切不仅可以在 IDE 中完成,还可以在planttext.com上在线完成. 安装 PlantUML 插件后,我们将能够使用“文件”->“新建”创建 UML 图。让我们创建一个“UML 类”图。这将自动生成一个带有示例的模板。我们将删除其内容并添加我们自己的内容。要了解如何在文本中表示它,请查看 PlantUML 手册:plantuml 类图。 UML:从理论到实践 - 3依靠这些材料,让我们开始创建我们的 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包含一些对象。这样的话,就会有聚合关系。 数组列表是一个集合,因为它包含其他对象。我们说聚合是因为列表的对象可以在没有列表的情况下存在:它们不是列表的组成部分。它们的生命周期与列表的生命周期无关。“聚合”一词来自拉丁语,翻译为“组装”,即由某物组成的某物。比如在生活中,我们有一个水泵总成(骨料),它由水泵和电机组成。组件本身可以拆卸,我们可以不理会它的一些组件。例如,出售或投入另一个装配体。在列表中也是如此。这用聚合处的空菱形和实线表示。我们将表示如下:
class Object{
}
ArrayList o- Object
现在我们要展示的是,与ArrayList不同,LinkedList类包含Node s — 引用存储数据的容器。在这种情况下,NodeLinkedList的一部分,并不独立存在。节点不是内容本身它仅包含对内容的引用。例如,当我们将一个字符串添加到LinkedList时,我们将添加一个新节点,其中包含对该字符串的引用,以及指向上一个和下一个节点的链接. 这种关系称为组合。它是通过在复合材料(由组成部分制成的东西)上绘制一条带有填充菱形的连续线来描绘的。现在我们将关系表示为文本:
class Node{
}
LinkedList *-- Node
现在你需要学习如何描述另一种重要的关系:依赖。当一个类使用另一个类,但该类不包含也不继承所使用的类时使用它。例如,LinkedListArrayList知道如何创建ListIterator。我们将其表示为带虚线的箭头:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
完成所有这些之后,我们得到: UML:从理论到实践 - 4您可以根据需要添加尽可能多的细节。当然,绘制这样的图表并没有什么超自然的。在处理自己的任务时,您可以用手快速将其绘制出来。这将帮助您培养思考应用程序架构的能力,并及早发现类结构中的缺点,而不是在您已经花了一天时间实现错误的模型之后。这似乎是尝试它的一个很好的理由,不是吗?:)

自动化

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

结论

如您所见,UML 使您可以可视化应用程序的结构。但是 UML 可以做的更多。您可以使用 UML 来描述公司内部的各种流程,或者描述包含您正在编写的功能的业务流程。您需要自己决定 UML 对您个人有多大用处,但无论您做出什么决定,抽出时间进一步了解它都会很有帮助。
评论
  • 受欢迎
你必须先登录才能发表评论
此页面还没有任何评论