模型是对现实的简化
模型是提供系统的蓝图,模型可是包括详细计划。也可是是从更高程度考虑系统的总体计划,每个系统可以从不同的方面用不通过的模型来描述。因而每个模型都是在语义上闭合的抽象系统。模型可以是结构性的,强调系统的组织。也可是是行为性的,强调系统的动态方面
举例:售楼中心里面的楼盘蓝图
建模是为了能够更好地理解正在开发的系统
通过建模达到下面的目的
1、模型有助于按照实际情况或按照所需的样式对系统进行可视化
2、模型能够规约系统的结构或行为
3、模型给出了构造系统的模板
4、模型对做出的决策进行文档化
对于一个复杂的系统,如银行、电信系统建模的重要性就越大。如果不能很好的理解一个复杂系统,盲目开发,失败的可能性很大。
统一建模语言(Unified Modeling Language , UML) 是一种绘制软件蓝图的标准语言,可以用UML对软件密集的制品进行可视化、详述、构造和文档化
1、可视化:清晰的模型有利于交流
2、详述:可以使用uml对分析、设计、实现等决策进行详细描述
3、构造:把uml描述映射成编程语言
4、文档化:系统的所有细节都可以是uml进行描述。如:项目计划、发布活动等
1、企业信息系统
2、银行与金融服务
3、电信
4、国防、航天
5、科学
6、基于Web的分布式服务
在这里建模工具我是使用的VS2012自带的。
文件——新建——项目——建模项目
一群对象(object)享有相同的结构、行为、约束和语义时,称它们是同类(class)的对象。换句话说,定义一个类就相当于描述了一群对象。在类中, 使用属性(attribute)表达对象的结构, 使用操作(operation)表达对象的行为。
类是一组具有相同属性、操作、关系和语义的对象描述,一个类可是实现一个或者多个接口。左图是类在.net里面的图形表示
UML预设了四种可见性,分别为公开(public)、私有(private)、保护(protected)、包(package) 减号(-)为私有可见性,加号(+)为公开可见性
在UML中抽象类与普通是同一个是图表示,只是名字会变成斜体。
关系是事物之间的联系,在面向对象的建模中,有三种重要的关系是依赖、泛化、关联
依赖是一种使用关系,一个事物使用另一个事物。在图形上,把依赖画成一条有方向的虚线,指向被依赖的事物。如果被使用的类发生变化,那么另一个类的操作必然受影响
依赖这是一种典型的临时关系,代表了类之间的一种短暂的交互。依赖关系在 .net语言中体现为 局部变量、方法的参数或者对静态方法的调用,如工具类,现实生活中人与锤子。
在泛化关系中,子类继承了父类的行为和含义,子类也可以增加新的行为和含义或覆盖父类中的行为和含义。在图形上,在泛化画成一个带有空心三角行指向父类
在.Net里面泛化就是继承关系
关联是一种结构关系,它指明一个对象与另一个对象间的关系。
ClassA与ClassB相互关联
相互关联体现的是两个类、或者 类与接口之间语义级别的一种强依赖关系,是一种长期的稳定的关系;表现在代码层面,为被关联类以类属性的形式出现在关联类中,也可能是关联类引用了一个类型为被关联类的全局变量
单向关联
ClassA关联于ClassB
单向关联表现在代码层面,为被关联类B以类属性的形式出现在关联类 A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
聚合是关联关系的一种特例,他体现的是整体与部分拥有的关系。此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如汽车与发动机;表现在代码层面,和关联关系是一致的,只能从语义级别来区分
组合也是关联关系的一种特例,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;孕妇死了胎儿自然也就死了;表现在代码层面,和关联关系是一致的,只能从语义级别来区分
不建议使用双向关联. 关联有两个端点, 在每个端点可以有一个基数, 表示这个关联的类可以有几个实例.
常见的基数及含义
0..1:0 或1 个实例.
0..*: 对实例的数目没有限制.
1: 只能有一个实例.
1..*: 至少有一个实例.
接口(interface)如同契约,负责的类必须负责实现它的公开操作,以及负责维护它的公开属性
案例:公司-部门-员工 类图关系
正向工程: uml图生成代码
在图上直接点击右键,选择“”生成代码“就可完成正向工程骤
逆向工程:从代码生成uml图
通过体系结构资源管理器找到需要反向工程的类的类型,拖到uml图中。或者是在项目里面找到类的类型拖到项目里面也可以完成反向工程
注意:在反向工程的时候,类的绝对路径里面不能出现中文
用例图用来表达系统对外提供的服务或功能,适合用来作为需求搜集阶段的工作。
常用用例(UseCase)来表达系统需求或者系统对外呈现的行为,用例采用椭圆图示,参与者(Actor)是人型图示,由于它会参与系统的运作,因此它跟用例之间有连接线段
可以将自动柜员机的行为分成三个不同的用例,分别为取款、存款、加钱。自动柜员机外部一共有两个参与者会参与自动柜员机的行为,一个名为用户,另一个名为银行。顾客会参与前两个用例,应该参与最后一个用例
包含(include)关系指的是两个用例之间的关系,其中一个用例(称作基本用例,base use case)的行为包含了另一个用例(称作包含用例,include case)的行为。如图取款的 时候会包含一个用户验证的用例
扩展(extend)关系:将基本用例中一段相对独立并且可选的动作,用扩展(Extension)用例加 以封装,再让它从基用例中声明的扩展点(Extension Point)上进行扩展,从而使基用例行为更简练和目标更集中。如图我们在取完款后,可以打印凭条,也可以不用打印凭条。这个功能就可以使用扩展来表示
活动图通常用来表达业务流程、工作流或系统流程中一连串的动作
简单的登陆流程,登陆失败,跳转到登陆页面,登陆成功跳转到主界面
每个活动图只能有一个开始节点,但是可以有多个结束节点
动作(activity)是最重要的组成元素,它代表一个执行步骤
带箭头的连接线称为控制流(control flow)。当来源动作结束之后,控制流会启动目标动作。
对象节点(object node)为矩形图示,对象流(object flow)的图示与控制流相同,不过它的其中一个端点必须是对象节点,而另一端必须是其他节点。控制流的两个端点不可以都是对象节点。对象流不同于控制流,对象流可以携带数据或对象。
如图在登陆成功后,我们将用户对象传递到下一个节点
如果将对象节点当成活动的参数,用于输入或输出活动,就可以改用活动参数节点(activity parameter node)。参数节点其实也是一种对象节点
3.3决策与合并
活动流程中,流程交汇点,称为合并节点(merge node)。一个合并节点会有多条进入线,但是只有一条离开线,合并节点的图示是大的空心菱形,所有进入合并节点的支流都会经历同一条离开线
决策节点(decision node)与合并节点共用图示,两者都是大的空心菱形。不过,决策 节点只有一个进入线,但有多条离开线
分叉表示的是一个控制流被两个或多个控制流代替,经过分叉后,这些控制流是并发进行的
连接正好与分叉相反,表示两个或多个控制流被一个控制流代替。使用分叉需要使用连接把分叉的流汇聚成一个流
发送信号操作是一种操作,可以将消息或信号发送给另一个活动。
接受事件操作是一种要在等到消息或信号后才能继续执行的操作。
序列图用来表达系统内部一群对象的交互情况,它是一种行为图。水平方向是对象维,垂直方向是时间维
page与action之间的交互情况,可以用实例图 来表示,在发送list请求的时候我们需要一个返回结果集
生命线(lifeline)代表一个参与交互的实例,它的图示是顶端连接矩形的虚线,虚线顶部的矩形可以放置生命线的名称。
对象在接收到消息之后执行一项活动,执行期间称为执行发生(execution occurrence),它的图示是长条矩形。
消息(message)的图示是一条带箭头的线段,横跨在两个生命线上,对象之间通过发送消息来交互。
序列图中有四种常见的消息
创建消息(createMessage)用来创建对象的消息称为创建消息,它的图示是带箭头的虚线,箭头指向目标对象。
同步调用(synchCall)—这是最常见的消息。它的图示是箭头的实线,由发送消息的来源对象指向负责执行的目标对象。
回复消息(replyMessage)目标对象执行结束时,会发出回复消息给来源对象。它的图示是带箭头的虚线,从负责执行的目标对象反向指回来源对象
异步信号(asynchSignle)同步与异步的差别在于,来源对象是否等待目标执行结束才继续往执行。来源对象如果发送同步消息,会等待,如果发送异步消息,就不等待了。
生命线有生有灭,终止(stop)就是用来表达生命线终止的时刻。终止的图示是一个大叉,放置在生命线的虚线底部,代表生命线已经终止。
UML(Unified Modeling Language)统一建模语言
原文:http://www.cnblogs.com/jiekzou/p/4965115.html