type
status
date
slug
summary
tags
category
icon
password
Property
Nov 2, 2022 06:13 AM
软件建模
所谓软件建模,就是为要开发的软件建造模型。模型是对客观存在的抽象,我们常说的数学建模,就是用数学公式作为模型,抽象表达事务的本质规律,比如著名的 E=mc2,就是质量能量转换的物理规律的数学模型。除了数学公式是模型,还有一些东西也是模型,比如地图,就是对地理空间的建模。各种图纸,机械装置的图纸、电子电路的图纸、建筑设计的图纸,也是对物理实体的建模。而软件,也可以通过各种图进行建模。
通过建模,我们可以把握事物的本质规律和主要特征,正确建造模型和使用模型,以防在各种细节中迷失方向。软件系统庞大复杂,通过软件建模,我们可以抽象软件系统的主要特征和组成部分,梳理这些关键组成部分的关系,在软件开发过程中依照模型的约束开发,系统整体的格局和关系就会可控,相关人员从始至终都能清晰了解软件的蓝图和当前的进展,不同的开发工程师会很清晰自己开发的模块和其他同事工作内容的关系与依赖,并按照这些模型开发代码。
在软件开发中,有两个客观存在,一个是我们要解决的领域问题,比如我们要开发一个电子商务网站,那么客观的领域问题就是如何做生意,卖家如何管理商品、管理订单、服务用户,买家如何挑选商品,如何下订单,如何支付等等。对这些客观领域问题的抽象就是各种功能及其关系、各种模型对象及其关系、各种业务处理流程。
另一个客观存在就是最终开发出来的软件系统,这个软件系统也是客观存在的,软件由哪些主要类组成,这些类如何组织构成一个个的组件,这些类和组件之间的依赖关系如何,运行期如何调用,需要部署多少台服务器,服务器之间如何通信等。
所有这两个方面客观存在的抽象,就是我们的软件模型,一方面我们要对领域问题和软件系统进行分析、设计、抽象,另一方面,我们根据抽象出来的模型开发,实现出最终的软件系统。这就是软件开发的主要过程。而对领域问题和软件系统进行分析、设计和抽象的这个过程,我们专门划分出来,就是软件建模与设计。
4+1 视图模型
软件建模比较知名的是 4+1 视图模型,准确地说,4+1 模型不是一种软件建模工具和方法,而是一种软件建模方法的方法,即建模方法论。
4+1 视图模型认为,一个完整的软件设计模型,应该包括 5 部分的内容:
逻辑视图:描述软件的功能逻辑,由哪些模块组成,模块中包含那些类,其依赖关系如何。
开发视图:包括系统架构层面的层次划分,包的管理,依赖的系统与第三方的程序包。开发视图某些方面和逻辑视图有一定重复性,不同视角看到的可能是同一个东西,开发视图中一个程序包,可能正好对应逻辑视图中的一个功能模块。
过程视图:描述程序运行期的进程、线程、对象实例,以及与此相关的并发、同步、通信等问题。
物理视图:描述软件如何安装并部署到物理的服务上,以及不同的服务器之间如何关联、通信。
场景视图:针对具体的用例场景,将上述 4 个视图关联起来,一方面从业务角度描述,功能流程如何完成,一方面从软件角度描述,相关组成部分如何互相依赖、调用。
在机械制图领域,一个立体的零件进行制图设计,必须要画三视图,即正视图、侧视图、俯视图,每张图都平面的,但是组合起来就完整地描述了一个立体的机械零件。4+1 视图模型也是通过多个角度描述软件系统的某个方面的抽象模型,最终组合起来构成一个软件完整的模型。
三视图中,有些部分是重复的,而正是这些重复的部分将机械零件不同视角的细节关联起来,使看图者准确了解一个机械零件的完整结构。软件建模的时候也是如此,作为设计者,也许你觉得用多个视图描述软件模型会重复,但是阅读你的设计文档的人,正是通过这些重复,才将软件的各个部分关联起来,对软件整体形成完整的认识。
我在前面说 4+1 视图模型是一种方法论的原因,就在于这 5 种视图模型主要指导我们应该从哪些方面去对我们的业务和软件建模。而具体如何去建模,如何画模型,则可以使用各种建模工具去完成,重要的是这些模型能够构成一个整体,从多个视角完整抽象软件系统的各个方面。
在实践中,通常用来进行软件建模画图的工具是 UML,建模的时候,也不一定要把 5 种视图都画出来。因为不同的软件类型其特点和设计关注点各不相同,只要能向相关人员准确传递出自己的设计意图就可以了。