博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Studio中绘制UML类图介绍
阅读量:4074 次
发布时间:2019-05-25

本文共 2350 字,大约阅读时间需要 7 分钟。

内容概要:本文主要介绍UML类图的概念,以及如何在Android Studio中利用代码来编写一个UML类图,偏于新手向。

动机

最近开始阅读项目源码,从其中一个模块开始看,奈何大项目中的一个模块,对于萌新而言,也太过于复杂。类和类之间的继承,接口的定义及回调时机,各种设计模式下的逻辑跳转。。。随着代码不断跟踪,回过头来已不知身处何处。因此想着,能把大致的类图框架绘制出来,在此基础上学习,无论是帮助自己理清逻辑,还是对于讲来给他人讲解都大有帮助,那么,开始UML吧!

UML介绍

统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言。UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。

UML类图基础

首先需要说明的是,UML可以干很多事,画各种各样的逻辑图,这里只关心它在类图中的使用。

下图是一个典型的类图,包括类名,类中有的属性和方法,也展现了响应的访问级别(虽然不是必需的):

Alt pic

当多个类图放置在一起时,通过各种连接线将类图之间的关系表示出来,就表达出了我们需要的类的结构信息,典型如下图:

Alt pic

上图每个类做了简化,只体现出其类名,我们重点关注的是类和类之间的连接。 图中有6中连接线,一般可以表达我们常见的类和类之间的关系。 标准的连接线内涵的定义可见此: 这里我结合网上的说明,简化一下表达而更好的用于java类图当中。

Alt pic 空心箭头实线: 表示类A继承于类B

Alt pic 空心箭头虚线:表示小汽车和自行车实现了“车”这个接口

Alt pic 带方向的实线: 表示A中具有B这个成员变量

Alt pic 带方向的虚线:表示A中的一般方法需要B作为传入参数

Alt pic 空心棱形实线: 表示B中的构造方法(或set方法)需要A作为传入参数

Alt pic 实心棱形实线: 表示B中构造函数中将A进行了实例化

OK,六种基本线的涵义大致如上,可能有偏差,具体还是以UML的定义为准,这里只是为了更好的理解和使用。

UML类图的绘制

Talk is easy, show me the code.

绘制UML类图的工具有很多,在线的、本地的、收费的、免费的。本文中使用的绘制UML类图的,是PlantUML,这实际上是一个java类库,能够将代码转化成UML类图。 因此我们绘制UML的过程,实际上就是一个编写代码的过程,相比于拖动控件,更为适合程序员?。? 在Android Studio中,需要做的准备有:

  • 在file --> settings --> plugins中搜索UML,搜索结果中安装plantUML插件,重启AS;
  • 安装plantUML绘图的依赖库,大名鼎鼎的贝尔实验室开发的一个工具包:Graphviz;

详细的安装请参考:

PlantUML的使用

先来一幅图看看效果:

Alt pic

上图就是利用PlantUML代码编写的UML类图。实际上,PlantUML的语法非常简单,和Markdown语法有的一比。 先贴代码,然后分析:

Fragment <|-- BillMainFragmentclass BillMainFragment{
+{static}CategorySelectorState +{static}CategorySelectorChangeEvent #ViewPager; #DataSelectView;}ViewPager <--> DataSelectViewCategorySelectorState --> BillModuleBillMainFragment --> MonthPagerAdapterBillMainFragment --> YearPagerAdapterBillMainFragment --> CustomPagerAdapterCalendarModel <|.. MonthPagerAdapterCalendarModel <|.. YearPagerAdapterCalendarModel <|.. CustomPagerAdapterMonthPagerAdapter --|> FragmentStatePagerAdapterYearPagerAdapter --|> FragmentStatePagerAdapterCustomPagerAdapter --|> FragmentStatePagerAdapter

讲道理,自己对着代码和类图看看就能明白,这里大概总结一下:

  • (“>")代表方向箭头,("--")代表实线,("..")代表虚线,("|>")代表封闭的空心箭头,(”*“)代表实心棱形,(”o“)代表空心棱形
  • 箭头具有方向行,代码中的箭头方向和类图中的会保持一致
  • 两端都可以有箭头或者其他标志,可以自由组合,试试就清楚
  • 可以定义类,用class关键字;也可以不定义直接使用
  • 相同名字的类会被认为是同一个
  • 可以用+、#、-、等来定义一个类中的访问控制
  • 代码中的先后顺序和绘制图中的顺序没有必然联系
  • 更多的还是要参看plantUML的语法,本文中没有使用到更多的语法,附件里有plantuml的语法书

总结

内容不多,希望提供一个指引作用,要了解的更多还是使用一下就好。使用代码生成的好处是能更理解类之间的关系,但是坏处是当类关系复杂时,画出的UML类图不能排版, 特别乱。

工欲善其事,必先利其器。

画好UML类图后,再去看源码,再也不怕迷路了。

修改1

发现更简单的编写方式,class A extends B implements C plantUML支持这种写法!可以自动绘制类A、类B、接口C并生成连接关系!

转载地址:http://zquni.baihongyu.com/

你可能感兴趣的文章
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>
二叉树的非递归遍历
查看>>
【leetcode】Reorder List (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Candy(python)
查看>>
【leetcode】Sum Root to leaf Numbers
查看>>
【leetcode】Pascal's Triangle II (python)
查看>>
如何成为编程高手
查看>>
本科生的编程水平到底有多高
查看>>
Solr及Spring-Data-Solr入门学习
查看>>
python_time模块
查看>>
python_configparser(解析ini)
查看>>
selenium学习资料
查看>>
从mysql中 导出/导入表及数据
查看>>
HQL语句大全(转)
查看>>
几个常用的Javascript字符串处理函数 spilt(),join(),substring()和indexof()
查看>>
javascript传参字符串 与引号的嵌套调用
查看>>