面向对象的分析和设计.ppt
软件工程,第7章 面向对象的分析和设计,复旦大学计算机科学与工程系 软件工程课程,2/237,内容摘要,面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模,复旦大学计算机科学与工程系 软件工程课程,3/237,内容摘要,面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模,复旦大学计算机科学与工程系 软件工程课程,4/237,Peter Coad和Edward Yourdon提出用下列等式识认面向对象方法:面向对象=对象(object)+分类(classification)+继承(inheritance)+通过消息的通信(communication with messages)可以说,采用这四个概念开发的软件系统是面向对象的,复旦大学计算机科学与工程系 软件工程课程,5/237,面向对象方法的出现很快受到计算机软件界的青睐,并成为20世纪90年代的主流开发方法。我们可以从下列几个方面来分析其原因:从认知学的角度来看,面向对象方法符合人们对客观世界的认识规律。面向对象方法开发的软件系统易于维护,其体系结构易于理解、扩充和修改。面向对象方法中的继承机制有力支持软件的复用。,复旦大学计算机科学与工程系 软件工程课程,6/237,面向对象的基本概念,1.对象(object)对象是指一组属性以及这组属性上的专用操作的封装体。属性(attribute)通常是一些数据,有时它也可以是另一个对象。每个对象都有它自己的属性值,表示该对象的状态。对象中的属性只能通过该对象所提供的操作来存取或修改。操作(operation)(也称方法或服务)规定了对象的行为,表示对象所能提供的服务。,复旦大学计算机科学与工程系 软件工程课程,7/237,封装(encapsulation)是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。封装的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。一个对象通常可由对象名、属性和操作三部分组成。,复旦大学计算机科学与工程系 软件工程课程,8/237,2.类(class)类是一组具有相同属性和相同操作的对象的集合。一个类中的每个对象都是这个类的一个实例(instance)。类是创建对象的模板,从同一个类实例化的每个对象都具有相同的结构和行为。,复旦大学计算机科学与工程系 软件工程课程,9/237,复旦大学计算机科学与工程系 软件工程课程,10/237,3.继承(inheritance)继承是类间的基本关系,它是基于层次关系的不同类共享数据和操作的一种机制。父类中定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,可以继承其父类(或祖先类)的属性和操作,还可以对父类(或祖先类)中的操作重新定义其实现方法。,复旦大学计算机科学与工程系 软件工程课程,11/237,复旦大学计算机科学与工程系 软件工程课程,12/237,有时,我们定义一个类,它把一些类组织起来,提供一些公共的行为,但并不需要使用这个类的实例,而仅使用其子类的实例。我们把这种没有实例的类称为抽象类(abstract class)。在抽象类中可以定义抽象操作,抽象操作指:只定义这个类的操作接口,不定义它的实现,其实现部分由其子类定义。抽象操作操作名用斜体字表示,也可以在操作特征(signature)后面加上特征字符串abstract。,复旦大学计算机科学与工程系 软件工程课程,13/237,复旦大学计算机科学与工程系 软件工程课程,14/237,如果一个子类只有唯一一个父类,这个继承称为单一继承。如果一个子类有一个以上的父类,这种继承称为多重继承。,复旦大学计算机科学与工程系 软件工程课程,15/237,4.消息(message)消息传递是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其服务。一个消息通常包括接收对象名、调用的操作名和适当的参数(如果有必要的话)。消息只告诉接收对象需要完成什么操作,但并不指示接收者怎样完成操作。消息完全由接收者解释,接收者独立决定采用什么方法完成所需的操作。,复旦大学计算机科学与工程系 软件工程课程,16/237,5.多态性(polymorphism)多态性是指同一个操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。例如“画”操作,作用在“矩形”对象上,则在屏幕上画一个矩形,作用在“圆”对象上,则在屏幕上画一个圆。也就是说,相同操作的消息发送给不同的对象时,每个对象将根据自己所属类中定义的这个操作去执行,从而产生不同的结果。,复旦大学计算机科学与工程系 软件工程课程,17/237,6.动态绑定(dynamic binding)动态绑定是指在程序运行时才将消息所请求的操作与实现该操作的方法连接起来。传统的程序设计语言的过程调用与目标代码的连接(即调用哪个过程)放在程序运行前(即编译时)进行(称为静态绑定),而动态绑定则是把这种连接推迟到运行时才进行。动态绑定是一种在运行时确定被执行代码的技术。,复旦大学计算机科学与工程系 软件工程课程,18/237,在一般与特殊关系中,子类是父类的一个特例,所以父类对象可以出现的地方,也允许其子类对象出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。,复旦大学计算机科学与工程系 软件工程课程,19/237,if 条件 then p:=t;else p:=r;area:=p.getarea;,Var p:polygon;Var t:triangle:=triangle.new;Var r:rectangle:=rectangle.new;,复旦大学计算机科学与工程系 软件工程课程,20/237,内容摘要,面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模,复旦大学计算机科学与工程系 软件工程课程,21/237,面向对象分析Object-Oriented Analysis,面向对象分析的一般步骤如下:获取客户对系统的需求:包括标识场景(scenario)和用况(use case,也称用例),以及建造需求模型用基本的需求为指南,来选择类和对象(包括属性和操作)。定义类的结构和层次。建造对象关系模型。建造对象行为模型。利用用况/场景来复审分析模型。,复旦大学计算机科学与工程系 软件工程课程,22/237,1.获取客户对系统的需求 需求获取必须让客户与开发者充分地交流,这里介绍一种采用用况来收集客户需求的技术。分析员首先标识使用该系统的不同的执行者(actor),这些执行者代表使用该系统的不同的角色。每个执行者可以叙述他如何使用系统,或者说他需要系统提供什么功能。执行者提出的每一个使用场景(或功能)都是系统的一个用况的实例,一个用况描述了系统的一种用法(或一个功能),所有执行者提出的所有用况构成系统的完整的需求。,分析过程,复旦大学计算机科学与工程系 软件工程课程,23/237,注意,执行者与用户是不同的两个概念,一个用户可以扮演几个角色(执行者),一个执行者可以是用户,也可以是其他系统(应用程序或设备)。得到的用况必须进行复审,以使需求完整。,复旦大学计算机科学与工程系 软件工程课程,24/237,2.标识类和对象 类和对象来自问题领域。可以先标识候选类,然后进行筛选,复旦大学计算机科学与工程系 软件工程课程,25/237,3.定义类的结构和层次 类的结构主要有两种:一般特殊(generalizationspecialization)结构和整体部分(wholepart)结构。一般特殊结构是一种分类结构,反映了类间的一般与特殊的关系。一般类与特殊类之间是一种“is a”的关系,如:汽车是一种交通工具。同样,特殊类还可以分为更特殊的类,这样可形成类的层次结构。整体部分结构反映了类间的整体与部分关系。值得注意的是,整体部分关系是对对象而言的,而不是对类的。整体部分关系是一种“has a”的关系,如“汽车”有“发动机”。同样,整体部分结构也具有层次结构。,复旦大学计算机科学与工程系 软件工程课程,26/237,有的面向对象方法中,把互相协作以完成一组紧密结合在一起的责任的类的集合定义为主题(subject)或子系统(subsystem)。主题和子系统都是一种抽象,从外界观察系统时,主题或子系统可看作黑盒,它有自己的一组责任和协作者,观察者不必关心其细节。观察一个主题或子系统的内部时,观察者可以把注意力集中在系统的某一个方面。因此,主题或子系统实际上是系统更高抽象层次上的一种描述。,复旦大学计算机科学与工程系 软件工程课程,27/237,4.建造对象关系模型 对象-关系模型描述了系统的静态结构,它指出了类间的关系(relationship)。类之间的关系有关联、依赖、泛化、实现等。,复旦大学计算机科学与工程系 软件工程课程,28/237,5.建立对象行为模型 对象-行为模型描述了系统的动态行为,它们指明系统如何响应外部的事件或激励(stimulus)。建模的步骤如下:评估所有的用况,以完全理解系统中交互的序列。标识驱动交互序列的事件,理解这些事件如何和特定的对象相关联。为每个用况创建事件轨迹(event trace)。为系统建造状态机图。复审对象-行为模型,以验证准确性和一致性。,复旦大学计算机科学与工程系 软件工程课程,29/237,面向对象设计(Object_Oriented Design),面向对象设计的一般步骤如下:系统设计将子系统分配到处理器选择实现数据管理、界面支持和任务管理的设计策略为系统设计合适的控制机制复审并考虑权衡(折衷),复旦大学计算机科学与工程系 软件工程课程,30/237,对象设计在过程级别(procedural lavel)设计每个操作,即设计每个操作的实现细节定义内部类为类属性设计内部数据结构消息设计 使用对象间的协作和对象-关系模型,设计消息模型复审 复审设计模型并在需要时迭代。,复旦大学计算机科学与工程系 软件工程课程,31/237,1.系统设计1)将分析模型划分成子系统 在OO系统设计中,我们把分析模型中紧密相关的类、关系等设计元素包装成子系统。通常,子系统的所有元素共享某些公共的性质,它们可能都涉及完成相同的功能;它们可能驻留在相同的产品硬件中;或者它们可能管理相同的类和资源。子系统由它们的责任所刻画,即,一个子系统可以通过它提供的服务来标识。在OOD中,这种服务是完成特定功能的一组操作。,复旦大学计算机科学与工程系 软件工程课程,32/237,子系统的设计准则是:(1)子系统应具有定义良好的接口,通过接口和系统的其它部分通信;(2)除了少数的“通信类”外,子系统中的类应只和该子系统中的其它类协作;(3)子系统的数量不宜太多;(4)可以在子系统内部再次划分,以降低复杂性。,复旦大学计算机科学与工程系 软件工程课程,33/237,2)标识问题本身的并发性,并为子系统分配处理器 通过对对象-行为模型的分析,可发现系统的并发性。如果对象(或子系统)不是同时活动的,则它们不需并发处理,此时这些对象(或子系统)可以在同一个处理器上实现。反之,如果对象(或子系统)必须对一些事件同时异步地动作,则它们被视为并发的,此时,可以将并发的子系统分别分配到不同的处理器,或者分配在同一个处理器,而由操作系统提供并发支持。,复旦大学计算机科学与工程系 软件工程课程,34/237,3)任务管理设计Coad和Yourdon提出如下管理并发任务对象的设计策略:(1)确定任务的类型;(2)必要时,定义协调者任务和关联的对象;(3)将协调者任务和其它任务集成。通常可通过了解任务是如何被启动的来确定任务的类型,如事件驱动任务,时钟驱动任务。每个任务应该定义其优先级,并识别关键任务。当有多个任务时还可以考虑增加一个协调者任务,以控制这些任务协同工作。,复旦大学计算机科学与工程系 软件工程课程,35/237,4)数据管理设计 通常数据管理设计成层次模式,其目的是将数据的物理存储及操纵与系统的业务逻辑加以分离。数据管理的设计包括设计系统中各种数据对象的存储方式(如内部数据结构、文件、数据库),以及设计相应的服务,即为要储存的对象增加所需的属性和操作。,复旦大学计算机科学与工程系 软件工程课程,36/237,5)资源管理设计 OO系统可利用一系列不同的资源(如磁盘驱动器、处理器、通信线路等外部实体或数据库、对象等抽象资源),很多情况下,子系统同时竞争这些资源,因此要设计一套控制机制和安全机制,以控制对资源的访问,避免对资源使用的冲突。6)人机界面设计 对大多数应用系统而言,人机界面本身是一个非常重要的子系统。人机界面主要强调人如何命令系统,以及系统如何向人提交信息。它包括窗口、菜单、报告的设计。,复旦大学计算机科学与工程系 软件工程课程,37/237,7)子系统间的通信 子系统之间可以通过建立客户/服务器连接进行通信,也可以通过端对端(peer to peer)连接进行通信。我们必须确定子系统间通信的合约(contract),合约提供了一个子系统和另一个子系统交互的方式。,复旦大学计算机科学与工程系 软件工程课程,38/237,2.对象设计 对象设计是为每个类的属性和操作作出详细的设计,并设计连接类与它的协作者之间的消息规约。1)对象描述 对象的设计描述可以采取以下形式之一:(1)协议描述:描述对象的接口,即定义对象可以接收的消息以及当对象接收到消息后完成的相关操作;(2)实现描述:描述传送给对象的消息所蕴含的每个操作的实现细节,实现细节包括有关对象私有部分的信息,即关于描述对象属性的数据结构的内部细节和描述操作的过程细节。对对象的使用者来说,只需要协议描述就够了。,复旦大学计算机科学与工程系 软件工程课程,39/237,2)设计算法和数据结构 为对象中的属性和操作设计数据结构和实现算法。3.设计模式(design patterns)在许多面向对象系统中,存在一些类和通信对象的重复出现的模式。这些模式求解特定的设计问题,使面向对象设计更灵活,并最终可复用。这些模式帮助设计者复用以前成功的设计,设计者可以把这些模式应用到新的设计中。,复旦大学计算机科学与工程系 软件工程课程,40/237,一个设计模式通常可用四个信息来描述:1)模式名 设计模式名应具有实际的含义,它能反映模式的适用性和意图。2)使模式可被应用所必须存在的环境和条件。3)设计模式的特征 模式特征指出一些设计的属性,调整这些属性使该模式能适应各种不同的问题。这些属性表示设计的特征,这些特征能被用于检索(通过数据库)以找到合适的模式。4)应用设计模式的结果(consequences)对于一个设计模式的使用结果表明设计决策的走向。,复旦大学计算机科学与工程系 软件工程课程,41/237,典型的面向对象方法,Coad&Yourdon 方法OMT方法Booch方法OOSE方法,复旦大学计算机科学与工程系 软件工程课程,42/237,内容摘要,面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模,复旦大学计算机科学与工程系 软件工程课程,43/237,统一建模语言UML,Unified Modeling Language,复旦大学计算机科学与工程系 软件工程课程,44/237,UML概述,为何研究UML结束方法大战发展历史 1994年Booch和Rumbaugh在Rational Software Corporation开始了UML的工作,其目标是创建一个“统一的方法”,1995年OOSE的创始人Jacobson加盟到这项工作中,工作重点转移到创建一种统一的建模语言UML 1996年6月、10月、1997年1月、11月分别推出了UML0.9、UML0.91、UML1.0、UML1.1,复旦大学计算机科学与工程系 软件工程课程,45/237,UML概述,1997年11月,OMG(Object Management Group)批准把UML1.1作为基于面向对象技术的标准建模语言 之后,UML进行了持续的修订和改进,先后产生了UML1.2、1.3、1.4、1.5版本 2004年推出了UML2.0,UML2.0对UML1.x作了重大的修改。,复旦大学计算机科学与工程系 软件工程课程,46/237,模型元素 模型元素指模型中的实体以及实体间相互连接的关系,复旦大学计算机科学与工程系 软件工程课程,47/237,视图与图,复旦大学计算机科学与工程系 软件工程课程,48/237,静态视图静态视图对应用领域中的概念以及与系统实现有关的内部概念建模,主要由类以及类之间的相互关系组成,在静态视图中不描述依赖于时间的系统行为。静态视图用类图来展示。设计视图设计视图对应用自身的设计结构建模,例如,将设计结构扩展成:结构化类元,为实现功能所需的协作和良定义接口的构件的组装。设计视图由内部结构图、协作图和构件图实现。,复旦大学计算机科学与工程系 软件工程课程,49/237,用况视图用况视图对被称为执行者的外部代理(他与特定视点的主题交互)所感受到的主题(如系统)功能建模。用况视图的意图是列出系统中的用况和执行者,并显示哪个执行者参与了哪个用况的执行。用况的行为用动态视图,特别是交互视图来表示。用况视图用用况图来展示。,复旦大学计算机科学与工程系 软件工程课程,50/237,状态机视图状态机视图对一个类的对象的可能生命历程建模。一个状态机包括用迁移连接的状态,每个状态对一个对象在其生命期中满足某种条件的一个时间段建模。当一个事件发生时,它会导致触发对象的一个状态向另一个新状态的迁移,附加在迁移上的动作或活动也同时被执行。状态机视图用状态机图来展示。,复旦大学计算机科学与工程系 软件工程课程,51/237,活动视图活动展示了包含在执行计算或工作流中的计算活动的控制流。一个动作是一个基本的计算步,一个活动结点是一组动作或子活动,一个活动可描述顺序的和并发的计算。活动视图用活动图来展示。交互视图交互视图描述系统各部分中消息交换的顺序。交互视图提供了系统中行为的整体视图,也就是说,它展示了多个对象间交叉的控制流。交互视图用顺序图和通信图来展示。,复旦大学计算机科学与工程系 软件工程课程,52/237,部署视图部署视图描述了运行时结点上制品的分布。制品是一个物理实现单元,如一个文件,它也可以表示一或多个构件的实现(一种表现形式)。结点是运行时表示计算资源的物理对象,如,计算机、设备或内存。部署视图允许对分配的结果和资源分配进行评估。部署视图用部署图来展示。,复旦大学计算机科学与工程系 软件工程课程,53/237,模型管理视图模型管理视图对模型自身的组织建模。一个模型由一组保存模型元素(如类、状态机、用况)的包组成。包还可以包含其它的包,因此,一个模型从一个间接包含所有模型内容的根包(root package)开始。包是操纵模型内容的单元,还是访问控制和配置控制的单元。每个模型元素可以被一个包或另一个元素拥有。模型管理信息通常展示在包图中,它是类图的变种。,复旦大学计算机科学与工程系 软件工程课程,54/237,剖面(profile)UML是用一个元模型(metamodel)定义的,元模型是指描述建模语言自身的模型。通常元模型的改变是复杂的,也是危险的。剖面机制允许在不修改基础元模型的前提下对UML作有限的变化。UML包含三个主要的可扩展结构:约束(constraints)、版型(stereotypes)和标签值(tagged values)。约束是以自然语言或特定形式语言的正文表示的语义条件或限制,约束写在花括号中(),如value0,or。版型是在基于现有各类模型元素的外形中定义模型元素的新类型,它本质上是一种新元类(metaclass)。版型可以扩展语义,但不能扩展原元模型类的结构。用标记版型,如signal。标签值是贴在任何模型元素上的被命名的信息片。下图给出了版型和标签值的应用实例。,复旦大学计算机科学与工程系 软件工程课程,55/237,复旦大学计算机科学与工程系 软件工程课程,56/237,类图 类图展示了系统中类的静态结构,即类与类之间的相互联系。类之间有多种联系方式,如关联(相互连接)、依赖(一个类依赖或使用另一个类)、泛化(一个类是另一个类的特殊情况)等。可以把若干个相关的类包装在一起作为一个单元(包),相当于一个子系统。一个系统可以有多张类图,一个类也可以出现在几张类图中。对象图 对象图是类图的实例,它展示了系统执行在某一时间点上的一个可能的快照。对象图使用与类图相同的符号,只是在对象名下面加上下划线,同时它还显示了对象间的所有实例链接(link)关系。,复旦大学计算机科学与工程系 软件工程课程,57/237,内部结构图内部结构图展示了类的分解,给出了组成一个结构化类元的相互连接的部分、端口和连接器。,复旦大学计算机科学与工程系 软件工程课程,58/237,协作图协作图展示了协作的定义,是一种合成的结构图。协作是为了完成某一目的而一起工作的一组对象间的上下文关系。,复旦大学计算机科学与工程系 软件工程课程,59/237,构件图构件图展示了系统中的构件(即来自应用的软件单元),构件间通过接口的连接,以及构件之间的依赖关系。构件是一种结构化类元,可以用内部结构图来定义它的内部结构。,复旦大学计算机科学与工程系 软件工程课程,60/237,用况图用况图展示了各类外部执行者与系统所提供的用况之间的连接。一个用况是系统所提供的一个功能(也可以说是系统提供的某一特定用法)的描述,执行者是指那些可能使用这些用况的人或外部系统,执行者与用况的连接表示该执行者使用了那个用况。用况图给出了用户所感受到的系统行为,但不描述系统如何实现该功能。用况通常用普通正文描述,也可以用活动图来描述。,复旦大学计算机科学与工程系 软件工程课程,61/237,状态机图状态机图通常是对类描述的补充,它说明该类的对象所有可能的状态以及哪些事件将导致状态的改变。一个事件可以是另一个对象向它发送的一条消息,或者是满足了某些条件。状态的改变称为迁移(transition)。一个状态迁移还可以有与之相关的动作,该动作指出状态迁移时应做什么。并不是所有的类都要画状态机图,有些类有一些意义明确的状态,并且其行为受不同的状态所影响和改变,这些类才需要画状态机图。,复旦大学计算机科学与工程系 软件工程课程,62/237,活动图活动图展示了连续的活动流。活动图通常用来描述完成一个操作所需要的活动。当然它还能用于描述其它活动流,如描述用况。活动图由动作状态组成,它包含完成一个动作的活动的规约(即规格说明)。当一个动作完成时,将离开该动作状态。活动图中的动作部分还可包括消息发送和接收的规约。,复旦大学计算机科学与工程系 软件工程课程,63/237,顺序图顺序图展示了几个对象之间的动态交互关系。它主要是用来显示对象之间发送消息的顺序,它还显示了对象之间的交互,即系统执行的某一特定点所发生的事。通信图通信图用几何排列来表示交互作用中的角色,它显示了有协作关系的复合结构组成部分或角色范围内的交互。它明确地显示元素之间的协作关系,而不显示作为独立维的时间,消息的顺序和并发线程必须由顺序号确定。,复旦大学计算机科学与工程系 软件工程课程,64/237,部署图部署图展示了运行时处理结点和在结点上生存的制品的配置。结点是运行时的计算资源,制品是物理实体,如构件、文件。部署图中显示部署在结点上的制品和它们之间的关系,以及结点之间的连接和通信方式。,复旦大学计算机科学与工程系 软件工程课程,65/237,包图包图是由包和它们间的关系组成的结构图模型是在某一视点给定的精度上对系统的完整描述,一个系统可以从不同的视点(如分析模型、设计模型)存在多个模型。一个模型可看作一个特定类型的包,通常仅显示包就足够了(不必显示包内部的细节)。下图给出了剧院系统所细分成的包以及它们之间的依赖关系。,复旦大学计算机科学与工程系 软件工程课程,66/237,复旦大学计算机科学与工程系 软件工程课程,67/237,内容摘要,面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模,复旦大学计算机科学与工程系 软件工程课程,68/237,用况建模,用况建模是用于描述一个系统应该做什么的建模技术,用况建模不仅用于新系统的需求获取,还可用于已有系统的升级。用况模型用用况图来描述。用况图展示了各类外部执行者与系统所提供的用况之间的连接。一个用况是系统所提供的一个功能(也可以说是系统提供的某一特定用法)的描述,执行者是指那些可能使用这些用况的人或外部系统,执行者与用况的连接表示该执行者使用了那个用况。用况图给出了用户所感受到的系统行为,但不描述系统如何实现该功能。用况通常用普通正文描述,也可以用活动图来描述。,复旦大学计算机科学与工程系 软件工程课程,69/237,任何一个涉及到系统功能活动的人都会用到用况模型。客户:用况模型指明了系统的功能,描述了系统能如何使用。用况建模时客户的积极参与是十分重要的。开发者:用况模型帮助他们理解系统要做什么,同时为以后的其它模型建模、结构设计、实现等提供依据。集成测试和系统测试人员:根据用况来测试系统,以验证系统是否完成了用况指定的功能。,复旦大学计算机科学与工程系 软件工程课程,70/237,用况建模步骤,创建用况模型的步骤包括:1定义系统2确定执行者3确定用况4描述用况5定义用况间的关系,6确认模型,复旦大学计算机科学与工程系 软件工程课程,71/237,用况模型由用况图组成,用况图展示了执行者、用况以及它们之间的关系。用况通常用正文形式来描述。一个用况模型可由若干幅用况图组成。一幅用况图包含的模型元素有系统、执行者、用况,以及表示它们间的不同关系,如关联、扩展、包含、泛化等。,复旦大学计算机科学与工程系 软件工程课程,72/237,用况图,复旦大学计算机科学与工程系 软件工程课程,73/237,一.确定执行者执行者是指与系统交互的人或其它系统执行者代表一种角色,而不是具体的某个人 执行者可分成主执行者和副执行者:主执行者使用系统的主要功能 例如,保险系统中主执行者处理保险的注册和管理 副执行者处理系统的辅助功能 例如,管理数据库、通信、备份以及其它管理等系统维护,复旦大学计算机科学与工程系 软件工程课程,74/237,执行者还可分为主动执行者和被动执行者:主动执行者开始一个用况被动执行者从不开始用况,只是参与一个或多个用况,复旦大学计算机科学与工程系 软件工程课程,75/237,我们可以通过回答下列问题来确定执行者:谁使用系统的主要功能(主执行者)?谁需要从系统中得到对他们日常工作的支持?谁需要维护、管理和维持系统的日常运行(副执行者)?系统需要控制哪些硬件设备?系统需要与哪些其它系统交互?哪些人或哪些系统对系统产生的结果(值)感兴趣?,复旦大学计算机科学与工程系 软件工程课程,76/237,确定用况1.用况的特征用况总是被执行者启动的(initiated),执行者必须直接或间接地指示系统去执行用况用况向执行者提供值,这些值必须是可识别的用况是完整的,一个用况必须是一个完整的描述 用况是一个类,而不是实例,用况的实例称为场景(scenario),复旦大学计算机科学与工程系 软件工程课程,77/237,2.寻找用况可以通过让每个执行者回答以下问题来寻找用况:执行者需要系统提供哪些功能?执行者需要做什么?执行者是否需要读、创建、删除、修改或储存系统中的某类信息?执行者是否要被系统中的事件提醒,或者执行者是否要提醒系统中某些事情?从功能观点看,这些事件表示什么?执行者的日常工作是否因为系统的新功能(尤其是目前尚未自动化的功能)而被简化或提高了效率?,复旦大学计算机科学与工程系 软件工程课程,78/237,另外还有一些不是目前的执行者回答的问题:系统需要哪些输入/输出?谁从系统获取信息?谁为系统提供信息?与当前系统(可能是人工系统而不是自动化系统)的实现有关的主要问题是什么?对同一个项目,不同的开发者选取的用况数是不一样的。例如一个10个人年规模的项目,有人选取了20个用况,而在一个类似的项目中,有人选用了100个用况。似乎20个太少,而100个太多,希望在项目规模和用况数之间保持均衡。,复旦大学计算机科学与工程系 软件工程课程,79/237,3.用况的描述 用况通常用正文(text)来描述,也可用活动图来描述。用况的正文描述应包括以下内容:用况的目的:用况的最终目的是什么?它试图达到什么?用况是如何启动(initiate)的:哪个执行者在什么情况下启动用况的执行?执行者和用况之间的消息流:用况与执行者之间交换什么消息或事件来通知对方改变或恢复信息?描述系统与执行者之间的主消息流是什么?以及系统中哪些实体被使用或修改?,复旦大学计算机科学与工程系 软件工程课程,80/237,用况中可供选择的流:用况中的活动可根据条件或异常(exception)有选择地执行。如何通过给执行者一个值来结束用况:描述何时可认为用况已结束.,复旦大学计算机科学与工程系 软件工程课程,81/237,执行者的简要描述 如客户:向公司订购商品的人 客户代表:公司处理客户请求的雇员 库存系统:记录公司库存的软件用况的简要描述 如订购货物:客户创建一个新的请求商品的订单,并为那些商品付费 取消订单:客户取消一个已经存在的订单,复旦大学计算机科学与工程系 软件工程课程,82/237,用况的详细描述前置条件和后置条件前置条件和后置条件表示用况开始和结束的条件事件流(flow of events)事件流是一系列陈述句,它是从执行者的角度看,列出用况的各个步骤用况描述中可以包含条件、分支和循环。例如:订购货物用况的描述如下,复旦大学计算机科学与工程系 软件工程课程,83/237,用况名称:订购货物参与的执行者:客户、客户代表前置条件:一个合法的客户已经登录到这个系统事件流:当客户选择订购货物时,用况开始客户输入他的姓名和地址如果客户只输入邮编,系统将给出州和城市名当客户输入产品代码a.系统给出产品描述和价格b.系统往客户订单中添加该物品的价格 循环结束5.客户输入信用卡支付信息,复旦大学计算机科学与工程系 软件工程课程,84/237,6.客户选择提交7.系统检验输入的信息,把该订单作为未完成的交易保存,同时向记账系统转发支付信息。如果客户提交的信息不正确,系统将提示客户修改。8.当支付确认后,订单就被标记上已经确认,同时返回给客户一个订单ID,用况也就结束了。如果支付没有被确认,系统将提示客户改正支付信息或者取消。如果客户选择修改信息,就回到第5步;如果选择取消,用况结束。后置条件:如果订单没有被取消,它将保存在系统中,并做上标记,复旦大学计算机科学与工程系 软件工程课程,85/237,其他需求在用况中还可描述一些特殊的需求,这些需求常常是非功能性需求,如可用性、安全性、可维护性、负载、性能、自动防故障、数据需求等。如订购货物用况的其他需求:前置条件:(略)事件流:(略)特殊需求:系统必须在一秒内响应客户的输入后置条件:(略),复旦大学计算机科学与工程系 软件工程课程,86/237,事件流可分为两部分:基本路径 基本路径是运转正常时的路径,是一系列没有分支和选择的简单陈述句可选路径 可选路径是指不同于基本路径而允许不同的事件序列的路径。对于明显有可能随时发生的事情来说,可选路径非常有效。,复旦大学计算机科学与工程系 软件工程课程,87/237,如订购货物用况的基本路径:事件流:基本路径当客户选择订购货物时,用况开始客户输入他的姓名和地址当客户输入产品代码时a.系统给出产品描述和价格b.系统往客户订单中添加该物品的价格 循环结束4.客户输入信用卡支付信息5.客户选择提交6.系统检验输入的信息,把该订单作为未完成的交易保存,同时向记账系统转发支付信息7.当支付确认后,订单就被标记上已经确认,同时返回给客户一个订单ID,用况结束,复旦大学计算机科学与工程系 软件工程课程,88/237,如果在订购货物用况中,客户可以在提交订单前随时取消订单,其可选路径如下:可选路径:在选择提交前的任何时候,客户都可以选择cancel。这次订购没有被保存,用况结束。在基本路径第6步,如果有任何不正确的信息,系统提示客户去修改这些信息。在基本路径第7步,如果支付没有被确认,系统将提示客户改正支付信息或者取消。如果客户选择修改信息,就回到基本路径第4步;如果选择取消,用况结束。,复旦大学计算机科学与工程系 软件工程课程,89/237,确定用况之间的关系,复旦大学计算机科学与工程系 软件工程课程,90/237,复旦大学计算机科学与工程系 软件工程课程,91/237,实例,本实例实现一个简化了的银行储蓄账户管理系统,该系统是在银行的柜台上对客户办理活期储蓄业务。系统的需求陈述如下:一个客户可以在多个银行中开设账户,一个客户也可在同一银行中开设多个不同的账户。客户可以通过银行职员进行开户、存款、取款、转账、注销账户等活动。其中转账指客户将自己的某个账户上的钱款转入同一银行的不同账户(称为银行内转账)或转入不同银行的账户(称为银行间转账)。系统管理员负责系统的账户管理及业务报表的生成。,复旦大学计算机科学与工程系 软件工程课程,92/237,识别执行者客户:到银行办理储蓄业务的人,负责输入密码银行职员(客户代理):银行工作人员,代表客户进行储蓄业务的操作银行职员(管理人员):银行工作人员,根据客户的储蓄业务更新账户管理员:银行计算机的管理人员,负责账户的管理和业务报表的生成,复旦大学计算机科学与工程系 软件工程课程,93/237,识别用况从系统的需求陈述可知,银行职员(客户代理)需要系统提供开户、存款、取款、转账、注销账户等功能,这些功能都包含了校验密码的功能。系统管理员需要系统提供账户管理和报表生成功能。银行职员(管理人员)则参与了账户管理中的更新账户的功能。此外,转账功能可分为银行内转账和银行间转账,我们可将它们设计成三个用况,其中银行内转账用况和银行间转账用况都继承了基本转账用况。据此分析,得到该系统的用况图如下图所示。,复旦大学计算机科学与工程系 软件工程课程,94/237,复旦大学计算机科学与工程系 软件工程课程,95/237,开户用况描述用况名称:开户参与的执行者:银行职员(客户代理),客户前置条件:一个合法的银行职员(客户代理)已登录到该系统事件流:1.当选择开户功能时用况开始2.输入客户信息(姓名、地址、身份证号等)3.从账户管理系统获取新的账号4.请客户输入密码5.请客户再次输入密码6.如果两次密码不一致则回到第4步,否则继续7.在账户库中添加新账户8.打印存折,用况结束后置条件:在账户库中增加了一个新账户,得到一张新存折,复旦大学计算机科学与工程系 软件工程课程,96/237,取款用况描述用况名称:取款参与的执行者:银行职员(客户代理)前置条件:一个合法的银行职员(客户代理)已登录到该系统事件流:基本路径:1.当选择取款功能时用况开始2.当输入客户信息(姓名、账号等)后 a)如果客户信息与账户不一致,显示错误信息,可以重新输入或结束用况 b)如果该账户被冻结(如因挂失而冻结),显示冻结信息并结束用况3.输入并校验密码,复旦大学计算机科学与工程系 软件工程课程,97/237,4.输入取款金额,如果该账户的余款小于取款金额,显示错误信息,要求重新输入5.打印取款单,交客户签字6.建立取款事件记录,更新账户信息7.打印存折,用况结束可选路径:1.在第5步客户签字之前的任何时刻,客户可以取消本次取款,用况结束2.第3步校验密码时,如发现密码不一致,则重新输入密码,或用况结束后置条件:如果取款成功,客户账户中的余额被更新(减少),否则余额不变。,复旦大学计算机科学与工程系 软件工程课程,98/237,描述取款用况的活动图,复旦大学计算机科学与工程系 软件工程课程,99/237,内容摘要,面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模,复