# 软件建模


## 软件建模
* 模型是对客观存在的抽象
* 抽象表达事务的本质规律
* 把握事物的本质规律和主要特征,正确建造模型和使用模型,以防在各种细节中迷失方向。
* 一个是我们要解决的领域问题
* 另一个客观存在就是最终开发出来的软件系统
![design.png](/images/design.png)

## 4+1视图模型
![view_model.png](images/view_model.png)
* 逻辑视图
描述软件的功能逻辑,由哪些模块组成,模块中包含那些类,其依赖关系如何。
* 开发视图
包括系统架构层面的层次划分,包的管理,依赖的系统与第三方的程序包。

开发视图某些方面和逻辑视图有一定重复性,不同视角看到的可能是同一个东西,开发视图中一个程序包,可能正好对应逻辑视图中的一个功能模块。
* 过程视图
描述程序运行期的进程、线程、对象实例,以及与此相关的并发、同步、通信等问题。
* 物理视图
描述软件如何安装并部署到物理的服务上,以及不同的服务器之间如何关联、通信。
* 场景视图
针对具体的用例场景,将上述 4 个视图关联起来,一方面从业务角度描述, 功能流程如何完成,一方面从软件角度描述,相关组成部分如何互相依赖、调用。

## UML建模
一方面满足设计阶段和各个相关方沟通的目的;一方面可以用来思考,即使软件开发过程不需要跟其他人沟通,或者还没到沟通的时候,依然可以使用 UML 建模画图,帮助自己进行设计思考。
