您的位置:首页 > 其它

UML 基础

2011-12-17 10:10 309 查看
UML的基本结构



通过对UML的学习,整理出了上面这幅UML概要结构图,主要是UML事物,UML关系和UML图,还有很多规格说明,符号,修饰,扩展机制等等元素没有体现,其实,图中的三大块加上那么多边边角角的元素,高度浓缩概括起来,可以把UML这门课的主要内容描述为:

在软件生命周期中,准确地把 UML事物和UML关系通过一定规则组合,利用Rose绘制成UML的9种图,以帮助我们开发出高质量的软件。



简略来说,UML的9种图在软件生命周期中各个阶段的应用主要体现在:



1、在需求分析阶段:主要采用用例图来描述需求(角色、功能、外部交互等);

2、在分析阶段:明确解决问题的细节,主要采用类图来描述静态结构,采用顺序图,协作图,活动图,状态图来描述系统动态行为;

3、在设计阶段:给出解决方案,主要采用类图、包,对类的接口进行设计;

4、在实现阶段:将类用一种面向对象语言实现;

5、测试阶段:单元测试使用类图和类的规格说明书。集成测试使用类图,包,构件图和协作图。系统测试使用用例图来测试系统的功能;

6、集成和交付阶段:主要采用构件图、包、部署图;



以上只是很简略地说明了UML的应用,在下面的博客中,我们将介绍充分利用UML,面向对象的软件开发过程,即RUP(Rational Unified Process)



补(欠了一点东西,终于补全了):什么是RUP——/article/1357566.html

UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别

一、表示符号上的区别




二、具体区别与联系

继承(泛化)

指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系,可分单重继承,多重继承(java不支持);在Java中此类关系通过关键字extends明确标识。





实现

指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识



依赖

可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某个老师要授课,则需要有这么一门课让他教授,此时老师与课之间的关系就是依赖;表现在代码层面,为类Course作为参数被类Professor在Teach方法中使用;



关联

它体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,普通关联关系的两个类处于同一层次上,关联可以是单向(只有一个类知道另外一个类的公共属性和操作)的也可以是双向(两个类都知道另一个类的公共属性和操作)的;大多数关联应该是单向的,单向关系更容易建立和维护,有助于寻找可服用的类。

双向关联:



单向关联:



聚合

聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如书本与暑假、公司与员工的关系等;具体表现为,如果A由B聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建。





组合

组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,也可以理解为如果A由B组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建。比如你和你的大脑或一本书和它的书页。





综上所述,对于继承、实现这两种关系比较简单,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;从后几种关系所表现的强弱程度来看,依次为:组合>聚合>关联>依赖。在面向对象的设计过程中,能采取强度较大的关系,决不能采取强度小的关系。

随着学习深入,会加上代码实现!

用例图(UseCase
Diagram)—UML图(一)




从上面的用例图模型,我们可以大致了解用例图所描述的是什么。下面进行详细介绍。



用例图,即用来描述什么角色通过某某系统能做什么事情的图,用例图关注的是系统的外在表现,系统与人的交互,系统与其它系统的交互。

用例图有三种构成元素,分别是:角色,用例,关系

1、角色(Actor):即使用本系统的有哪些角色,不同的角色使用的系统功能部分是不同的,在用例图中用小人表示。

值得注意的是,角色可能是人,也可能不是人,而是另外的一个系统,本系统与另外一个系统交互的话,可以将另外一个系统画成某某角色。

分析得到角色的原则,也可以看做是我们在获得角色时,需要思考的内容:

1)有哪些直接使用系统的人

2)涉及到哪些维护人员

3)使用哪些外设

4)相连的其他系统

5)还有哪些人和事物对这个系统产生的结果感兴趣。

2、用例:即系统具有的功能,在用例图中用椭圆圈表示,圈里用文字描述该用例,一般为动宾短语。

值得注意的是,某个用例不一定是只属于一个角色的,有些用例是同时属于多个角色的,即被多个角色“共享”。



在这里图书馆信息系统说明一下,用例的粒度与范围

概述级





用户目标级





子功能级






3、关系:即角色与用例之间的关系,在用例图中用线条表示,

线条是指角色与用例之间的线条,这些线条是用来联系角色(小人)和用例(圈圈)的,表示某某角色能“做”什么用例。



线条有两种:无箭头的,有箭头的。
有箭头的线条,表示角色与系统交互的过程中,数据的流向,如果箭头指向用例,就说明角色需要往系统输入数据,如果箭头指向角色,说明系统往角色输出数据。没有箭头的线条,则没有明确表示数据的流向。



有的时候,用例图在细化到子功能级别时,还会出现虚线箭头,如上图所示。



综上所述,并结合绘制用例图需要注意的一些细节,整理出以下这张图来更加形象的说明用例图。





类图(Class
diagram)—UML图(二)

类图(Class Diagram)是描述类、接口、协作以及它们之间关系的图。



类图是系统中静态视图的一部分,静态视图可以包括许多的类图。



静态视图用于为软件系统进行结构建模,它构造系统的词汇和关系,而结构模型的可视化就是通过类图来实现的。



类图由以下基本元素构成:类;接口;协作;关系(依赖、泛化、实现和关联)。



如果对类图中的关系模糊,可以看我的另一篇博客:

/article/1357576.html



下面用一张图来概括类图的基本内容:






通常以下述3种方法之一使用类图:



1、对系统的词汇建模

用UML构建系统通常是从构造系统的基本词汇开始,用于描述系统的边界,也就是说用来决定哪些抽象是要建模系统中的一部分,哪些抽象是处于要建模系统之外。这是非常重要的一项工作,因为系统最基本的元素在这里被确定。可以用类图描述抽象和它们的职责。

2、对简单协作建模

现实世界中的事物大多是相互联系、相互影响的,将这些事物抽象成类后,情况也是如此。所要构造的软件系统中的类很少有孤立存在的。它们总是和其他类协同工作,以实现强于单个类的语义。因此,在抽象了系统词汇后,系统分析师还必须将这些词汇中是事物协同工作的方式可视化和详述。



3、对逻辑数据库模式建模

在设计一个数据库是,通常使用数据库模式来描述数据库的概念设计。数据库模式建模是对数据库概念设计的蓝本,可以使用类图对这些数据库的模式进行建模。

对象图(Object
Diagram)—UML图(三)


一、用一张图来介绍一下对象图的基本内容



二、对象图与类图的基本区别



三、对象图实例



活动图(Activity
Diagram)—UML图(四)


“活动图”可通过一系列操作将业务流程或软件进程以工作流的形式显示出来。这些操作可以由人、软件组件或计算机来执行。

使用活动图可以描述多种类型的流程,如下:

1、用户和您的系统之间的业务流程或工作流。

2、某一用例中执行的步骤。

3、软件协议,即允许在组件间进行的交互序列。

4、软件算法。

下面用一张图来介绍活动图的基本内容



下面是用rose 和 onenote结合画的一张活动图的实例,基本囊括了活动图的重要元素。



状态图(Statechart
Diagram)—UML图(五)


状态图用来描述一个特定的对象的所有可能的状态以及由于各种事件的发生而引起的状态之间的转移。与活动图的主要区别体现在:状态图侧重从行为的结果来描述,而活动图侧重从行为的动作来描述。活动图可能涉及多个对象,而状态图只涉及一个特定的对象。



下面,通过一张图来描述状态图的基本内容。



下面是一张状态图的实例图,描述了一个温度控制器的状态图。



时序图(Sequence
Diagram)—UML图(六)

时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。时序图中显示的是参与交互的对象及其对象之间消息交互的顺序。

下面这张图介绍了时序图的基本内容:



下面这张图是时序图的实例,创建课程时序图:



协作图(Collaboration
Diagram)—UML图(七)

协作图(Collaboration Diagram /Communication Diagram,也叫合作图)是一种交互图(interaction diagram),强调的是发送和接收消息的对象之间的组织结构。一个协作图显示了一系列的对象和在这些对象之间的联系以及对象间发送和接收的消息。对象通常是命名或匿名的类的实例,也可以代表其他事物的实例,例如协作、组件和节点。使用协作图来说明系统的动态情况。

下面这张图介绍协作图的基本内容:



下面一张图是一个协作图的实例,创建课程的协作图:



由于协作图和时序图在语意上是相通的,所以可以互相转换,下面是利用ROSE把上面的协作图转换成的时序图的实例:



构件图(Component
Diagram)—UML图(八)

构件图是显示代码自身结构的实现级别的图表。构件图由诸如源代码文件、二进制代码文件、可执行文件或动态链接库 (DLL) 这样的构件构成,并通过依赖关系相连接

下面这张图介绍了构件图的基本内容:





下面这张图是个构件图的实例:



部署图(Deployment
Diagram)—UML图(九)

UML部署图描述了一个运行时的硬件结点,以及在这些结点上运行的软件组件的静态视图。 部署图显示了系统的硬件,安装在硬件上的软件,以及用于连接异构的机器之间的中间件。



下面这张图介绍了部署图的基本内容:





下面这张图是一个部署图的实例:



补充一点,节点和构件的联系与区别:

节点的概念和构件有许多相同之处,例如二者有多名称,都可以参与依赖、泛化和关联关系,都可以被嵌套,都可以有实例,都可以参与交互。

但它们之间也存在明显的区别:构件是参与系统执行的事物,而节点是执行构件的事物;构件表示逻辑元素的物理打包,而节点表示构件的物理部署
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: