UML
定义:是统一建模语言,是一种开放的方法,用于说明、可视化、构建和编写一个正在开发 的、面向对象的、软件密集系统的制品的开放方法
作用:
1、帮助开发团队以一种可视化的方式理解系统的功能需求。
2、有利于开发团队队员间在各个开发环节间确立沟通的标准,便于系统文档的制定和项 目的管理。因为UML的简单、直观和标准性,在一个团队中用UML来交流比用文字说 明的文档要好得多。
3、UML为非专业编程人士理解软件的功能和构造,提供了一种直白、简单、通俗的方法。
4、使用uml可以方便理解各种框架的设计方式
如果以后想成为架构师,或者技术性转型的产品经理,工作中一般都是用UML建模。
工具下载
PowerDesigner(不能挂链接)
面向对象模型(四大类)
-
用例图(The Use Case Diagram)
image.png
-
结构图
结构图分为类图、组合结构图、对象图、包图。
image.png
-
动态图
image.png
-
交互图
image.png
其中
最为重要,也用的最多,其他用的非常少。就不细说明了。
用例图
上面提到了下载工具,我是下载的window版的。然后创建各种图,如下图所示,其他同理。

举个栗子,比如我们去洗脚城(我没去过),大人小孩都可以去,种类很多,洗脚,按摩,其他特殊。是不是都可以选择呢?NO,大人可以全部选择,小孩就只能按摩、洗脚。那么这些服务都有一个特性,就是要付钱吧?总不能拍拍屁股跑了吧?(可以理解这些服务都有支付功能)当我要支付的时候,可以用微信、支付宝、银联,但是这三个支付方式都属于支付功能里面的,微信、支付宝、银联都是支付功能的扩展,画图一定要这么理解,是某某某的扩展就要指向某某某,下图会体现出来。


这些关系在上上图介绍都有说明,工具图标自己摸索一下哦。
注意包含和扩展,是一种特殊的依赖关系。包含可以用include中英文,扩展也可以用extend中英文。
类图
目前只模拟客户从白马会所下单,如果要把整个支付流程写完有点耗时间,不过能写到下单流程后面的就好写了,注意设置语言。
整张图的流程是这样子的。

现在开始分析:
我们先创建一个接口目的是为了提供一个下单接口然后双击,name是给自己看的,Code就是类名或者接口名,Code要自己定义哦。

下单接口里面肯定有个下单方法,我们在这个接口里面添加一个方法,注意Attributetes选项是接口或者类的变量,属性,Operation选项是类或者接口里面的方法名字,后续的类都会这么写,下面就不叙述了。我们在这个接口里面写一个名称叫做统一下单接口的onOrder方法。Return Ty是返回的类型,我们这个接口选择用void,A/F/S分别代表abstract,final,static.我们这里直选A

接下来写一个下单接口实现类去实现下单接口,并且用线关联起来,选择之后点apply点确定,后续不再叙述。



然后我们创建下单管理类,并且用关联关系连接起来,我们双击这个关联关系的线,然后改成1对1的形式,一个下单管理类对应一个下单接口实现类。


注意getInstance是为了创建单例,返回类型要点击那个...选择下单管理类才会返回类对象。下单方法ComfirmOrder先这么写,等订单出来,我们再返回这里处理。

然后我们既然要下单,起码要有订单吧。这里订单没有方法只有属性哦。这里用组合关系连接起来(文章开始有说明),如果没有订单,就无法下单。并且下单管理类和下单是一对多的关系。



现在我们回到下单管理类,我们在下单管理类里面要添加订单的一些属性对吧

接下来就会变成这个样子了

其他左右两边的我就不一 一截图了,说明一下吧,下单的时候应该有个网络管理类,管理类是依赖关系,依赖有没有网络才能下单对吧,下单管理类和普通客户是聚合关系(价格我们不需要客户名称什么的也可以下单,因为有微信支付嘛,假设就是这样),聚合关系上面解释有,并不一定是需要存在的才能下单,所以要用聚合线把他们联系起来,客户分为普通客户和VIP客户,都是同属于客户这一类,属于泛化关系Generalization。

我们化的这个图是可以导出代码的哦,先选择导出格式(不设置的话会有很多无用注释,第二步再选择路径导代码)



这种叫方式叫正向工程(从模型转代码)
逆向工程就是把你的demo(比如你写了MVP模式),把整个代码加进去就可以看到模型了,可以试一下


活动图
仿微信支付流程

时序图
微信支付大致的流程就是这个样子,省略了微信那边下单的方式

网友评论