软件建模
软件建模,就是为要开发的软件建造模型。模型是对客观存在的抽象,常说的数学建模,就是用数学公式作为模型,抽象表达事务的本质规律。还有一些东西也是模型,比如地图、各种图纸、机械装置的图纸、电子电路的图纸、建筑设计的图纸,也是对物理实体的建模。而软件,也可以通过各种图进行建模。
通过建模,我们可以把握事物的本质规律和主要特征,正确建造模型和使用模型,以防在各种细节中迷失方向。软件系统庞大复杂,通过软件建模,我们可以抽象软件系统的主要特征和组成部分,梳理这些关键组成部分的关系,在软件开发过程中依照模型的约束开发,系统整体的格局和关系就会可控,相关人员从始至终都能清晰了解软件的蓝图和当前的进展,不同的开发工程师会很清晰自己开发的模块和其他同事工作内容的关系与依赖,并按照这些模型开发代码。
软件开发中客观存在
(1)要解决的领域问题,对这些客观领域问题的抽象就是各种功能及其关系、各种模型对象及其关系、各种业务处理流程;
(2)最终开发出来的软件系统,这个软件系统也是客观存在的,软件由哪些主要类组成,这些类如何组织构成一个个的组件,这些类和组件之间的依赖关系如何,运行期如何调用,需要部署多少台服务器,服务器之间如何通信等。
所有这两个方面客观存在的抽象,就是我们的软件模型,一方面我们要对领域问题和软件系统进行分析、设计、抽象,另一方面,我们根据抽象出来的模型开发,实现出最终的软件系统。
4 + 1 视图模型
- 逻辑视图: 描述软件的功能逻辑,由哪些模块组成,模块中包含那些类,其依赖关系如何。
- 开发视图: 包括系统架构层面的层次划分,包的管理,依赖的系统与第三方的程序包。开发视图某些方面和逻辑视图有一定重复性,不同视角看到的可能是同一个东西,开发视图中一个程序包,可能正好对应逻辑视图中的一个功能模块。
- 过程视图: 描述程序运行期的进程、线程、对象实例,以及与此相关的并发、同步、通信等问题。
- 物理视图: 描述软件如何安装并部署到物理的服务上,以及不同的服务器之间如何关联、通信。
- 场景视图: 针对具体的用例场景,将上述 4 个视图关联起来,一方面从业务角度描述,功能流程如何完成,一方面从软件角度描述,相关组成部分如何互相依赖、调用。
UML建模
UML,即统一建模语言,所谓统一,指的是在软件建模工具和方法上业界达成共识,用UML 统一软件建模工具;所谓建模,就是用 UML 对领域业务问题和软件系统进行设计抽象,一个工具完成软件开发过程中的两个客观存在的建模;所谓语言,一方面满足设计阶段和各个相关方沟通的目的;一方面可以用来思考,即使软件开发过程不需要跟其他人沟通,或者还没到沟通的时候,依然可以使用 UML 建模画图,帮助自己进行设计思考。