《第三章动态对象模型.ppt》由会员分享,可在线阅读,更多相关《第三章动态对象模型.ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章:动态对象模型,面向对象分析与设计,UML类图中的元语,UML类图中的元语,用例模型,长期以来,在面向对象开发和传统的软件开发中,人们根据典型的使用情景来了解需求。但是,这些使用情景是非正式的,虽然经常使用,却难以建立正式文挡。用例模型由Ivar Jacobson在开发AXE系统中首先使用,并加入由他所倡导的OOSE和Objectory方法中。用例方法引起了面向对象领域的极大关注。自1994年Ivar Jacobson的著作出版后,面向对象领域已广泛接纳了用例这一概念,并认为它是第二代面向对象技术的标志。,用例模型描述的是外部执行者(Actor)所理解的系统功能。用例模型用于需求分析阶段
2、,它的建立是系统开发者和用户反复讨论的结果,表明了开发者和用户对需求规格达成的共识。首先,它描述了待开发系统的功能需求;其次,它将系统看作黑盒,从外部执行者的角度来理解系统;第三,它驱动了需求分析之后各阶段的开发工作,不仅在开发过程中保证了系统所有功能的实现,而且被用于验证和检测所开发的系统,从而影响到开发工作的各个阶段和 UML 的各个模型。在UML中,一个用例模型由若干个用例图描述,用例图主要元素是用例和执行者。,用例模型,用例(use case) 从本质上讲,一个用例是用户与计算机之间的一次典型交互作用。以字处理软件为例,将某些正文置为黑体和创建一个索引便是两个典型的用例。在UML中,用
3、例被定义成系统执行的一系列动作,动作执行的结果能被指定执行者察觉到。,用例,在UML中,用例表示为一个椭圆。图1显示了一个金融贸易系统的用例图。其中,“风险分析”,“交易估价”,“进行交易”,“设置边界”,“超越边界的交易”,“评价贸易”,“更新帐目”等都是用例的实例。概括地说,用例有以下特点: 用例捕获某些用户可见的需求,实现一个具体的用户目标。 用例由执行者激活,并提供确切的值给执行者。 用例可大可小,但它必须是对一个具体的用户目标实现 的完整描述。,执行者(Actor) 执行者是指用户在系统中所扮演的角色。其图形化的表示是一个小人。图1中有四个执行者:贸易经理、营销人员、售货员和记帐系统
4、。在某些组织中很可能有许多营销人员,但就该系统而言,他们均起着同一种作用,扮演着相同的角色,所以用一个执行者表示。一个用户也可以扮演多种角色(执行者)。例如,一个高级营销人员既可以是贸易经理,也可以是普通的营销人员;一个营销人员也可以是售货员。在处理执行者时,应考虑其作用,而不是人或工作名称,这一点是很重要的。 图中,不带箭头的线段将执行者与用例连接到一起,表示两者之间交换信息,称之为通信联系。执行者触发用例,并与用例进行信息交换。单个执行者可与多个用例联系;反过来,一个用例可与多个执行者联系。对同一个用例而言,不同执行者有着不同的作用:他们可以从用例中取值,也可以参与到用例中。,执行者(Ac
5、tor)需要注意的是执行者在用例图中是用类似人的图形来表示,尽管执行的,但执行者未必是人。例如,执行者也可以是一个外界系统,该外界系统可能需要从当前系统中获取信息,与当前系统有进行交互。在图1中,我们可以看到,记帐系统是一个外界系统,它需要更新帐目。 通过实践,我们发现执行者对提供用例是非常有用的。面对一个大系统,要列出用例清单常常是十分困难。这时可先列出执行者清单,再对每个执行者列出它的用例,问题就会变得容易很多。,使用和扩展(Use and Extend) 图中除了包含执行者与用例之间的连接外,还有另外两种类型的连接,用以表示用例之间的使用和扩展关系。使用和扩展是两种不同形式的继承关系。
6、当一个用例与另一个用例相似,但所做的动作多一些,就可以用到扩展关系。例如图1中,基本的用例是“进行交易”。交易中可能一切都进行得很顺利,但也可能存在扰乱顺利进行交易的因素。其中之一便是超出某些边界值的情况。例如,贸易组织会对某个特定客户规定最大贸易量,这时不能执行给定用例提供的常规动作,而要做些改动。我们可在“进行交易”用例中做改动。但是,这将把该用例与一大堆特殊的判断和逻辑混杂在一起,使正常的流程晦涩不堪。图1中将常规的动作放在“进行交易”用例中,而将非常规的动作放置于“超越边界的交易” 用例中,这便是扩展关系的实质。 当有一大块相似的动作存在于几个用例,又不想重复描述该动作时,就可以用到使
7、用关系。例如,现实中风险分析和交易估价都需要评价贸易,为此可单独定义一个用例,即评价贸易,而风险分析和交易估价用例将使用它。 请注意扩展与使用之间的相似点和不同点。它们两个都意味着从几个用例中抽取那些公共的行为并放入一个单独用例中,而这个用例被其他几个用例使用或扩展。但使用和扩展的目的是不同的。,用例模型的获取,几乎在任何情况下都会使用用例。用例用来获取需求,规划和控制项目。用例的获取是需求分析阶段的主要任务之一,而且是首先要做的工作。大部分用例将在项目的需求分析阶段产生,并且随着工作的深入会发现更多的用例,这些都应及时增添到已有的用例集中。用例集中的每个用例都是一个潜在的需求。,a. 获取执
8、行者,获取用例首先要找出系统的执行者。可以通过用户回答一些问题的答案来识别执行者。以下问题可供参考: 谁使用系统的主要功能(主要使用者)。 谁需要系统支持他们的日常工作。 谁来维护、管理使系统正常工作(辅助使用者)。 系统需要操纵哪些硬件。 系统需要与哪些其它系统交互,包含其它计算机系统和其它应用程序。 对系统产生的结果感兴趣的人或事物。,b. 获取用例,一旦获取了执行者,就可以对每个执行者提出问题以获取用例。 以下问题可供参考: 执行者要求系统提供哪些功能(执行者需要做什么)? 执行者需要读、产生、删除、修改或存储的信息有哪些类型。 必须提醒执行者的系统事件有哪些?或者执行者必须提醒系统的事
9、件有哪些?怎样把这些事件表示成用例中的功能? 为了完整地描述用例,还需要知道执行者的某些典型功能能否被系统自动实现? 还有一些不针对具体执行者问题(即针对整个系统的问题): 系统需要何种输入输出?输入从何处来?输出到何处? 当前运行系统(也许是一些手工操作而不是计算机系统)的主要问题?,需要注意,最后两个问题并不是指没有执行者也可以有用例,只是获取用例时尚不知道执行者是什么。一个用例必须至少与一个执行者关联。还需要注意:不同的设计者对用例的利用程度也不同。例如,Ivar Jacobson说,对一个十人年的项目,他需要二十个用例。而在一个相同规模的项目中,Martin Fowler则用了一百多个
10、用例。我们认为:任何合适的用例都可使用,确定用例的过程是对获取的用例进行提炼和归纳的过程,对一个十人年的项目来说,二十个用例似乎太少,一百多个用例则嫌太多,需要保持二者间的相对均衡。,一、UML动态视图二、动态对象模型设计三、实战锦囊,基于UML描述的动态对象模型,一、 UML动态视图,内容1、UML视图理论 2、UML动态视图 序列图、协作图 状态图 活动图,“建模可以捕获系统潜在的部分.” Dr. James Rumbaugh,可视化建模使用标准图形符号,1、UML视图理论,什么是可视化建模?,用例分析是从用户目标出发捕获业务过程的一种技巧。,可视化建模捕获业务过程,1、UML视图理论,系
11、统建模独立与程序语言,可视化建模定义了软件的架构(Architecture),1、UML视图理论,什么是 UML?,UML 表示统一建模语言UML综合了以下优点数据模型概念 (Entity Relationship Diagrams)商业建模 (work flow)对象建模 组件建模UML 是标准的语言用于可视化、规格说明、架构、文档化 UML能被所有过程使用,贯穿整个开发周期中,跨越不同的技术实现。,1、UML视图理论,UML 支持的应用开发,Classes,application partitioning,Business Objects,Relationships,Business Pr
12、ocess,Objects,Use Cases,large scale system,Scenarios,ComponentsMicrosoft,ActiveX/COMMicrosoft,ORDBMSOracle,CORBAOMG,1、UML视图理论,UML概念,UML 使用在:使用用例和角色来描述系统的边界以及主要功能用交互图来说明用例的实现使用类图来描绘系统的静态结构使用状态转换图来模拟对象的行为使用组件图和拓展图来展示系统的物理实现结构使用版式来扩充功能,1、UML视图理论,消息,在面向对象技术中,对象间的交互是通过对象间消息的传递来完成的。在UML的四个动态模型中均用到消息这个概念。通
13、常,当一个对象调用另一个对象中的操作时,即完成了一次消息传递。当操作执行后,控制便返回到调用者。对象通过相互间的通信(消息传递)进行合作,并在其生命周期中根据通信的结果不断改变自身的状态。 在UML中,消息的图形表示是用带有箭头的线段将消息的发送者和接收者联系起来,箭头的类型表示消息的类型,如图2所示。,消息的类型,简单消息(Simple Message) 表示简单的控制流。用于描述控制如何在对象间进行传递,而不考虑通信的细节。 同步消息(Synchronous Message) 表示嵌套的控制流。操作的调用是一种典型的同步消息。调用者发出消息后必须等待消息返回,只有当处理消息的操作执行完毕后
14、,调用者才可继续执行自己的操作。 异步消息(Asynchronous Message) 表示异步控制流。当调用者发出消息后不用等待消息的返回即可继续执行自己的操作。异步消息主要用于描述实时系统中的并发行为。,类,1、UML视图理论,类操作Operations,类的行为用其操作来描述类操作可以在检查交互图时建立,1、UML视图理论,类属性Attributes,类的结构用其属性来描述类属性在检查类定义、问题需求时候建立,需要领域知识,每门课程需要编号number, 上课地点location 以及上课时间time等属性,1、UML视图理论,发现类间关系relations,关系是在检查交互图时建立如果
15、两个对象必须对话,那么它们之间必须有一条路径用于联系,1、UML视图理论,类关系图,1、UML视图理论,1、UML视图理论,类多样性及其约束,1、UML视图理论,类继承,1、UML视图理论,对象状态,状态图表示:给定类的历史活动记录导致一个状态到另外一个状态的转换的事件导致状态转变的动作创建状态图用于描述具有重要的动态行为的对象,物理视图,组件图描述在软件组件之间的组织和依赖关系一个组件可以是 源代码组件运行期的组件可执行的组件,1、UML视图理论,组件视图,1、UML视图理论,拓展系统,拓展图显示系统运行期处理元素的结构以及在此上的软件进程拓展图形象化了对象的分布。,1、UML视图理论,1、
16、UML视图理论,拓展视图,可计划、可管理可预见无中断方式,提供修改需求的功能它是基于渐进的执行的原型,不是基于文档在过程中包括用户/客户是风险驱动的,1、UML视图理论,UML迭代生命周期,风险管理Phase-by-Phase,ConstructionRefine the architectureRisk-driven iterationsContinuous integrationTransitionFacilitate user acceptanceMeasure user satisfactionPost-deployment cyclesContinue evolutionary ap
17、proachPreserve architectural integrity,1、UML视图理论,1、UML视图理论,减小风险驱动迭代,Initial Project RisksInitial Project Scope,Revise Overall Project Plan Cost Schedule Scope/Content,Plan Iteration N Cost Schedule,Assess Iteration N,Risks Eliminated,Revise Project Risks Reprioritize,Develop Iteration N Collect cost
18、 and quality metrics,Define scenarios to address highest risks,迭代 N次,Iteration Planning,Requirement Capture,Analysis & Design,Implementation,Test,Prepare Release,1、UML视图理论,用例驱动迭代,Results of previous iterations Up-to-date risk assessment Controlled libraries of models, code, and tests,Release descrip
19、tionUpdated risk assessmentControlled libraries,Iteration Planning,Requirements Capture,Analysis & Design,Implementation,Test,Prepare Release,Selected scenarios,1、UML视图理论,MINIWATERFALL,一、 UML动态视图,内容1、UML视图理论 2、UML动态视图 序列图、协作图 状态图 活动图,2、UML动态视图,UML行为模型动态视图,行为模型视图:序列图(按时间顺序描述系统元素间的交互)协作图(按时间和空间顺序描述系统元
20、素的交互和它们之间的关系)状态图(描述了系统元素的状态条件和响应)活动图(描述了系统元素的活动),2、UML动态视图,交互图序列图,序列图(Sequence Diagram)用来描述对象之间动态的交互关系,着重体现对象间消息传递的时间顺序。序列图存在两个轴:水平轴表示不同的对象,垂直轴表示时间。序列图中的对象用一个带有垂直虚线的矩形框表示,并标有对象名和类名。垂直虚线是对象的生命线,用于表示在某段时间内对象是存在的。对象间的通信通过在对象的生命线间画消息来表示。消息的箭头指明消息的类型。,序列图中的消息可以是信号(Signal)、操作调用或类似于C+中的RPC(RemoteProce dure
21、 Calls)和Java中的RMI(Remote Method Invocation)。当收到消息时,接收对象立即开始执行活动,即对象被激活了。通过在对象生命线上显示一个细长矩形框来表示激活。 消息可以用消息名及参数来标识。消息也可带有顺序号,但较少使用。消息还可带有条件表达式,表示分支或决定是否发送消息。如果用于表示分支,则每个分支是相互排斥的,即在某一时刻仅可发送分支中的一个消息。 在序列图的左边可以有说明信息,用于说明消息发送的时刻、描述动作的执行情况以及约束信息等。一个典型的例子就是用于说明一个消息是重复发送的。另外,可以定义两个消息间的时间限制。 一个对象可以通过发送消息来创建另一个
22、对象,当一个对象被删除或自我删除时,该对象用X标识。 另外,在很多算法中,递归是一种很重要的技术。当一个操作直接或间接调用自身时,即发生了递归。产生递归的消息总是同步消息,返回消息应是一个简单消息。,序列图Sequence Diagram,序列图在时间范围类描述对象交互关系,2、UML动态视图,交互图协作图,协作图(Collaboration Diagram)用于描述相互合作的对象间的交互关系和链接关系。虽然序列图和协作图都用来描述对象间的交互关系,但侧重点不一样。序列图着重体现交互的时间顺序,协作图则着重体现交互对象间的静态链接关系。协作图中对象的外观与序列图中的一样。如果一个对象在消息的交
23、互中被创建,则可在对象名称之后标以new。类似地,如果一个对象在交互期间被删除,则可在对象名称之后标以destroy。对象间的链接关系类似于类图中的联系(但无多重性标志)。通过在对象间的链接上标志带有消息串的消息(简单、异步或同步消息)来表达对象间的消息传递。,交互图协作图,(1) 链接链接用于表示对象间的各种关系,包括组成关系的链接(Composition Link)、聚集关系的链接(Aggregation Link)、限定关系的链接(Qualified Link)以及导航链接(Navigation Link)。各种链接关系与类图中的定义相同,在链接的端点位置可以显示对象的角色名和模板信息。
24、 (2) 消息流在协作图的链接线上,可以用带有消息串的消息来描述对象间的交互。消息的箭头指明消息的流动方向。消息串说明要发送的消息、消息的参数、消息的返回值以及消息的序列号等信息,协作图Collaboration Diagram,协作图从对象之间的上下文关系上描述交互关系,2、UML动态视图,状态图,状态图(State Diagram)用来描述一个特定对象的所有可能状态及其引起状态转移的事件。大多数面向对象技术都用状态图表示单个对象在其生命周期中的行为。一个状态图包括一系列的状态以及状态之间的转移(1) 状态所有对象都具有状态,状态是对象执行了一系列活动的结果。当某个事件发生后,对象的状态将发
25、生变化。状态图中定义的状态有:初态、终态、中间状态、复合状态。其中,初态是状态图的起始点,而终态则是状态图的终点。一个状态图只能有一个初态,而终态则可以有多个。,2、UML动态视图,状态图,一个状态可以进一步地细化为多个子状态,可以进一步细化的状态称作复合状态。子状态之间有或关系和与关系两种关系。或关系说明在某一时刻仅可到达一个子状态。例如,一个处于行驶状态的汽车,在行驶这个复合状态中有向前和向后两个不同的子状态,在某一时刻汽车要么向前,要么向后。状态中在某一时刻可同时到达多个子状态(称为并发子状态)。具有并发子状态的状态图称为并发状态图。,2、UML动态视图,状态图,(2) 转移状态图中状态
26、之间带箭头的连线被称为转移。状态的变迁通常是由事件触发的,此时应在转移上标出触发转移的事件表达式。如果转移上未标明事件,则表示在源状态的内部活动执行完毕后自动触发转移。,状态转换图,entry: Register student,exit: Increment count,2、UML动态视图,活动图,活动图(Activity Diagram)的应用非常广泛,它既可用来描述操作(类的方法)的行为,也可以描述用例和对象内部的工作过程。活动图是由状态图变化而来的,它们各自用于不同的目的。活动图依据对象状态的变化来捕获动作(将要执行的工作或活动)与动作的结果。活动图中一个活动结束后将立即进入下一个活动
27、(在状态图中状态的变迁可能需要事件的触发)。图1给出了一个活动图的例子。,2、UML动态视图,活动图,活动图对表示并发行为也很有用。在活动图中,使用一个称为同步条的水平粗线可以将一条转移分为多个并发执行的分支,或将多个转移合为一条转移。此时,只有输入的转移全部有效,同步条才会触发转移,进而执行后面的活动,如图2所示。,2、UML动态视图,活动图,泳道活动图告诉你发生了什么,但没有告诉你该项活动由谁来完成。在程序设计中,这意味着活动图没有描述出各个活动由哪个类来完成。泳道解决了这一问题。它将活动图的逻辑描述与序列图、协作图的责任描述结合起来。如图2所示,泳道用矩形框来表示,属于某个泳道的活动放在
28、该矩形框内,将对象名放在矩形框的顶部,表示泳道中的活动由该对象负责。对象在活动图中可以出现对象。对象可以作为活动的输入或输出,对象与活动间的输入/输出关系由虚线箭头来表示。如果仅表示对象受到某一活动的影响,则可用不带箭头的虚线来连接对象与活动,如图2所示。,信号 如图3所示,在活动图中可以表示信号的发送与接收,分别用发送和接收标志来表示。发送和接收标志也可与对象相连,用于表示消息的发送者和接收者。,四个图均可用于系统的动态建模,但它们各自的侧重点不同,分别用于不同的目的。 首先,不要对系统中的每个类都画状态图。尽管这样做很完美,但太浪费精力,其实你可能只关心某些类的行为。正确的做法是:为帮助理
29、解类而画它的状态图。状态图描述跨越多个用例的单个对象的行为,而不适合描述多个对象间的行为合作。序列图和协作图适合描述单个用例中几个对象的行为。其中序列图突出对象间交互的顺序,而协作图的布局方法能更清楚地表示出对象之间静态的连接关系。当行为较为简单时,序列图和协作图是最好的选择。但当行为比变复杂时,这两个图将失去其清晰度。因此,如果想显示跨越多用例或多线程的复杂行为,可考虑使用活动图。另外,序列图和协作图仅适合描述对象之间的合作关系,而不适合对行为进行精确定义,如果想描述跨越多个用例的单个对象的行为,应当使用状态图。,四种行为图的应用,2、UML动态视图,一、UML动态视图二、动态对象模型设计三
30、、实战锦囊,基于UML描述的动态对象模型,二、 动态对象模型设计,内容1、动态对象模型基础 2、对象接口设计模式,使用用例组织需求识别用例,识别actor,要注意两个字:边界。识别用例,要注意两个字:价值。用例的定义用例的定义有很多种版本,我们选择RUP 的版本:A use-case instance is a sequence of actions a system performs that yields an observable result of value to a particular actor. A use case defines a set of use-case ins
31、tances.(“用例实例是系统执行的动作序列,这些动作将生成特定actor 可见的价值结果。一个用例定义一组用例实例”)。理解这个定义,可以很好地帮助我们解决在应用用例技术的过程中可能会碰到的各种问题。,(1)可见的价值结果。用例必须提供可见(可度量)的价值结果。,如上图:在一个商品销售系统中,“设定查询条件”、“选择商品”等等并不能为“会员”提供可度量的价值。其实它们只是“检索商品”里的几个步骤,“检索商品”才可以为“会员”提供可度量的价值。我们可以这样想:“会员”如果仅仅是“设定查询条件”,有助于帮助他完成工作吗?有助于帮助他领到工资吗?答案是“否”。,正确的用例如下:,以上举例是要说明
32、用例必须为主参与者提供可度量的价值,并非想说明“设定查询条件”、“选择商品”之类的就不是用例。读者可以自己思考什么情况下“设定查询条件”可以作为用例。,明确系统的边界boundary按角色角度组织和命名用例(不要从系统的组成或对象结构分解来做)先着眼于关键的用例,后考虑其它。从角色出发,列出用例的事件。描述角色所看到的系统,而非系统的运作机制。主动和用户或其它未来用户详细讨论、分析。用例分析是一门需要很高技巧和专业知识的学问。,1、动态对象模型基础,使用用例分析,1、动态对象模型基础,使用序列图分析,用户管理器UserManager,1、动态对象模型基础,使用序列图分析,目录管理器Catalo
33、g,1、动态对象模型基础,使用序列图分析,客户机/服务器模型,1、动态对象模型基础,使用序列图分析,分布式模型,1、动态对象模型基础,使用序列图分析,1、动态对象模型基础,使用序列图分析,CORBA模型,CORBA是以客户/服务器模型为出发点,CORBA对象都是服务器对象,也是接口实施对象。与一般服务器对象的区别:1、可以存在网络中任何地方;2、跨平台;3、语言无关。,1、动态对象模型基础,使用序列图分析,CORBA分布式模型,1、动态对象模型基础,使用状态图分析,一个系统或对象,从产生到结束或从构造到清除,可以处于一系列不同的状态中,我们在分析设计中用状态图来显示其生命的整个过程。,1、动态对象模型基础,使用状态图分析,状态允许子状态,但嵌套不要太多,一层足以。,二、 动态对象模型设计,内容1、动态对象模型基础 2、对象接口设计模式,1、对象接口设计模式,对象封装,模型,1、对象接口设计模式,MVC,模型,一、UML动态视图二、动态对象模型设计三、实战锦囊,基于UML描述的动态对象模型,
限制150内