软件建模就是为开发的软件建造模型。比如,数学公式就是对某些显示规律的抽象成的数学模型,地图就是对现实地理空间的建模,各种机械装置的设计图纸都是对物理实体的建模。软件建模基本要素:
建模的依据就是领域问题,比如电子商务网站、OA系统等各个领域的现实产品。客观上我们需要围绕这个领域,设计该领域内的问题解决方案,比如,电子商务中卖家如何管理商品,管理订单,买家如何挑选,如何购买,如何支付等等。
模型也就是我们建抽象出来的东西。这个过程主要是依赖于建模工具,以设计图的形式产出该模型。
软件系统即最终开发出来的产品,需要我们依据设计的模型,解决如何组织系统中的每个组件,如何整理组件间的依赖关系,如何进行服务间的调用等问题。
因此,软件建模的过程其实就是依赖建模工具为软件设计图纸。
如何进行软件建模
通常,我们都会使用UML(统一建模语言)来进行建模,UML包含的软件模型有10种,常用的包括:类图、时序图、组件图、部署图、用例图、状态图、活动图。
类图
类图用于描述类的特性和类之间的关系。类的组成部分包含:类名、属性列表、方法列表。类与类之间的关系包含:关联、依赖、组合、聚合、继承、泛化。把多个相关的类在一张图上表示出来就是类图。
- 在本张类图中,顶级类是“车”,<>表示该类为抽象类;
- “车”有两个实现类,分别是“小汽车”和“自行车”,实现关系用带空心三角箭头的虚线表示;
- “小汽车”有一个继承类“SUV”,他们之间对应的关系为泛化关系,泛化关系用带空心三角箭头的实线表示;
- “小汽车”和“发动机”以及“轮胎”都是组合关系,使用带实心菱形箭头的实线表示;
- “学生”和“自行车”是依赖关系,使用带箭头的虚线表示;
- “学生”和“班级”是聚合关系,使用带空心箭头的实线表示;
- “学生”和“身份证”是关联关系,使用实线表示
总结:
实现关系表现为:继承抽象类或者接口
泛化关系表现为:继承非抽象类
聚合关系表现为:部分和整体的关系,但是不存在强依赖关系
组合关系表现为:一种强依赖的聚合关系,如果整体不存在了,不分也将不存在
关联关系表现为:不同类的对象之间的关系,比如,人和身份证,通常是静态关系,与运行状态无关
依赖关系表现为:是一种临时性的关系,与运行状态有关
时序图
时序图用来描述参与者之间的动态调用关系。
组件图
一个组件通常由多个类组成,组件的粒度通常约等于一个模块,当我们进行模块设计的时候,通常就用组件图表示。组件图描述的是组件间的静态关系,大部分情况下是依赖关系。
软件建模就是为开发的软件建造模型。比如,数学公式就是对某些显示规律的抽象成的数学模型,地图就是对现实地理空间的建模,各种机械装置的设计图纸都是对物理实体的建模。软件建模基本要素:
建模的依据就是领域问题,比如电子商务网站、OA系统等各个领域的现实产品。客观上我们需要围绕这个领域,设计该领域内的问题解决方案,比如,电子商务中卖家如何管理商品,管理订单,买家如何挑选,如何购买,如何支付等等。
模型也就是我们建抽象出来的东西。这个过程主要是依赖于建模工具,以设计图的形式产出该模型。
软件系统即最终开发出来的产品,需要我们依据设计的模型,解决如何组织系统中的每个组件,如何整理组件间的依赖关系,如何进行服务间的调用等问题。
因此,软件建模的过程其实就是依赖建模工具为软件设计图纸。
如何进行软件建模
通常,我们都会使用UML(统一建模语言)来进行建模,UML包含的软件模型有10种,常用的包括:类图、时序图、组件图、部署图、用例图、状态图、活动图。
类图
类图用于描述类的特性和类之间的关系。类的组成部分包含:类名、属性列表、方法列表。类与类之间的关系包含:关联、依赖、组合、聚合、继承、泛化。把多个相关的类在一张图上表示出来就是类图。
- 在本张类图中,顶级类是“车”,<>表示该类为抽象类;
- “车”有两个实现类,分别是“小汽车”和“自行车”,实现关系用带空心三角箭头的虚线表示;
- “小汽车”有一个继承类“SUV”,他们之间对应的关系为泛化关系,泛化关系用带空心三角箭头的实线表示;
- “小汽车”和“发动机”以及“轮胎”都是组合关系,使用带实心菱形箭头的实线表示;
- “学生”和“自行车”是依赖关系,使用带箭头的虚线表示;
- “学生”和“班级”是聚合关系,使用带空心箭头的实线表示;
- “学生”和“身份证”是关联关系,使用实线表示
总结:
实现关系表现为:继承抽象类或者接口
泛化关系表现为:继承非抽象类
聚合关系表现为:部分和整体的关系,但是不存在强依赖关系
组合关系表现为:一种强依赖的聚合关系,如果整体不存在了,不分也将不存在
关联关系表现为:不同类的对象之间的关系,比如,人和身份证,通常是静态关系,与运行状态无关
依赖关系表现为:是一种临时性的关系,与运行状态有关
时序图
时序图用来描述参与者之间的动态调用关系。
组件图
一个组件通常由多个类组成,组件的粒度通常约等于一个模块,当我们进行模块设计的时候,通常就用组件图表示。组件图描述的是组件间的静态关系,大部分情况下是依赖关系。 软件建模就是为开发的软件建造模型。比如,数学公式就是对某些显示规律的抽象成的数学模型,地图就是对现实地理空间的建模,各种机械装置的设计图纸都是对物理实体的建模。软件建模基本要素:
建模的依据就是领域问题,比如电子商务网站、OA系统等各个领域的现实产品。客观上我们需要围绕这个领域,设计该领域内的问题解决方案,比如,电子商务中卖家如何管理商品,管理订单,买家如何挑选,如何购买,如何支付等等。
模型也就是我们建抽象出来的东西。这个过程主要是依赖于建模工具,以设计图的形式产出该模型。
软件系统即最终开发出来的产品,需要我们依据设计的模型,解决如何组织系统中的每个组件,如何整理组件间的依赖关系,如何进行服务间的调用等问题。
因此,软件建模的过程其实就是依赖建模工具为软件设计图纸。
如何进行软件建模
通常,我们都会使用UML(统一建模语言)来进行建模,UML包含的软件模型有10种,常用的包括:类图、时序图、组件图、部署图、用例图、状态图、活动图。
类图
类图用于描述类的特性和类之间的关系。类的组成部分包含:类名、属性列表、方法列表。类与类之间的关系包含:关联、依赖、组合、聚合、继承、泛化。把多个相关的类在一张图上表示出来就是类图。
- 在本张类图中,顶级类是“车”,<>表示该类为抽象类;
- “车”有两个实现类,分别是“小汽车”和“自行车”,实现关系用带空心三角箭头的虚线表示;
- “小汽车”有一个继承类“SUV”,他们之间对应的关系为泛化关系,泛化关系用带空心三角箭头的实线表示;
- “小汽车”和“发动机”以及“轮胎”都是组合关系,使用带实心菱形箭头的实线表示;
- “学生”和“自行车”是依赖关系,使用带箭头的虚线表示;
- “学生”和“班级”是聚合关系,使用带空心箭头的实线表示;
- “学生”和“身份证”是关联关系,使用实线表示
总结:
实现关系表现为:继承抽象类或者接口
泛化关系表现为:继承非抽象类
聚合关系表现为:部分和整体的关系,但是不存在强依赖关系
组合关系表现为:一种强依赖的聚合关系,如果整体不存在了,不分也将不存在
关联关系表现为:不同类的对象之间的关系,比如,人和身份证,通常是静态关系,与运行状态无关
依赖关系表现为:是一种临时性的关系,与运行状态有关
时序图
时序图用来描述参与者之间的动态调用关系。
组件图
一个组件通常由多个类组成,组件的粒度通常约等于一个模块,当我们进行模块设计的时候,通常就用组件图表示。组件图描述的是组件间的静态关系,大部分情况下是依赖关系。
部署图
描述的是软件系统的最终部署情况,着重描述的是软件的系统结构,体现软件系统的运行蓝图,服务器之间的关系,以及外部服务的依赖体现。
用例图
用例图主要用来反映用户和软件系统的交互情况。
状态图
描述单个对象生命周期的转换。比如,某个账户的生命周期变换,从创建到更改到冻结再到关闭的流程或者触发条件等等。
活动图
很多情况下,我们都用活动图代替流程图,原因是他们很相似。
前面提到,建模的过程就是软件设计的过程。那么这么多的设计流程,分别使用在哪些阶段呢?软件设计分为需求分析、概要设计和详细设计三个阶段。
需求阶段:
使用用例图来描述系统的功能与使用场景;对于关键的业务模块,使用活动图来表示;使用类图进行领域模型抽象,描述核心领域对象之间的关系;使用状态图来描述某些对象内部复杂得状态变化。
概要设计阶段:
通过部署图描述系统的最终物理蓝图,通过组件图或者组件时序图描述软件中主要模块及其关系,或者是组件活动图来描述组件间的逻辑流程。
详细设计阶段:
主要使用类图和时序图指导最终代码的开发,或者是活动图描述某个复杂的逻辑。