




已阅读5页,还剩130页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,第十章、面向对象分析,.,2,面向对象分析(OOA)的关键,是识别出问题域内的对象,并分析它们相互间的关系,最终建立起问题域的简洁、精确、可理解的正确模型。对象模型动态模型功能模型,面向对象分析,.,3,面向对象分析,就是抽取和整理用户需求并建立问题域精确模型的过程。面向对象建模得到的模型包含对象的三个要素:静态结构(对象模型):几乎解决任何一个问题,都需要从客观世界实体及实体间相互关系抽象出极有价值的对象模型;交互次序(动态模型):当问题涉及交互作用和时序时(例如,用户界面及过程控制等),动态模型是重要的;数据变换(功能模型):解决运算量很大的问题(例如,高级语言编译、科学与工程计算等),则涉及重要的功能模型。,10.1面向对象分析的基本过程,.,4,对象模型的五个层次,.,5,面向对象分析大体上按照下列顺序进行:寻找类&对象,识别结构,识别主题,定义属性,建立动态模型,建立功能模型,定义服务。,对象模型的五个层次,.,6,书写要点需求陈述应该阐明“做什么”而不是“怎样做”。它应该描述用户的需求而不是提出解决问题的方法。陈述的内容包括:问题范围,功能需求,性能需求,应用环境及假设条件等。,需求陈述,.,7,ATM系统,.,问题描述,描述ATM系统的需求:设计一个支持银行计算机网络系统的软件,这个系统,是由ATM、中央计算机、分行计算机及柜员终端组成的网络系统。该系统的软件开发成本由各个分行分摊。ATM和中央计算机由总行投资购买。总行拥有多台ATM,分别设在各主要街道上。分行负责提供分行计算机和柜员终端。柜员终端设在分行营业厅及下属的各个储蓄所内。银行柜员使用柜员终端处理储户提交的储蓄事务。储户可以用现金或支票向自己拥有的某个账户内存款或开新账户。储户可以从自己的账户中提款。通常,一个储户可能拥有多个账户。柜员负责把储户提交的存款或提款事务输入柜员终端,接收储户交来的现金或支票,或支付储户现金。柜员终端与相应的分行计算机通信,分行计算机具体处理针对某个账户的事务并且维护账户。拥有银行账户的储户有权申请领取现金兑换卡。其上面有分行代码和卡号,分行代码唯一的标识总行下属的一个分行,卡号确定了这张卡可以访问哪些账户,使用现金兑换卡可以通过ATM访问自己的账户。目前仅限于用现金兑换卡在ATM上提取现金,或查询有关自己账户的信息(如余额)。通常,一张卡可以访问储户的若干个账户,但是不一定能访问这个储户的全部账户。每张现金兑换卡,仅属于一个储户所有,但是,同一张卡可能有多个副本,因此,必须考虑同时在若干台ATM上使用同样的现金兑换卡的可能性。也就是说,系统应该能够处理并发的访问。当用户把现金兑换卡插入ATM之后,ATM就与用户交互,以获取有关这次事务的信息,并与中央计算机交换关于事务的信息。首先,ATM要求用户输入密码,接下来ATM把从这张卡上读到的信息以及用户输入的密码传给中央计算机,请求中央计算机核对这些信息并处理这次事务。中央计算机根据卡上的分行代码确定这次事务与分行的对应关系,并且委托相应的分行计算机验证用户密码。如果用户输入的密码是正确的,ATM就要求用户选择事务类型(取款,查询等),当用户选择取款时,ATM请求用户输入取款额。最后,ATM吐出现金,并打印出账单。,.,9,工作步骤:确定对象类和关联进一步划分出若干主题给类和关联增添属性利用适当的继承关系进一步合并和组织类确定类中的服务(等到建立了动态模型和功能模型之后),建立对象模型,.,10,类&对象是在问题域中客观存在的,系统分析员的主要任务,就是通过分析找出这些类-&-对象。首先,找出所有候选的类-&-对象;然后,从候选的类-&-对象中筛选掉不正确的或不必要的。,10.3.1确定类&对象,.,找出候选的类&对象_方法1,对象是对问题域中有意义的事物的抽象,它们既可能是物理实体,也可能是抽象概念。具体的说,大多数客观事物可分为下述五类:(1)可感知的物理实体,如,房子、足球、汽车等。(2)人或组织的角色,如,教授、会计、人事处等。(3)可记忆的事件,如,旅游、演出等。(4)两个或多个对象的相互作用,通常具有交易或接触的性质,如,结帐、登记等。(5)需要说明的概念,如,规则、法律等。,.,12,非正式分析方法以用自然语言书写的需求陈述为依据,把陈述中的名词作为类&对象的候选者,形容词作为确定属性的线索,动词作为服务(操作)的候选者。,找出候选的类&对象_方法2,.,13,某银行拟开发一个自动取款机系统,它是一个由自动取款机、中央计算机、分行计算机及柜员终端组成的网络系统。ATM和中央计算机由总行投资购买。总行拥有多台ATM,分别设在全市各主要街道上。分行负责提供分行计算机和柜员终端。柜员终端设在分行营业厅及分行下属的各个储蓄所内。该系统的软件开发成本由各个分行分摊。,ATM系统的需求陈述,.,14,银行柜员使用柜员终端处理储户提交的储蓄事务。储户可以用现金或支票向自己拥有的某个账户内存款或开新账户。储户也可以从自己的账户中取款。通常,一个储户可能拥有多个账户。柜员负责把储户提交的存款或取款事务输进柜员终端,接收储户交来的现金或支票,或付给储户现金。柜员终端与相应的分行计算机通信,分行计算机具体处理针对某个账户的事务并且维护账户。,ATM系统的需求陈述,.,15,拥有银行账户的储户有权申请领取现金兑换卡。使用现金兑换卡可以通过ATM访问自己的账户。目前仅限于用现金兑换卡在ATM上提取现金(即取款),或查询有关自己账户的信息(例如,某个指定账户上的余额)。将来可能还要求使用ATM办理转账、存款等事务。所谓现金兑换卡就是一张特制的磁卡,上面有分行代码和卡号。分行代码唯一标识总行下属的一个分行,卡号确定了这张卡可以访问哪些账户。,ATM系统的需求陈述,.,16,通常,一张卡可以访问储户的若干个账户,但是不一定能访问这个储户的全部账户。每张现金兑换卡仅属于一个储户所有,但是,同一张卡可能有多个副本,因此,必须考虑同时在若干台ATM上使用同样的现金兑换卡的可能性。也就是说,系统应该能够处理并发的访问。当用户把现金兑换卡插入ATM之后,ATM就与用户交互,以获取有关这次事务的信息,并与中央计算机交换关于事务的信息。,ATM系统的需求陈述,.,17,首先,ATM要求用户输入密码,接下来ATM把从这张卡上读到的信息以及用户输入的密码传给中央计算机,请求中央计算机核对这些信息并处理这次事务。中央计算机根据卡上的分行代码确定这次事务与分行的对应关系,并且委托相应的分行计算机验证用户密码。如果用户输入的密码是正确的,ATM就要求用户选择事务类型(取款、查询等)。当用户选择取款时,ATM请求用户输入取款额。最后,ATM从现金出口吐出现金,并且打印出账单交给用户。,ATM系统的需求陈述,.,18,银行自动取款机(ATM)系统中央计算机分行计算机柜员终端网络总行市街道分行营业厅储蓄所软件成本柜员储户现金支票账户事务现金兑换卡余额磁卡分行代码卡号副本访问用户信息密码类型取款额账单。,类&对象的初步候选者,.,19,通常,在需求陈述中不会一个不漏地写出问题域中所有有关的类&对象;分析员应该根据领域知识或常识进一步把隐含的类&对象提取出来。例如,在ATM系统的需求陈述中没写的“通信链路”和“事务日志”,。,类&对象的初步候选者,.,20,筛选时主要依据下列标准,删除不正确或不必要的类-&-对象:冗余无关笼统属性操作实现,筛选出正确的类&对象,.,21,如果两个类表达了同样的信息,则应该保留在此问题域中最富于描述力的名称。ATM系统有34个候选的类,其中储户与用户,现金兑换卡与磁卡及副本分别描述了相同的二类信息;因此,应该去掉“用户”、“磁卡”、“副本”等冗余的类,仅保留“储户”和“现金兑换卡”这两个类。,冗余,.,22,银行自动取款机(ATM)系统中央计算机分行计算机柜员终端网络总行市街道分行营业厅储蓄所软件成本柜员储户现金支票账户事务现金兑换卡余额分行代码卡号访问信息密码类型取款额账单用户磁卡副本,去冗余后:,.,23,仅需要把与本问题密切相关的类&对象放进目标系统中。ATM系统并不处理分摊软件开发成本的问题而且ATM和柜员终端放置的地点与本软件的关系也不大。因此,应该去掉候选类“成本”、“市”、“街道”、“营业厅”和“储蓄所”。,无关,.,24,银行自动取款机(ATM)系统中央计算机分行计算机柜员终端网络总行分行软件柜员储户现金支票账户事务现金兑换卡余额分行代码卡号访问信息密码类型取款额账单。成本市街道营业厅储蓄所,去无关后:,.,25,把笼统的或模糊的类去掉。“银行”实际指总行或分行“访问”在这里实际指事务,“信息”的具体内容在需求陈述中随后就指明了。此外还有一些笼统含糊的名词。总之,在本例中应该去掉“银行”、“网络”、“系统”、“软件”、“信息”、“访问”等候选类。,笼统,.,26,自动取款机(ATM)中央计算机分行计算机柜员终端总行分行柜员储户现金支票账户事务现金兑换卡余额分行代码卡号密码类型取款额账单。银行网络系统软件信息访问,去笼统后:,.,27,有些名词实际上描述的是其他对象的属性,应该把这些名词从候选类-&-对象中去掉。当然,如果某个性质具有很强的独立性,则应把它作为类而不是作为属性。在ATM系统的例子中,“现金”、“支票”、“取款额”、“账单”、“余额”、“分行代码”、“卡号”、“密码”、“类型”等,实际上都应该作为属性对待。,属性,.,28,自动取款机(ATM)中央计算机分行计算机柜员终端总行分行柜员储户账户事务现金兑换卡现金支票取款额账单余额分行代码卡号密码类型,去属性后:,.,29,一些既可作为名词,又可作为动词的词,应该慎重考虑它们在本问题中的含义,以便正确地决定把它们作为类还是作为类中定义的操作。但是,本身具有属性需独立存在的操作,应该作为类&对象。例如,谈到电话时通常把“拨号”当作动词,当构造电话模型时确实应该把它作为一个操作,而不是一个类。但是,在开发电话的自动记账系统时,“拨号”需要有自己的属性(如日期、时间、受话地点等),因此应该把它作为一个类。,操作,.,30,应该去掉仅和实现有关的候选类-&-对象。在设计和实现阶段,这些类&对象可能是重要的,但在分析阶段过早地考虑它们反而会分散我们的注意力。在ATM系统的例子中,“事务日志”无非是对一系列事务的记录,它的确切表示方式是面向对象设计的议题;“通信链路”在逻辑上是一种联系,在系统实现时它是关联链的物理实现。总之,应该暂时去掉“事务日志”和“通信链路”这两个类,在设计或实现时再考虑它们。,实现,.,31,在ATM系统的例子中,经过初步筛选,剩下下列类&对象:自动取款机(ATM)中央计算机分行计算机柜员终端总行分行柜员储户账户事务现金兑换卡,筛选出正确的类&对象,.,32,10.3.2确定关联两个或多个对象之间的相互依赖、相互作用的关系就是关联。分析确定关联,能促使分析员考虑问题域的边缘情况,有助于发现那些尚未被发现的类&对象。初步确定关联大多数关联可以通过直接提取需求陈述中的动词词组而得出。分析需求陈述,能发现一些在陈述中隐含的关联。分析员应该与用户及领域专家讨论问题域实体间的相互依赖、相互作用关系,根据领域知识再进一步补充一些关联。,.,33,ATM,中央计算机,分行计算机及柜员终端组成网络。总行拥有多台ATM。ATM设在主要街道上。分行提供分行计算机和柜员终端。柜员终端设在分行营业厅及储蓄所内。分行分摊软件开发成本。储户拥有账户。柜员输入针对账户的事务。柜员终端与分行计算机通信。分行计算机处理针对账户的事务。分行计算机维护账户。系统处理并发的访问。ATM与用户交互。ATM与中央计算机交换关于事务的信息。ATM读现金兑换卡。中央计算机确定事务与分行的对应关系。ATM吐出现金。ATM打印账单。,直接提取动词短语得出的关联,.,34,需求陈述中隐含的关联总行由各个分行组成。分行保管账户。总行拥有中央计算机。系统维护事务日志。系统提供必要的安全性。储户拥有现金兑换卡。根据问题域知识得出的关联现金兑换卡访问账户。分行雇用柜员。,.,35,经初步分析得出的关联只能作为候选的关联,还需经过进一步筛选,以去掉不正确的或不必要的关联。筛选时主要根据下述标准删除候选的关联:已删去的类之间的关联与问题无关或应在实现阶段考虑的关联瞬时事件三元关联派生关联,筛选,.,36,如果在分析确定类&对象的过程中已经删掉了某个候选类,则与这个类有关的关联也应该删去,或用其他类重新表达这个关联。以ATM系统为例,由于已经删去了系统、网络、市、街道、成本、软件、事务日志、现金、营业厅、储蓄所、账单等候选类,因此,与这些类有关的下列八个关联也应该删去:ATM、中央计算机、分行计算机及柜员终端组成网络。ATM设在主要街道上。柜员终端设在分行营业厅及储蓄所内。分行分摊软件开发成本。ATM吐出现金。ATM打印账单。系统维护事务日志。系统提供必要的安全性。,已删去的类之间的关联,.,37,应该把处在本问题域之外的关联或与实现密切相关的关联删去。例如,在ATM系统的例子中,“系统处理并发的访问”并没有标明对象之间的新关联,它只不过提醒我们在实现阶段需要使用实现并发访问的算法,以处理并发事务。,与问题无关的或应在实现阶段考虑的关联,.,38,关联应该描述问题域的静态结构,而不应该是一个瞬时事件。以ATM系统为例,“ATM读现金兑换卡”描述了ATM与用户交互周期中的一个动作,它并不是ATM与现金兑换卡之间的固有关系,因此应该删去。类似地,还应该删去“ATM与用户交互”这个候选的关联。,瞬时事件,.,39,三个或三个以上对象之间的关联,大多可以分解为二元关联或用词组描述成限定的关联。“柜员输入针对账户的事务”可以分解成:“柜员输入事务”和“事务修改账户”“分行计算机处理针对账户的事务”可以分解成:“分行保管账户”和“事务修改账户”“ATM与中央计算机交换关于事务的信息”可以分解成:“ATM与中央计算机通信”和“ATM上输入事务”,三元关联,.,40,应该去掉那些可以用其他关联定义的冗余关联。例如,在ATM系统的例子中,“总行拥有多台ATM”实质上是“总行拥有中央计算机”和“ATM与中央计算机通信”这两个关联组合的结果。而“分行计算机维护账户”的实际含义是,“分行保管账户”和“事务修改账户”。,派生关联,.,41,正名应该仔细选择含义更明确的名字作为关联名。分解为了能够适用于不同的关联,必要时应该分解以前确定的类&对象。补充发现了遗漏的关联就应该及时补上。标明阶数应该初步判定各个关联的类型,并粗略地确定关联的阶数。,进一步完善筛选后的关联,.,42,总行由各个分行组成。总行拥有中央计算机。中央计算机与分行通信。ATM与中央计算机通信。分行拥有分行计算机分行拥有柜员终端。柜员终端与分行计算机通信。分行雇用柜员。柜员输入柜员事务。柜员事务输入柜员终端。柜员事务修改账户。分行保管账户。储户拥有账户。储户拥有现金兑换卡。远程事务由现金兑换卡授权。在ATM上输入远程事务。远程事务修改账户。现金兑换卡访问账户。,处理后的关联,.,43,.,44,按问题域而不是用功能分解方法来确定主题。按照使不同主题内的对象相互间依赖和交互最少的原则来确定主题。,10.3.3划分主题,.,46,属性是对象的性质,藉助于属性我们能对类&对象和结构有更深入更具体的认识。注意,在分析阶段不要用属性来表示对象间的关系,使用关联能够表示两个对象间的任何关系,而且把关系表示得更清晰、更醒目。确定属性步骤:分析选择,10.3.4确定属性,.,47,通常,在需求陈述中用名词词组表示属性,例如,“汽车的颜色”或“光标的位置”。不可能在需求陈述中找到所有属性,分析员还必须藉助于领域知识和常识才能分析得出需要的属性。属性的确定既与问题域有关,也和目标系统的任务有关。应该仅考虑与具体应用直接相关的属性,不要考虑那些超出所要解决的问题范围的属性。应该首先找出最重要的属性,以后再逐渐把其余属性增添进去。在分析阶段不要考虑那些纯粹用于实现的属性。,1.分析,.,48,认真考察经初步分析而确定下来的那些属性,从中删掉不正确的或不必要的属性。通常有以下几种常见情况:误把对象当作属性把关联类的属性误作为一般的属性把限定误当成属性误把内部状态当成了属性过于细化存在不一致的属性,2选择,.,定义属性,误把对象当作属性如果一个实体的独立存在是重要的,而不是仅仅为了它的值,那么它是一个对象。例如,老板是一个对象而薪水是一个属性。它们之间的不同常常依赖于不同的应用。例如,在邮政表中,城市可以认为是一个属性,而在人口普查中,城市是一个对象。一个在特定应用中本身具有特性的实体是一个对象。把限定误当成属性如果一个属性的值依赖于特定的上下文,则考虑作为一个限定词来描述。例如,雇员号不是有双份工作的人的唯一的特性;它限定了关联公司雇人。在ATM系统中,“分行代码”、“账号”、“雇员号”等都是限定词。,.,定义属性,把关联类的属性误作为一般的属性如果一个特性依赖于链的存在,那么,它是一个链的属性而不是相关对象。链属性通常在多对多的关联中是相当明显的;由于它们的重数,它们不能附加到任何一个类。链属性在多对一关联中更加灵活,这是由于它们能附加到多个对象而不失信息。链属性在一对一关联中也是灵活的。误把内部状态当成了属性如果一个属性描述的是一个对象的内部状态,它对对象外部是不可见的,则从分析中删去它。,.,定义属性,过于细化省去不影响大多数操作的次要的属性。存在不一致的属性一个与其它属性不同且无关的属性可能是一个可以分为两个不同类的类。一个类应当是简单的和不可分割的。不集中的类是由于在分析过程中过早考虑实现决策引起的。,.,53,一般说来,可以使用两种方式建立继承(泛化)关系:自底向上:抽象出现有类的共同性质泛化出父类,这个过程实质上模拟了人类归纳思维过程。例如,在ATM系统中,“远程事务”和“柜员事务”是类似的(它们都“修改”帐户),可以泛化出父类“事务”;类似地,可以从“ATM”和“柜员终端”(它们都“输入”事务)泛化出父类“输入站”。自顶向下:把现有类细化成更具体的子类,这模拟了人类的演绎思维过程。从应用域中常常能明显看出应该做的自顶向下的具体化工作。例如,带有形容词修饰的名词词组往往暗示了一些具体类。但是,在分析阶段应该避免过度细化。,识别继承关系,.,55,分解“现金兑换卡”类实际上,“现金兑换卡”有两个相对独立的功能。鉴别储户使用ATM的权限的卡:“卡权限”。ATM获得分行代码和卡号等数据的数据载体:“现金兑换卡”。“卡权限”类标志储户访问账户的权限,“现金兑换卡”类是含有分行代码和卡号的数据载体。多张“现金兑换卡”可能对应着相同的“卡权限”“事务”由“更新”组成通常,一个事务包含对账户的若干次更新,这里所说的更新,指的是对账户所做的一个动作(取款、存款或查询)。“更新”虽然代表一个动作,但是它有自己的属性(类型、金额等),应该独立存在,因此应该把它作为类&对象。“事务”和“更新”之间是组合关系。,反复修改,.,56,把“分行”与“分行计算机”合并区分“分行”与“分行计算机”,对于分析这个系统来说,并没有多大意义,为简单起见,应该把它们合并。类似地,应该合并“总行”和“中央计算机”。,.,58,在开发交互式系统时,动态模型起着很重要的作用四个步骤:编写典型交互行为的脚本。从脚本中提取出事件,确定触发每个事件的动作对象以及接受事件的目标对象。排列事件发生的次序,确定每个对象可能有的状态及状态间的转换关系,并用状态图描绘它们。比较各个对象的状态图,检查它们之间的一致性,确保事件之间的匹配。,10.4建立动态模型,.,59,脚本是指系统在某一执行期间内出现的一系列事件。编写脚本的过程,实质上就是分析用户对系统交互行为的要求的过程。步骤:编写正常情况的脚本。考虑特殊情况,例如输入或输出的数据为最大值(或最小值)。考虑出错情况,例如,输入的值为非法值或响应失败。如果可能,应该允许用户“异常中止”或“取消”一个操作。应该提供诸如“帮助”和状态查询之类的在基本交互行为之上的“通用”交互行为。,编写脚本,.,60,ATM请储户插卡;储户插入一张现金兑换卡。ATM接受该卡并读它上面的分行代码和卡号。ATM要求储户输入密码;储户输入自己的密码“1234”等数字。ATM请求总行验证卡号和密码;总行要求“39”号分行核对储户密码,然后通知ATM说这张卡有效。ATM要求储户选择事务类型(取款、转账、查询等);储户选择“取款”。ATM要求储户输入取款额;储户输入“880”。,ATM系统的正常情况脚本_1,.,61,ATM确认取款额在预先规定的限额内,然后要求总行处理这个事务;总行把请求转给分行,该分行成功地处理完这项事务并返回该账户的新余额。ATM吐出现金并请储户拿走这些现金;储户拿走现金。ATM问储户是否继续这项事务;储户回答“不”。ATM打印账单,退出现金兑换卡,请储户拿走它们;储户取走账单和卡。ATM请储户插卡。,ATM系统的正常情况脚本_2,.,62,ATM请储户插卡;储户插入一张现金兑换卡。ATM接受这张卡并读它上面的分行代码和卡号。ATM要求密码;储户误输入“8888”。ATM请求总行验证输入的数字和密码;总行在向有关分行咨询之后拒绝这张卡。ATM显示“密码错”,并请储户重新输入密码;储户输入“1234”;ATM请总行验证后知道这次输入的密码正确。ATM请储户选择事务类型;储户选择“取款”。ATM询问取款额;储户改变主意不想取款了,他敲“取消”键。ATM退出现金兑换卡,并请储户拿走它;储户拿走他的卡。ATM请储户插卡。,ATM系统的异常情况脚本,.,63,用户界面是外在的表现形式。用户对系统的“第一印象”往往从界面得来,用户界面的好坏往往对用户是否喜欢、是否接受一个系统起很重要的作用。因此,在分析阶段也不能完全忽略用户界面。,设想用户界面,.,64,完整、正确的脚本为建立动态模型奠定了必要的基础。但是,用自然语言书写的脚本往往不够简明,而且有时在阅读时会有二义性。为了有助于建立动态模型,通常在画状态图之前先画出事件跟踪图。,画事件跟踪图,.,65,应该仔细分析每个脚本,以便从中提取出所有外部事件。事件包括系统与用户(或外部设备)交互的所有信号、输入、输出、中断、动作等等。对象传递信息的动作也是事件。(储户输入密码,ATM吐出现金)应该把对控制流产生相同效果的那些事件组合在一起作为一类事件,并给它们取一个唯一的名字。(吐出现金,参数值不同-金额)应该把对控制流有不同影响的那些事件区分开来,不要误把它们组合在一起。(账户无效账户有效)应该区分出每类事件的发送对象和接受对象。,确定事件,.,66,是扩充的脚本,是简化的UML顺序图在事件跟踪图中:一条竖线代表一个类&对象每个事件用一条水平的箭头线表示,箭头方向从事件的发送对象指向接受对象。画在最上面的水平箭头线代表最先发生的事件,画在最下面的水平箭头线所代表的事件最晚发生。箭头线之间的间距并没有具体含义,并不表示两个事件之间的精确时间差。,事件跟踪图,.,67,ATM系统正常情况下的事件跟踪图,.,68,考虑事件跟踪图中指向某条竖线的那些箭头线。把这些事件作为状态图中的箭头线,边上标以事件名。两个事件之间的间隔就是一个状态。应该尽量给每个状态取个有意义的名字。从事件跟踪图中当前考虑的竖线射出的箭头线,是这条竖线代表的对象到达某个状态时所做的行为。,从事件跟踪图出发画状态图,.,69,考虑完正常事件之后再考虑边界情况和特殊情况,其中包括在不适当时候发生的事件(例如,系统正在处理某个事务时,用户要求取消该事务)。有时用户(或外部设备)不能做出快速响应,然而某些资源又必须及时收回,于是在一定间隔后就产生了“超时”事件。对用户出错情况往往需要花费很多精力处理,并且会使原来清晰、紧凑的程序结构变得复杂、繁琐,但是,出错处理是不能省略的。,从事件跟踪图出发画状态图,.,70,当状态图覆盖了所有脚本,包含了影响某类对象状态的全部事件时,该类的状态图就构造出来了。利用这张状态图可能会发现一些遗漏的情况。、ATM实例:ATM,柜员终端,总行,分行:主动对象现金卡、事物、账户:被动对象,不发送事件储户和柜员外部因素,系统内无需考虑,从事件跟踪图出发画状态图,.,71,.,72,.,73,.,74,各个类的状态图通过共享事件合并起来,构成了系统的动态模型。在完成了每个具有重要交互行为的类的状态图之后,应该检查系统级的完整性和一致性。一般说来,每个事件都应该既有发送对象又有接受对象。对于没有前驱或没有后继的状态应该着重审查,如果这个状态既不是交互序列的起点也不是终点,则发现了一个错误。,审查动态模型,.,75,功能模型表明了系统中数据之间的依赖关系,以及有关的数据处理功能,它由一组数据流图组成。处理功能可以用IPO图(或IPO表)、伪码等多种方式进一步描述。通常在建立了对象模型和动态模型之后再建立功能模型。,10.5功能模型,.,76,基本系统模型由若干个数据源点/终点,及一个处理框组成,这个处理框代表了系统加工、变换数据的整体功能。由数据源点输入的数据和输出到数据终点的数据是系统与外部世界之间的交互事件的参数。,画出基本系统模型图,.,77,.,78,把基本系统模型中单一的处理分解成若干个处理框,以描述系统加工、变换处理的基本功能,就得到功能级数据流图。,画出功能级数据流图,.,79,.,80,把数据流图分解细化到一定程度之后,就应该描述图中各个处理框的功能。描述既可以是说明性的,也可以是过程性的。说明性描述规定了输入值和输出值之间的关系,以及输出值应遵循的规律。过程性描述则通过算法说明“做什么”。,描述处理框功能,.,81,功能描述,.,82,“对象”是由描述其属性的数据,及可以对这些数据施加的操作(即服务),封装在一起构成的独立单元。因此,为建立完整的对象模型,既要确定类中应该定义的属性,又要确定类中应该定义的服务。,10.6定义服务,.,83,在分析阶段可以认为,类中定义的每个属性都是可以访问的,也就是说,假设在每个类中都定义了读、写该类每个属性的操作。但是,通常无需在对象图中显式表示这些常规操作。,常规行为,.,84,状态图中发往对象的事件也就是该对象接收到的消息,因此该对象必须有由消息选择符指定的操作,这个操作修改对象状态(即属性值)并启动相应的服务。所启动的这些服务通常就是接受事件的对象在相应状态的行为。,从事件导出的操作,.,85,数据流图中的每个处理框都与一个对象(也可能是若干个对象)上的操作相对应。应该仔细对照状态图和数据流图,以便更正确地确定对象应该提供的服务。,与数据流图中处理框对应的操作,.,86,应该尽量利用继承机制以减少所需定义的服务数目。只要不违背领域知识和常识,就尽量抽取出相似类的公共属性和操作,以建立这些类的新父类,并在类等级的不同层次中正确地定义各个服务。,利用继承减少冗余操作,.,试题举例(2007年下半年软件设计师下午试题三),试题三(共15分)【说明】已知某唱片播放器不仅可以播放唱片,而且可以连接电脑并把电脑中的歌曲刻录到唱片上(同步歌曲)。连接电脑的过程中还可自动完成充电。关于唱片,还有以下描述信息:1每首歌曲的描述信息包括:歌曲的名字、谱写这首歌曲的艺术家以及演奏这首歌曲的艺术家。只有两首歌曲的这三部分信息完全相同时,才认为它们是同一首歌曲。艺术家可能是一名歌手或一支由2名或2名以上的歌手所组成的乐队。一名歌手可以不属于任何乐队,也可以属于一个或多个乐队。,.,(2007年下半年软件设计师下午试题三),2每张唱片由多条音轨构成;一条音轨中只包含一首歌曲或为空,一首歌曲可分布在多条音轨上;同一首歌曲在一张唱片中最多只能出现一次。3.每条音轨都有一个开始位置和持续时间。一张唱片上音轨的次序是非常重要的,因此对于任意一条音轨,播放器需要准确地知道,它的下一条音轨和上一条音轨是什么(如果存在的话)。根据上述描述,采用面向对象方法对其进行分析与设计,得到了如表3-1所示的类列表、如图3-1所示的初始类图以及如图3-2所示的描述播放器行为的UML状态图。,.,(2007年下半年软件设计师下午试题三),表3-1类列表,.,(2007年下半年软件设计师下午试题三),图3-1初始类图,.,.,【问题4】根据图所示的播放器行为UML状态图,给出从“关闭”状态到“播放”状态所经过的最短事件序列(假设电池一开始就是有电的)。,.,2008年上半年软考下午试题,.,94,.,.,.,97,.,【问题1】根据说明中的描述,使用上页表给出的用例名称,给出图(a)中U1、U2和U3所对应的用例。【问题2】根据说明中的描述,使用上页表给出的类的名称,给出图(b)中的AD所对应的类。【问题3】根据说明中的描述,使用上页表给出的状态名称,给出图(c)中S1S4所对应的状态。【问题4】简要解释图(a)中用例U1和U3之间的extend关系的内涵。,.,2007年软件设计师上半年试题,某图书管理系统的主要功能如下:1图书管理系统的资源目录中记录着所有可供读者借阅的资源,每项资源都有一个唯一的索引号。系统需登记每项资源的名称、出版时间和资源状态(可借阅或已借出)。2资源可以分为两类:图书和唱片。对于图书,系统还需登记作者和页数;对于唱片,还需登记演唱者和介质类型(CD或者磁带)。3读者信息保存在图书管理系统的读者信息数据库中,记录的信息包括:读者的识别码和读者姓名。系统为每个读者创建了一个借书记录文件,用来保存读者所借资源的相关信息。现采用面向对象方法开发该图书管理系统。识别类是面向对象分析的第一步。比较常用的识别类的方法是寻找问题描述中的名词,再根据相关规则从这些名词中删除不可能成为类的名词,最终得到构成该系统的类。表3-1给出了说明中出现的所有名词。,.,.,问题1(3分)表3-2所给出的类并不完整,根据说明和表3-1,将图3-1中的(a)(c)处补充完整。问题2(6分)根据说明中的描述,给出图3-1中的类CatalogItem以及(b)、(c)处所对应的类的关键属性(使用表3-1中给出的词汇),其中,CatalogItem有4个关键属性;(b)、(c)处对应的类各有2个关键属性。问题3(6分)识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,完成图3-1中的(1)(6)。,.,2006年软件设计师上半年试题,某客户信息管理系统中保存着两类客户的信息:(1)个人客户。对于这类客户,系统保存了其客户标识(由系统生成)和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论