《第7章 面向对象分析-1.pptx》由会员分享,可在线阅读,更多相关《第7章 面向对象分析-1.pptx(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第7章 面向对象分析7.1面向对象分析方法 7.1.1面向对象分析过程面向对象的分析主要以用例模型为基础。开发人员在收集到的原始需求的基础上,通过构建用例模型从而得到系统的需求。进而再通过对用例模型的完善,使得需求得到改善。所谓用例是指系统中的一个功能单元,可以描述为参与者与系统之间的一次交互。用例常被用来收集用户的需求。首先要找到系统的操作者,即用例的参与者。参与者是在系统之外,透过系统边界与系统进行有意义交互的任何事物。可以把参与者执行的每一个系统功能都看作一个用例。可以说,用例描述了系统的功能,涉及系统为了实现一个功能目标而关联的参与者、对象和行为。确定了系统的所有用例之后,就可以开始识
2、别目标系统中的对象和类了。把具有相似属性和操作的对象定义为一个类。7.1面向对象分析方法 边界类示意图控制类示意图实体类示意图目标系统的类可以划分为边界类、控制类和实体类。边界类代表了系统及其操参与者的边界,描述参与者与系统之间的交互。它更加关注系统的职责,而不是实现职责的具体细节。通常,界面控制类、系统和设备接口类都属于边界类。控制类代表了系统的逻辑控制,描述一个用例所具有的事件流的控制行为,实现对用例行为的封装。通常,可以为每个用例定义一个控制类。实体类描述了系统中必须存储的信息及相关的行为,通常对应于现实世界中的事物。7.1面向对象分析方法 确定了系统的类和对象之后,就可以分析类之间的关
3、系了。对象或类之间的关系有依赖、关联、聚合、组合、泛化和实现。依赖关系是“非结构化”的和短暂的关系,表明某个对象会影响另外一个对象的行为或服务。关联关系是“结构化”的关系,描述对象之间的连接。聚合关系和组合关系是特殊的关联关系,它们强调整体和部分之间的从属性,组合是聚合的一种形式,组合关系对应的整体和部分具有很强的归属关系和一致的生命期。比如,计算机和显示器就属于聚合关系。泛化关系与类间的继承类似。实现关系是针对类与接口的关系。7.1面向对象分析方法 明确了对象、类和类之间的层次关系之后,需要进一步识别出对象之间的动态交互行为,即系统响应外部事件或操作的工作过程。一般采用顺序图将用例和分析的对
4、象联系在一起,描述用例的行为是如何在对象之间分布的。也可以采用协作图、状态图或活动图。最后,需要将需求分析的结果用多种模型图表示出来,并对其进行评审。由于分析的过程是一个循序渐进的过程,合理的分析模型需要多次迭代才能得到。7.1面向对象分析方法 7.1面向对象分析方法 7.1.2面向对象分析原则1定义有实际意义的对象2模型的描述要规范、准确3共享性4封装性7.2面向对象建模 在面向对象的分析中,通常需要建立3种形式的模型,它们分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型,以及描述系统功能的功能模型。这3种模型都涉及数据、控制、操作等共同的概念,只不过每种模型描述的侧重点不同。一
5、个典型的软件系统通常包括的内容为:它使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。7.2面向对象建模 7.2.1建立对象模型复杂问题(大型系统)的对象模型通常由下述5个层次组成:主题层(也称为范畴层)、类与对象层、结构层、属性层和服务层,如图所示。上述5个层次对应着在面向对象分析过程中建立对象模型的5项主要活动:划分主题;找出类与对象;识别结构;定义属性;定义服务。7.2面向对象建模 1.划分主题A主题主题是把一组具有较强联系的类组织在一起而得到的类的集合。主题的划分有以下两种方式。自底向上。先建立对象类,然后把对象类中关系较密切的类组织为一个主题。如果主题
6、数量仍然很多,则可进一步将联系较强的小主题组织为大主题,直到系统中最上层主题数不超过7个。这种方式适合于小型系统或中型系统。自顶向下。先分析系统,确定几个大的主题,每个主题相当于一个子系统。将这些子系统再分别进行面向对象分析,建立各个子系统中的对象类。最终可将各个子系统合并为一个大的子系统。7.2面向对象建模 B主题图上述的主题划分的最终结果能够形成一个完整的对象类图和一个主题图。主题图一般有如下3种表示方式。展开方式将关系较密切的对象类画在一个框内,框的每个角标上主题号,框内是详细的对象类图,标出每个类的属性和服务以及类之间的详细关系,这就是主题图的展开方式。压缩方式将每个主题号及主题名分别
7、写在一个框内,这就是主题图的压缩方式。半展开方式。将每个框内主题号、主题名及该主题中所含的对象类全部列出,这就是主题图的半展开方式。主题图的压缩方式是为了表明系统的总体情况,而主题图的展开方式是为了表明系统的详细情况。7.2面向对象建模 2.确定类与对象建立对象模型首先要确定对象、类,然后分析对象、类之间的相互关系。对象类之间的关系可分为关联、依赖、泛化和实现等关系。对象模型用类符号、类实例符号、类的关联关系、继承关系等表示。有些对象具有主动服务功能,称为主动对象。7.2面向对象建模 3.确定属性属性的确定既与问题域有关,也和目标系统的任务有关。标识属性的启发性准则如下:1)每个对象至少需包含
8、一个属性。2)属性取值必需适合对象类的所有实例。3)出现在泛化关系中的对象所继承的属性必须与泛化关系一致。4)系统的所有存储数据必须定义为属性。5)对象的导出属性应当略去。6)在分析阶段,如果某属性描述了对象的外部不可见状态,应将该属性从分析模型中删去。通用的属性应放在泛化结构中较高层的类中,特殊的属性应放在较低层的类中。实体关系图中的实体可能对应于某一对象。这样,实体的属性就会简单地成为对象的属性。如果实体(如学校)不只对应于一类对象,那么这个实体的属性必须分配到分析模型的不同类的对象之中。7.2面向对象建模 4.确定服务“对象”是由描述其属性的数据以及可以对这些数据施加的操作(即方法或服务
9、),封装在一起构成的独立单元。因此,为建立完整的对象模型,既要确定类中应该定义的属性,又要确定类中应该定义的服务。但是,需要等到建立了动态模型和功能模型之后,才能最终确定类中应有的服务,因为这两个模型更明确地描述了每个类中应该提供哪些服务。实际上,在确定类中应有的服务时,既要考虑该类实体的常规行为,又要考虑在本系统中特殊需要的服务。7.2面向对象建模 7.2.2建立动态模型对象模型建立后,就需考察对象和关系的动态变化情况。动态模型描述对象和关系的状态、状态转换的触发事件、对象的服务(行为)。(1)状态状态是对象在其生命周期中的某个特定阶段所处的某种情形,它是对影响对象行为的属性值的一种抽象。状
10、态规定了对象对事件的响应方式。对象对事件的响应,既可以是做一个(或一系列)的动作,也可以仅仅改变对象本身的状态,还可以是既改变状态又做动作。(2)事件事件是引起对象状态转换的控制信息,它是在某个特定时刻所发生的事情,它是对引起对象从一种状态转换到另一种状态的现实世界中的抽象。事件没有持续时间,是瞬间完成的。(3)服务服务(行为)是指对象达到某种状态时所做的一系列处理操作。这些操作是需要消耗时间的。建立动态模型首先要编写脚本,从脚本中提取事件,然后画出UML的顺序图(也称事件跟踪图),最后画出对象的状态转换图。7.2面向对象建模 1.编写脚本在建立动态模型过程中,脚本是系统执行某个功能的一系列事
11、件,脚本描述用户(或其他外部设备)与目标系统之间的一个或多个典型的交互过程,以便对目标系统的行为有更具体的认识。脚本通常起始于一个系统外部的输人事件,结束于一个系统外部的输出事件,它可以包括发生在这个期间的系统所有的内部事件(包括正常情况脚本和异常情况脚本)。编写脚本的目的是保证不遗漏系统功能中重要的交互步骤,有助于确保整个交互过程的正确性和清晰性。7.2面向对象建模 例如,下面陈述的是客户在ATM机上取款的脚本。(1)客户将卡插入ATM机,开始用例。(2)ATM显示欢迎消息并提示客户输入密码。(3)客户输入密码。(4)ATM确认密码有效。如果无效则执行子事件流a。如果与主机联接有问题,则执行
12、异常事件流e。(5)ATM提供以下选项:存钱、取钱、查询。(6)用户选择取钱选项。(7)ATM提示输入所取金额。(8)用户输入所取金额。(9)ATM确定该账户是否有足够的金额。如果余额不够,则执行子事件流b,如果与主机联接有问题,则执行异常事件流e。(10)ATM从客户账户中减去所取金额。(11)ATM向客户提供要取的钱。(12)ATM打印清单。(13)ATM退出客户的卡,用例结束。子事件流a:a1提示用户输入无效密码,请求再次输入;a2如果三次输入无效密码,系统自动关闭,退出客户银行卡。子事件流b:b1提示用户余额不够。b2返回(5),等待客户重新选择。7.2面向对象建模 2.设计用户界面大
13、多数交互行为都可以分为应用逻辑和用户界面两部分。通常,系统分析员首先集中精力考虑系统的信息流和控制流,而不是首先考虑用户界面。实际上,采用不同界面(例如,命令行或图形用户界面),可以实现同样的程序逻辑。应用逻辑是内在的、本质的内容,用户界面是外在的表现形式。动态模型着重表示应用系统的控制逻辑。但是,用户界面的美观、方便、易学及效率,是用户使用系统时首先感受到的。用户界面的美观与否往往对用户是否喜欢、是否接受一个系统起很重要的作用。在分析阶段不能忽略用户界面的设计,在这个阶段用户界面的细节并不太重要,重要的是在这种界面下的信息交换方式。应该快速建立用户界面原型,供用户试用与评价。7.2面向对象建
14、模 3.画UML顺序图或活动图完整、正确的脚本为建立动态模型奠定了必要的基础。但是,用自然语言书写的脚本往往不够简明,而且有时在阅读时会有二义性。为了有助于建立动态模型,通常在画状态图之前先画出事件跟踪图。UML顺序图(也称为事件跟踪图)中,一条竖线代表应用领域中的一个类,每个事件用一条水平的箭头线表示,箭头方向从事件的发送对象指向接受对象,时间从上向下递增。7.2面向对象建模 4.画状态图如果对象的属性值不相同时,对象的行为规则有所不同,我们称对象处于不同的状态。由于对象在不同状态下呈现不同的行为方式,所以应分析对象的状态,才可正确地认识对象的行为并定义它的服务。例如,通信系统中的电话对象,
15、就有电话闲置、拨通中、忙音、通话、断线、超时等状态。这里可以专门定义一个“状态”属性。该属性有之前介绍的几种属性值,每一个属性值就是一种状态。有了状态图,就可“执行”状态图,以便检验状态转换的正确性和协调一致性。执行方法是从任意一个状态开始,当出现一个事件时,引起状态转换,到达另一状态,在状态人口处执行相关的行为,在另一事件出现之前,这个状态应该不发生变化。7.2面向对象建模 7.2.3建立功能模型功能模型表明了系统中数据之间的依赖关系,以及有关的数据处理功能,它由一组数据流图组成。数据流图中的处理对应于状态图中的活动或动作,数据流对应于对象图中的对象或属性。建立功能模型的步骤如下(1)确定输
16、入和输出值(2)画数据流图(3)定义服务7.2面向对象建模 1确定输入和输出值数据流图中的输入和输出值是系统与外部之间进行交互的事件的参数。2画数据流图功能模型可用多张数据流图等来表示。在面向对象方法中,数据源往往是主动对象,它通过生成或使用数据来驱动数据流。数据终点接收数据的输出流。数据流图中的数据存储是被动对象,本身不产生任何操作,只响应存储和访问数据的要求。输入箭头表示增加、更改或删除所存储的数据,输出箭头表示从数据存储中查找信息。7.2面向对象建模 3定义服务类的服务与对象模型中的属性和关联的查询有关,与动态模型中的事件有关,与功能模型的处理有关。通过分析,把这些服务添加到对象模型中去
17、。类的服务有以下4种:(1)对象模型中的服务来自对象模型的服务具有读和写属性值。(2)从事件导出的服务状态图中发往对象的事件也就是该对象接收到的消息,因此该对象必须有由消息选择符指定的操作,这个操作修改对象状态(即属性值)并启动相应的服务。可以看出,所启动的这些服务通常就是接受事件的对象在相应状态的行为。7.2面向对象建模(3)自状态动作和活动的服务状态图中的活动和动作可能是操作,应该定义成对象模型的服务。(4)与数据流图中处理框对应的操作数据流图中的每个处理框都与一个对象(也可能是若干个对象)上的操作相对应。应该仔细对照状态图和数据流图,以便更正确地确定对象应该提供的服务,将其添加到对象模型
18、的服务中去。7.2面向对象建模 7.2.43种模型之间的关系通过面向对象分析应得到的模型包含对象模型、动态模型和功能模型。对象模型为动态模型和功能模型提供基础,这3种模型之间的关系如下。(1)动态模型描述了类实例的生命周期或运行周期。(2)动态模型的状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。(3)功能模型中的用例对应于复杂对象提供的服务,简单的用例对应于更基本的对象提供的服务;有时一个用例对应多个服务,也有一个服务对应多个用例的时候。(4)功能模型数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象;数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象。(5)功能模型中的用例可能产生动态模型中的事件。(6)对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构。面向对象的分析就是用对象模型、动态模型、功能模型描述对象及其相互关系。