Android Studio中绘制UML类图介绍

动机

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

UML介绍

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

UML类图基础

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

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

Alt pic

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

Alt pic

上图每个类做了简化,只体现出其类名,我们重点关注的是类和类之间的连接。 图中有6中连接线,一般可以表达我们常见的类和类之间的关系。 标准的连接线内涵的定义可见此:http://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html 这里我结合网上的说明,简化一下表达而更好的用于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;

详细的安装请参考:http://blog.csdn.net/u013831257/article/details/50118461

PlantUML的使用

先来一幅图看看效果:

Alt pic

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

Fragment <|-- BillMainFragment
class BillMainFragment{
    +{static}CategorySelectorState
    +{static}CategorySelectorChangeEvent
    #ViewPager;
    #DataSelectView;

}
ViewPager <--> DataSelectView
CategorySelectorState --> BillModule

BillMainFragment --> MonthPagerAdapter
BillMainFragment --> YearPagerAdapter
BillMainFragment --> CustomPagerAdapter

CalendarModel <|.. MonthPagerAdapter
CalendarModel <|.. YearPagerAdapter
CalendarModel <|.. CustomPagerAdapter

MonthPagerAdapter --|> FragmentStatePagerAdapter
YearPagerAdapter --|> FragmentStatePagerAdapter
CustomPagerAdapter --|> FragmentStatePagerAdapter

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

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

    PlantUML_Language_Reference_Guide.pdf

总结

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

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

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

修改1

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值