系统分析员备考之UML篇 |
高艳明(转载自51CMM) 2003年05月19日 |
我有话说…… |
一、概述 统一建模语言(Unified Modeling Language,UML)是一种可视化的建模语言,它能让系统构造者用标准的、易于理解的方式建立起能够表达他们想象力的系统蓝图,并且提供了便于不同人之间有效地共享和交流设计结果的机制。 UML描述了一个系统的静态结构和动态行为。UML将系统描述为一些离散的相互作用的对象并最终为外部用户提供一定的功能的模型结构。静态结构定义了系统中的重要对象的属性和操作以及这些对象之间的相互关系。动态行为定义了对象的时间特性和对象为完成目标而相互进行通信的机制。从不同但相互联系的角度对系统建立的模型可用于不同的目的。 UML还包括可将模型分解成包的结构组件,以便于软件小组将大的系统分解成易于处理的块结构,并理解和控制各个包之间的依赖关系,在复杂的开发环境中管理模型单元。它还包括用于显示系统实现和组织运行的组件。 面向对象的分析与设计(OOA&D)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。 面向对象技术和UML的发展过程可用下图来表示,标准建模语言的出现是其重要成果。在美国,截止1996年10月,UML获得了工业界、科技界和应用界的广泛支持,已有700多个公司表示支持采用UML作为建模语言。1996年底,UML已稳占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。1997年11月17日,OMG采纳UML 1.1作为基于面向对象技术的标准建模语言。UML代表了面向对象方法的软件开发技术的发展方向,具有巨大的市场前景,也具有重大的经济价值和国防价值。 二、UML的构成 UML包括了一些可以相互组合图表的图形元素。由于UML是一种语言,所以UML也具有组合这些元素的法规。UML提供这些图的目的是用多个视图来展示一个系统,这组视图被称为一个模型(Model)。一个系统的UML模型有点像一个建筑物按照比例缩小的并经艺术家装饰后的建筑模型。但是,UML模型只描述了一个系统要做什么,并没有指明如何去实施这个系统。 1、 类图 类图中的类和我们经常提到的面向对象软件设计与开发中的类是同一个概念,用来表示这么一个类的图我们就称之为类图。它主要是展示了系统或者领域中的实体以及实体之间的关联,类的UML图是一个矩形框。类图对系统分析有很大的帮助,它可以让系统分析员使用客户所采用的术语和客户交流,这样就可以促使客户说出所要解决的问题的重要细节。
2、 对象图 同类一样,对象在这里的概念与面向对象编程思想中的对象一样,它是类的实例。,是具有具体属性值和行为的一个具体事物。 面向对象技术已经席卷了整个世界,事实也去确实如此。作为一种程序设计方法,它的建立具有很多优点。基于构件的软件开发方法就是面向对象技术孕育出来的。采用这种方法建立一个系统时,首先建立一组类,然后通过增加已有构件的功能或者添加新的构件来逐步扩充系统,最后在建立一个新系统时,还可以重用已经建好的类。这样做可以大大削减系统开发时间。 使用UML可以建立起易于使用和易于理解的对象模型,以使程序员能够创建出这些模型所对应的软件。所以,UML对基于类开发的全过程都有益处。 对象图也是一个举行,和类一样,但是对象名下面要带下划线。
3、 用例图 用例是用来描述潜在的用户所看到的系统的UML组件。它是一个被称为参与者(可以是一个人、一个硬件设备、一段时间的流逝或者另一个系统)的实体所发起的场景的集合。用例的执行必须对发起改用例的参与者或者其他参与者产生影响。用例可以被重用。与用户会谈是导出用例的最好技术,当导出一个用例时,要注意到发起用例的牵制条件和产生影响的后置条件。 用例是一个强有力的工具,当使用UML可视化地表达出这些概念后用例甚至会变得更加强大。可视化允许你向用户现实用例,他们能像你提供更多的信息。系统分析过程的一个目标是产生一组用例。此想法是要对用例进行分类整理,以便于引用。用例代表着用户的观点。当系统要进行升级时,用例目录可以作为进一步收集升级需求的基础。 用例是由参与者发起的,参与者(也许是发起者,但不是必须的)能够从用例的执行中获得有价值的事物。用例分析的一个好处是它能展现系统和外部世界的边界。参与者是典型的外部实体,而用例是典型的系统内部。参与者、用例和互连线共同组成了用例模型。如图3示。在用例模型中,直立人形图标代表参与者,椭圆代表用例,参与者和用例之间的关联线代表两者之间的通信关系。 图3 4、 状态图 在计算机系统中,当系统和用户(也可能是其他系统)交互的时候,组成系统的对象为了适应交互要经历必要的变化。一种表征系统变化的方法可以说是对想改变了自己的状态以相应事件和时间的流逝。UML 状态图就是展示这种变化的工具,它描述了一个对象所处的可能状态及状态间的转移,并给出了状态变化序列的起点和终点。要注意,状态图与以上提到的类图、对象图和用例图有着本质的不同。前3种图能够对一个系统或至少一组类、对象或用例建立模型,而状态图只是对单个对象建立模型。 状态图描述一段时间内对象所处的状态和状态的变化。状态的UML图标是一个圆角矩形,状态转移用状态之间的有向连线表示。 UML状态图提供了多种表示法符号,并且包括了很多建模思想——如和对单个系统对象所经历的变化建模。或许对于很简单的问题建模时,这种类型的图可能很快就会变得很复杂,但是,事实上确实很需要状态图,因为它能帮助系统分析员、设计员和开发人员理解系统中对象的行为。类图和对应的对象图只展示了系统的静态方面,他们展示的是系统的静态层次和关联,并能够告诉你系统的行为是什么,但它们不能说明这些行为的动态细节。
5、 顺序图 状态图的焦点是对象的状态,这只是图偏的一小部分。UML顺序图更进一步显示出随着时间的变化对象之间是如何通信的。UML顺序图在对象交互的表示中加入了时间维。在顺序图中,对象位于图的顶部,从上到下表示时间的流逝,每个对象都有一个垂直向下的对象生命线,对象生命线上的窄矩形条代表激活——改对象某个操作的执行。可以沿着对象的生命线表示出对象的状态。 消息,有简单的、同步的或异步的三种,没别表示为如图5示的用连接对象生命线的带箭头的连线代表。消息在垂直方向上的位置表示了该消息在交互序列中发生的时间,越靠近图顶部的消息发生的越早,越靠近底部的发生的越晚。
用例图可以只说明用例的一个实例(场景),或者可以表示一般的或者一个用例的所有场景。一般顺序图中通常提供了表示“if”条件语句和“while”循环语句的机会,每个“if”条件语句要用方括号([])括起来,“while”循环语句也要用方括号([])括起来,并在左括号前面加一个星号。同时,一般来说,对象可能会有一个调用自身的操作,即递归或自身调用。自身调用的表示是从一个激活框中引出消息线又重新回到这个激活框,并在该激活框中附加上一个小的矩形框,其表示方法如图6示。
图7顺序图 6、 活动图 UML活动图是状态图的一种扩展形式,它展示出对象执行某种行为时或者在业务过程中所要精力的步骤和判定点。每个步骤(活动)用一个圆角矩形(比状态图更扁更圆)表示,菱形图标代表判定点。它很像程序设计课中学到的流程图。UML活动图可用于表达一个对象的操作和一个业务过程。活动图与状态图的主要区别是,状态图图出显示的是状态,而活动图突出显示的是活动。 当一个活动路径分成两个或多个路径时,可以用一个与路径垂直的粗实心线来代表路径的分支,两个并发路径的合并可以用相同的方式表达。如图8。
活动图中可以显示出信号:发送信号的图符是一个凸无边形,接收信号的是一个凹无边形。在活动图中还可以表示出执行每个活动的角色,即通过将活动图划分为泳道——代表每个角色的平行段。还可以在活动图中出现其他图的图符并绘制混合图。一个活动图的大概情况可以表示为如图9示。
7、 协作图 对象图展示出对象和对象之间的静态关系,协作图是对象图的扩展。协作图可视化地表示了对象之间随时间发生的交互,它除了展示对象之间的关联,还显示出对象之间的消息传递。 与顺序图一样,协作图也展示对象之间的交互关系,实际上,顺序图和协作图两者是语义等价的。也就是说,这两种图表达的是同一种信息,并可以将顺序图转化为协作图,反之亦然。但是,顺序图强调的是交互的时间顺序,而协作图强调的是交互的语境和参与交互的对象的整体组织。还可以从另一种角度来看两种图的定义,以区分这两种图:顺序图按照时间顺序布图,而协作图按照空间组织布图。 协作图中可以表示出一个对象按照指定的次序(或无次序)地向一组对象发送消息。还可以表示拥有消息控制流的主动对象,以及消息之间的同步。协作图示例如图10。对象图标可以布置在图中的任何位置。对象间的连线代表了对象之间的关联和消息传递。每个消息箭头都带有一个消息序号,这些序号说明了该消息在交互序列中的序号。
8、 构件图 软件构件是软件系统的一个物理单元,它驻留在计算机中而不是只存在系统分析员的脑海里。像数据表、数据文件、可执行文件、动态链接库、文档等都可以称为构件。至于构件和类的区别可以这样理解:构件是类的软件实施。类是代表一组属性和操作的抽象实体。类和构件的一个重要关系是:一个构件可以是多个类的实施。 既然构件是驻留在计算机系统中的工作单元,对它建模是不是多此一举呢?我们说不是。因为对构件和构件的关系建模具有如下意义:使客户能够看到最终系统的结构;让开发者有一个目标;让编写技术文档和帮助文件的技术人员能够理解所写的文档是关于哪方面内容的;利于重用等。 构件的一个重要方面是它具有潜在的重用性。在当今高节奏的商业竞技场中,你建造的系统发挥功能越快,在竞争中获得的利益就越多。如果在一个系统中所构造的构件在开发另一个系统时被重用,那么就越有利于获得这种竞争利益。在建立构件的工作上花费一些时间和精力有助于今后的重用。 在对软件实体进行建模的过程中,你可能会遇到三种类型的构件: ①、部署构件(Deployment Component),它形成了可执行系统的基础。例如动态链接库、二进制可执行体、ActiveX控件等。 ②、工作产品构件(Work Product Component),它是部署构件的来源,如数据文件和程序源代码。 ③、执行构件(Execution Component),是可运行系统产生的结果。 构件图中包括构件、接口和关系。当然前面介绍的其他类型的图标也可以加入到构件图中。构件图的图标是一个左侧附有两个小矩形的大矩形框,如图11示。构件的名字位于构件图标的中央。如果构件是一个包的成员,那么构件名之前要加上包的名字,还可增加一些表达构件的细节信息。 图11 构件图 可以通过构件的接口来访问一个构件,构件的接口使一组操作集合。构件和接口之间的关系叫做实现关系。一个构件可以访问另一个构件提供的服务。当这样做的时候,它要使用导入接口,而实现服务接口的构件对访问它的服务的构件提供服务接口。 9、 部署图 在大多数系统中,硬件也是一个重要方面。现在的计算机领域,一个系统可能要包括无数种的操作平台,并且要有可能还要跨越很长的物理距离。一个坚实的系统硬件部署图对系统设计来说是必不可少的。从一开始的类的概念到上面的驻留在计算机中的软件构件,这里我们来看真是世界中的计算机硬件。 将UML部署图与整个系统集成到一起后将看到完整的物理结构图。系统是由节点组成的,每个节点用一个立方体表示。节点之间的连线代表两个立方体的连接。两种类型的节点分别是处理器(它可以执行软件构件)和设备(不能执行软件构件)。设备通常具有同外部世界通信的接口。 部署图对建立网络结构的模型很有用处。
小结
以上是我个人根据最近两年的考题中有考察UML的情况,但是发现考察的深度和广度并不是很大,故专门整理了这方面的资料,希望能够对广大系分考友有所帮助,谢谢。 |