面向对象建模图的理解
1,用例图
用例图用于描述系统提供的系列功能,而每个用例则代表系统的一个功能模块。用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的需求功能,用例图对系统的实现不做任何说明,仅仅是系统功能的描述。
用例图包括:用例、角色、角色和用例之间的关系,以及系统内用例之间的关系。用例图一般表示出用例的组织关系——要么是整个系统的全部用例,要么是完成具体功能的一组用例。
用例图通常用于表达系统或者系统范畴的高级功能。可以很容易的看出该系统所提供的功能。
用例图主要在需求分析阶段使用,主要用于描述系统实现的功能,方便与客户交流,保证系统需求的无二性,用例图表示系统外观,不要指望用例图和系统的各个类之间有任何联系。不要把用例做的过多导致难以理解。
2,类图
类在类图上使用包含三部分的矩阵来描述,最上面的部分是名称,中间部分是属性,最下面的部分是方法。
类图除可以表示实体的静态内部结构之外,还可以表示实体之间的相互关系。类之间有三种基本关系:关联(包括聚合、组合)、泛化(与继承同一个概念)、依赖。
1,关联
客观世界中的两个实体之间是存在千丝万缕的关系,当把这两个实体抽象到软件系统中时,两个类之间必然存在关联关系。关联具有一定方向性:如果从一个类单方向地访问另一个类,则被称为单向关联;如果两个类可以互相访问对象,则被称为双向关联。一个对象能访问关联对象的数目被称为多重性。
关联关系包括两种特例:聚合和组合,它们都有部分和整体的关系,但通常认为组合比聚合更加严格。聚合(当某个实体聚合成另一个实体时,该实体还可以是另一个实体的部分。)例如,学生既可以是篮球俱乐部的成员,也可以是书法俱乐部的成员;组合(当某个实体组合成另外一个实体时,该实体则不能同时是一个实体的部分。)例如,学生的胳膊不能是老师胳膊;
2,泛化(继承)
泛化与继承是同一个概念,都是指子类是一种特殊的父类,类与类之间的继承关系是非常普遍的,继承关系使用带空心三角形的实线表示。
类实现接口可视为一种特殊的继承,实现用带空心三角形的虚线表示。
3,依赖
如果一个类的改动会导致另一个类的改动,则称两个类之间存在依赖。依赖关系使用带箭头的虚线表示,其中箭头指向被依赖的实体。依赖的常见可能原因如下:
改动的类将消息发给另一个类。
改动的类以另一个类作为数据部分。
改动的类以另一个类作为操作参数。
通常而言,依赖是单向的,尤其是当数据表现和数据模型分开设计时,数据表现依赖于数据模型。
3,组件图
对于现代大型应用程序而言,通常不只是单独一个类或单独一组类所能完成的,通常会由一个或多个可部署的组件组成。对Java程序而言,可复用的组件通常打包成一个JAR、WAR等文件。
组件图提供系统的物理视图,它的用途是显示系统中粗粒度对其他软件组件(例如,函数库)的依赖关系。组件图可以在一个非常高的层次上显示,仅显示系统中粗粒度的组件,也可以在组件包层次上显示。
组件图通常包含组件、接口和Port等图元。组件的接口表示它能对外提供的服务规范,这个接口通常有两种表现形式:
用一条实线连接到组件边界的圆圈表示。
使用位于组件内部的圆圈表示。
组件除了可以对外提供接口外,组件还可能依赖于某个接口,组件依赖于某个接口使用一条带半圆的实线来表示。
4,部署图
现在的软件工程早已超出早期的单机程序,整个软件系统可能是跨国家、跨地区的分布式软件,软件的不同部分可能需要部署在不同的地方,不同的平台之上。部署图用于描述软件系统如何部署到硬件环境中,它的用途是显示软件系统不同的组件将在何处物理运行,以及它们将如何彼此通信。因为部署图是对物理运行情况进行建模,所以系统的生产人员就可以很好地利用这种图来安装、部署软件系统。
部署图中的符号包括组件图中所使用的符号元素,另外增加了节点的概念:节点是各种计算资源的通用名称,主要包括处理器和设备两种类型,两者的区别是处理器能够执行程序的硬件,而设备是一种不具备计算能力的硬件构件。UML使用三维立方体来表示节点。
5,顺序图
顺序图显示具体用例(或者是用例的一部分)的详细流程,并且显示流程中不同对象之间的调用关系,同时还可以很详细地显示对不同对象的不同调用。顺序图描述了对象之间的交互(顺序图和通信图都被称为交互图),重点在于描述消息极其时间顺序。
顺序图有两个维度:
垂直维度:以发生的时间顺序显示消息/调用的序列。
水平维度:显示消息被发送到的对象实例。
顺序图的关键在于对象之间的消息,对象之间的信息传递就是所谓的消息发送,消息通常表现为对象调用另一个对象的方法或方法的返回值,发送者和接收者之间的箭头表示消息信息。
顺序图与通信图:通信图同样可以准确地描述对象之间的交互关系,但通信图没有精确的时间概念。一般来说,通信图所能描述的内容,顺序图都可以描述,但顺序图比通信图多了时间概念。
6,活动图
活动图和状态机图都被称为演化图,其区别于联系:
活动图:用于描述用例内部的活动或方法的流程,如果除去活动图中的并行活动描述,它就变成了流程图。
状态机图:描述某一对象生命周期中需要关注的不同状态,并会详细描述刺激对象状态改变的事件,以对象状态改变时采取的动作。
演化图的5个要素:
状态:状态是对象响应事件后的不同面貌,状态是某个时间段对象所保持的稳定态,目前的软件计算机都是基于稳定态的,对象的稳定态是对象的固有特征,一个对象的状态一般是有限的。有限状态的对象是容易计算的,对象的状态越多,对象的状态迁移越复杂,对象状态可以想象成对象演化过程中的快照。
事件:来自对象外界的刺激,通常的形式是消息的传递,只是相对对象而言发生了事件。事件是对象状态发生改变的原动力。
动作:动作是对象针对所发生事件所做的处理,实际上通常表现为某个方法被执行。
活动:活动是动作激发的后续系统行为。
条件:条件是指事件发生所需要具备的条件。
对于激发对象状态改变的事件,通常有两种:
内部事件:从系统内部激发的事件,一个对象的方法(动作)调用(通过事件激活)另一个对象的方法。
外部事件:从系统边界外激发的事件,例如用户的鼠标、键盘动作。
活动图主要用于描述过程原理、业务逻辑以及工作流技术。活动图非常类似于传统的流程图,它也使用圆角矩形表示活动,使用带箭头的实线表示事件;区别是活动图支持并发。
如果将上图活动图的两个分支分开,每支就是一个传统的流程图,每个活动依次向下,遇到条件分支使用菱形框来表示条件。与传统流程图不同的是,活动图可以使用并行分支分多条并行活动。
绘制活动图时以活动为中心,整个活动图只有一个开始活动,可以有多个结束活动。活动图需要将并行活动和串行活动分离,遇到分支和循环时最好像传统流程图那样将分支、循环条件明确表示。活动图的最大优点在于支持并行行为,并行对于工作流建模和过程建模非常重要。所以有了并行,因此需要进行同步,同步通过汇合来指明。
7,状态机图
状态机图表示某个对象所处的不同状态和该状态的状态转换信息。实际上,通常只对“感兴趣的”对象绘制状态机图。也就是说,在系统活动期间具有三个或更多潜在状态的对象才需要考虑使用状态机图进行描述。
状态机图的符号集包括:
初始状态,使用实心圆来绘制。
状态之间的转换,使用具有带箭头的线段来绘制。
状态,使用圆角矩形来绘制。
判断点,使用空心圆来控制。
一个或多个终止点,使用内部包含实心圆的圆来绘制。
绘制状态图时应该保证对象只有一个初始状态,可以有多个终结状态。状态要表示对象的关键快照,有更重要的意义,无关紧要的状态则无须考虑,绘制状态机图时事件和方法要明确。
状态机图擅长表现单个对象的胯用例行为,对于多个对象的交互行为应该考虑采用顺序图,不要对系统的每个对象都画状态机图,只对真正需要关心的对象才绘制状态图。