一.UML的引出:
面向对象软件开发需要经过OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个阶段,OOA对目标系统进行分析建立分析模型,并将之文档化;OOD用面向对象的思想OOA的结果进行细化,得出设计模型。OOA和OOD的分析、设计结果需要统一的符号来描述、交流并记录。UML就是这种描述、记录OOA和OOD结果的符号表示法。
二.UML的结构:
UML图分为静态图和动态图两种。
UML有13种正式图形:活动图(activity diagram)、类图(class diagram)、通信图(communication diagram)、组件图(commponent diagram)、复合结构图(composite structure diagram)、部署图(deployment diagram)、交互概观图(interactive overview diagram)、对象图(object diagram)、包图(package diagram)、顺序图(sequence diagram)、状态图(state machine diagram)、定时图(timing diagram)、用例图(use case diagram)。
常用UML图包括用例图、类图、组件图、部署图、顺序图、活动图和状态机图。
1.用例图:用于描述系统提供的系列功能,而每个用例则代表系统的一个功能模块。用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的需求功能,用例图对系统的实现不做任何说明,仅仅是系统功能的描述。
用例图包括用例(以一个椭圆表示,用例的名称放在椭圆的中心或椭圆下面)、角色(Actor,也就是与系统交互的其他实体,以一个人形符号表示)、角色和用例之间的关系(以简单的线段来表示),以及系统内用例之间的关系。用例图一般表示出用例的组织关系————要么是整个系统的全部用例,要么是完成具体功能的一组用例。
用例图主要在需求分析阶段使用,主要用于描述系统实现的功能,方便与客户交流,保证系统需求的无二性,用实例图表示系统外观,不要指望用例图和系统的各个类之间有任何联系。
2.类图:表示系统中应该包含哪些实体,各实体之间如何关联;换句话说,它显示了系统的静态结构,类图可用于表示逻辑类,逻辑类通常就是业务人员所谈及的事物种类。
类在类图上使用包含三个部分的矩形来描述,最上面的部分显示类的名称,中间部分包含类的属性,最下面的部分包含类的方法。
类之间的关系:
1).关联(包括聚合、组合):当把两个实体抽象到软件系统中时,两个类之间必然存在关联关系。关联具有一定的方向性:如从一个类单方向访问另一个类,称为单向关联;两个类可以互相访问对象,称为双向关联。关联使用一条实线来表示。
聚合和组合是关联关系的两个特例:聚合---当某个实体聚合成另一个实体时,该实体还可以同时是另一个实体的部分;组合---当某个实体组合成另一个实体时,实体则不能同时是一个实体的部分。聚合使用带空心菱形框的实线表示,组合则使用带实心菱形框的实线表示。
2).泛化:泛化与继承是同一个概念,都是指子类是一种特殊的父类,类与类之间的继承关系是非常普通的,继承关系使用带空心三角形的实线
3).依赖:如果一个类的改动会导致另一个类的改动,则称两个类之间存在依赖。依赖关系使用带箭头的虚线表示,其中箭头指向被依赖的实体。依赖的常见的原因有改动的类将消息发给另一个类;改动的类以另一个类作为数据部分;改动的类以另一个类作为操作参数。
3.组件图:对于大型应用程序而言,通常不只是单独一个类或单独一组类所能完成,通常会由一个或多个可部署的组件组成。对于java程序可复用组件通常打包成一个jar、war等文件;对于C/C++应用而言,可复用的组件通常是函数库或DLL(动态链接库)文件。组件图提供系统的物理视图,它的用途是显示系统中的软件对其他软件组件(例:库函数)的依赖关系。组件图通常包含组件、接口和port等图元,UML使用带符号的矩形来表示组件,,使用圆圈代表接口,使用位于组件边界上的小矩形代笔port。
组件接口表示他能对外提供的服务规范,有两种表现形式:
用一条实线连接到组件边界的圆圈表示;使用位于组件内部的圆圈表示。
4.部署图:部署图用于描述软件系统如何部署到硬件环境中,它的用途是显示软件系统不同的组件将在何处物理运行,以及它们将如何通信。
部署图中的符号包括组件图中所使用的符号元素,另外还增加了节点的概念:节点是各种计算资源的通用名称,主要包括处理器和设备两种类型,两者的区别是处理器能够执行程序的硬件构件(如计算机主机),而设备是一种不具备计算能力的硬件构件(如打印机)。UML中使用三维立方体来表示节点,节点的名称位于立方体的顶部。
5.顺序图:显示具体用例(或是用例的一部分)的详细流程,并且显示流程中不同对象之间的调用关系,同时还可以很详细地显示对不同对象的不同调用。顺序图描述了对象之间的交互(顺序图和通信图都被称为交互图),重点在于描述消息及其时间顺序。
顺序图有两个维度:垂直维度,以发生的时间顺序显示消息、调用的序列;水平维度,显示消息被发送到的对象实例。顺序图的关键在于对象之间的消息,对象之间的信息传递就是所谓的消息发送,消息通常表现为对象调用另一个对象的方法或方法的返回值,发送者和接受者之间的箭头表示消息。
6.活动图和状态机图被称为演化图,区别:
活动图:用于描述用例内部的活动或方法的流程,如果除去活动图中的并行活动描述,它就变成流程图。
状态机图: 描述某一对象生命周期中需要关注的不同状态,并会详细描述刺激对象状态改变事件,以及对象状态改变时所采取的动作。
演化图5要素:
1).状态:状态是对象响应事件前后的不同面貌,状态是某个时间段对象保持的稳定态,目前的软件计算机都是基于稳定态的,对象的稳定态是对象的固有特征,一个对象的状态一般是有限的。有限状态的对象是容易计算的,对象的状态越多,对象的状态迁移月复杂,对象状态可以想象成对象的演化过程中的快照;
2).事件:来自对象外界的刺激,通常的形式是消息的传递,只是相对对象而言发生了事件。事件是对象状态发生改变的原动力;
3).动作:动作时对象针对所发生事件所做的处理,实际上通常表现为某个方法被执行;
4).活动:是动作激发的后续系统行为;
5).条件:条件指的是事件发生所需要具备的条件。
激发对象状态改变的事件:
1).内部事件:从系统内部激发的事件,一个对象的方法(动作)调用(通过事件激活)另一个对象的方法(动作)。
2).外部事件:从系统边界激发的事件,如用户的鼠标、键盘动作。
7.状态机图:表示某个对象所处的不同状态和该类的状态转换信息。