第10章面向对象的分析_第1页
第10章面向对象的分析_第2页
第10章面向对象的分析_第3页
第10章面向对象的分析_第4页
第10章面向对象的分析_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章

面向对象的分析

2本章目标掌握需求陈述的书写。掌握对象模型的建立。掌握动态模型的建立。掌握功能模型的建立。不管采用哪种方法开发软件,分析的过程都是提取系统需求的过程。分析工作主要包括3项内容,这就是理解、表达和验证。3410.1面向对象的分析过程面向对象的分析,就是抽取和整理用户需求并建立问题域精确模型的过程。〔1〕系统分析员要对需求文档进行分析。【目的】:发现和改正需求文档中的二义性和不一致性,弥补缺乏,从而使需求文档更加完整、更加准确。〔2〕系统分析人员应该深入理解用户需求,识别出问题域内的对象,并分析其相互关系,抽象出目标系统应该完成的需求任务,并用5面向对象分析模型准确地表示出来〔用面向对象的观点建立对象模型、动态模型和功能模型〕〔3〕需求评审。通过用户、领域专家、系统分析员和系统设计人员的评审。并进行反复修改后,确定需求规格说明。6101.1面向对象分析的三个模型与五个层次面向对象分析的3个模型:面向对象的建模是面向对象分析的关键,面向对象建模得到的模型包含系统的3个要素:静态结构〔对象模型〕、交互次序〔动态模型〕、数据变换〔功能模型〕。〔1〕对象模型描述了系统的静态结构,是最根底的、最重要的模型。〔2〕动态模型描述了系统的交互次序,当问7题涉及交互作用和时序时,动态模型是重点。〔3〕功能模型描述了系统的数据变换,解决运算量很大的问题时,功能模型非常重要。8面向对象分析的5个层次类-&-对象层、识别结构层、主题层、属性层、效劳层,如图10.1所示。9〔1〕类-&-对象层:类和对象是数据及其处理的抽象,它反映了系统保存有关信息和与现实世界交互的能力。〔2〕主题层:是指导模型的读者〔包括系统分析员、软件设计人员、领域专家、用户等〕理解大型、复杂模型的一种机制。〔3〕结构层:结构表示问题域的复杂性,类的成员结构反映了一般-特殊关系,整体-局部结构反映了整体-局部的关系。〔4〕属性层:属性是数据的元素,用来描述对象或分类结构的实例,可在图中给出并在对象的存储中指定,即在给出对象定义的同时指定属性。10〔5〕效劳层:效劳是接收到消息后必须执行的一些处理,可在图上标明它并在对象的存储中指定,即在给出对象定义的同时定义效劳。115个层次对应的5个活动:面向对象模型的5个层次对应着分析建模的5个主要活动。这5个活动可以同时〔并行〕处理;可以从较高抽象层转移到较低的具体层,然后再返回到较高抽象层继续处理;当系统分析员在确定类-&-对象的同时,想到该类的效劳,那么可以先确定效劳后,再返回去继续寻找类-&-对象;没有必要遵循自顶向下,逐步求精的原那么。12面向对象的分析流程一般情况下,面向对象的分析过程可按照以下流程进行:确定类-&-对象、识别结构、识别主题、定义属性、建立动态模型、建立功能模型、定义服务〔方法〕。但是,对于大型的、复杂的问题,不可能严格按照上面的流程进行,需要反复屡次进行寻找、确定、识别、建立和定义来构造模型。也就是说,先构造出模型的子集,然后再逐渐扩充,直到完全、充分地理解了整个问题,才能最终构造出符合问题域需求的正确的、准确的、完整的目标系统模型。1310.2

需求陈述需求陈述也称为问题陈述或需求文档。陈述需求是开发任何一个系统的首要任务。需求陈述应该说明“做什么〞,而不是“怎么做〞。它应该描述用户的需求而不是提出解决问题的方法。应该指出哪些是系统必要的性质,哪些是任选的性质。通常,需求陈述的内容包括:问题范围、功能需求、性能需求,应用环境及假设条件等。14【例1】以自动取款机ATM为例,进行需求陈述。见教材234页图10.2所示。1510.23建立对象模型

对象模型描述了系统的数据结构,它是3个模型中最关键的一个模型。对象模型的作用是描述系统的静态结构,包括构成系统的类和对象,它们的属性和操作,以及它们之间的联系。10.3.1确定类和对象1.找出候选的类与对象对象是问题域中有意义的事物的抽象,既可以是物理实体,也可能是抽象概念。16【例2】以ATM系统为例说明非正式的过程。仔细阅读节给出的需求陈述,从陈述中找出以下名词作为类与对象的初步的候选者。银行、自动取款机〔ATM〕系统、中央计算机、分行计算机、柜员终端、网络、总行、分行、软件、本钱、市、街道、营业厅、储蓄所、柜员、储户、现金、支票、账户、事务、现金兑换卡、余额、磁卡、分行代码、卡号、用户、副本、信息、密码、类型、取款额、账单以及访问等。172.筛选出正确的类与对象非正式的分析仅仅能够帮助找到一些候选的类与对象,接下来应该严格考察每个候选的类与对象,从中去掉那些不正确的或不要的,仅保存确实应该记录其信息或需要其提供效劳的那些对象。筛选时需要依靠以下准那么进行:〔1〕剔除冗余如果两个类表达了同样的信息,保存更富于描述力的名称。例如,“储户〞与“用户〞,“现金兑换卡〞与“磁卡〞、〞副本“分别描述了相同的信息,应该将〞用户“、〞磁卡“、〞副本“等冗余的类去掉。18〔2〕无关原那么删除与问题无关的类。如,ATM和柜员机终端放置的地点与本软件的关系不大,因此,去掉候选类〞本钱“、〞市“、〞营业厅“、〞储蓄所“。〔3〕笼统原那么去掉一些笼统的、模糊的类。如〞银行“实际指总行或分行,〞访问“实际指事务,〞信息“的具体内容在需求陈述中随后就指明了,应该去掉〞银行“、〞网络“、〞系统“、〞软件“、〞信息“和〞访问“等候选类。〔3〕属性准那么有些名词只是其它对象的属性的描述,应该去掉。19例如,〞现金“、〞支票“、〞取款额“、〞账单“、〞余额“、〞分行代码“、〞卡号“、〞密码“和〞类型“等。〔5〕操作准那么当遇到一些既可以作为名词,又可作为动词的词时,应根据他们在问题中的含义来决定他们是作为类还是作为类中的操作。如,通常把〞拨号“当作动词,当构造〞“模型时,确实应该把它作为一个操作,而不是一个类。〔6〕实现准那么要去掉仅和实现有关的候选的类与对象。2010.3.2

确定关联

两个或多个对象之间的相互依赖、相互作用的关系就是关联。一般情况下,在初步分析问题域中的类与对象确定之后,就可以分析、确定类与对象之间存在的关联关系了。1.初步确定关联通常,关联关系在需求陈述中使用描述性动词或动词组来表示。通过分析需求陈述,首先,直接提取需求陈述中的动词组来初步确定多数的关联。然后,挖掘一些隐含的关联。21最后,根据问题域实体间的相互依赖、相互作用的关系,分析员还应该与用户和领域专家讨论,作进一步的补充。【例3】ATM系统为例,经初步确定的关联有:见教材238页。2.筛选关联〔1〕删除已经去掉的类之间的关联如果已经删除掉了某个候选类,那么与这个类有关的关联也应该删掉,或用其它类重新表达这个关联例如,在ATM系统中,由于已经删掉了〞系统“、〞网络“、〞事务“、〞日志“、〞现金“、〞营业厅“、〞储蓄所22和〞账单“等候选类,因此与这些关联类相关的如下8个关联也应该删掉。见教材239页。〔2〕删除与问题无关的实现阶段的关联例如,在ATM系统中,〞系统处理并发的访问“是在实现阶段需要使用实现并发现访问的算法,以处理并发事务的关联,为此,应删去它。〔3〕删除瞬时事件关联应该描述问题域的静态结构,而不应该是一个瞬时事件,应该删除瞬时事件的关联。例如,在ATM系统中,〞ATM读现金兑换卡〞描述了ATM与用户交互周期中的一个动作,它并不是ATM与现金兑换卡之间的固有关系,应该删去。23〔4〕多元关联分解多元关联是3个或3个以上对象之间的关联,多数可以分解为二元关联或用词组描述成限定的关联。例如,在ATM系统中,“柜员输入账户的事务〞可以分解成“柜员输入事务〞和“事务修改账户〞两个二元关联。〔5〕派生关联当有的关联可以用已有的、必要的关联来定义时,应该去掉这些冗余的关联。243.完善关联〔1〕更正名字〔2〕分解〔3〕增补〔4〕标明重数见教材241页图10-3所示。图10.3ATM系统原始的类图252610.3.3划分主题主题是一种指导开发者或用户研究大型分组模型的机制。在初步面向对象分析的根底上,主题有助于分解大型工程以便建立工作小组,分组承担任务。主题所提供的机制可控制一个用户必须同时考虑模型数目。同时它还可以给出面向对象分析模型的总体概况。主题所依据的原理是整体-局部关系的扩充。ATM系统划分为“总行〞、“分行〞、和“ATM〞三个主题。2710.3.4确定属性属性是描述对象或分类结构实例的数据单元,确定属性分为分析和选择两个步骤。通常,在需求陈述中用名词词组表示属性,例如,“汽车的颜色〞,往往用形容词表示可枚举的具体属性,例如“黄色的〞。但是,不可能在需求陈述中找到所有属性,分析员还必须借助于领域知识和常识才能分析得出所需要的属性。属性对问题域的根本结构影响很小。随着时间的推移,问题域中的类始终保持稳定,属性却可能改变了,相应地,类中方法的复杂程度也将改变。图10.3ATM系统对象模型中的属性282910.3.5识别结构确定了类中应该定义的属性后,就可以利用继承机制共享公共性质,并对系统中众多的类加以组织。可用两种方法来建立继承〔分类〕关系。〔1〕自底向上识别自底向上识别是抽象出现有类的共同性质来一般化成父类,找出有相似的属性、操作和关联的类来发现继承。如,ATM中“远程事务〞和“柜员事务〞是类似的,可以一般化为“事务〞,即为父类。30〔2〕自顶向下识别自顶向下识别是把现有的类细化为更具体的子类,这模拟了人类的演绎思维过程。从应用域中常常能明显看出应该做的自顶向下的具体化工作。ATM中“远程事务〞和“柜员事务〞是“事务〞,即为父类的具体化的子类。见教材245页图10-5所示。图10.5带有继承关系的ATM对象模型31325.2.6优化对象模型事实上,建立起来的对象模型很难一次性得到满意的效果。在建模的任何一个步骤中,如果发现了模型的缺陷,都必须返回到前期阶段进行修改。经过屡次反复修改,才能逐步完善得到完全正确的对象模型。下面实例以ATM系统为例,优化对象模型。一般有下述几种方法。1.删除冗余的类如果某类中缺少属性、操作和关联,那么可以删除该类。332.分解类“现金兑换卡〞有两个相对独立的功能,它既有鉴别储户使用卡的ATM权限功能,又是ATM获得分行代码和卡号等数据的数据载体。因此,将“现金兑换卡〞类分解为“卡权限〞和“现金兑换卡〞两类,可以使得每个类的功能更单一。3.补充关联4.合并类例如“分行〞和“分行计算机〞虽然名字不同,但他们所完成的任务以及与其它类的关系也相同,可将这个类合并成一个类“分行〞。345.3建立动态模型建立动态模型通常情况下有下面几个步骤。〔1〕编写典型交互行为的脚本。虽然脚本中不可能包括每个偶然事件,但是,至少必须保证不遗漏常见的交互行为。〔2〕从脚本中提取出事件,确定触发每个事件的动作对象以及接受事件的目标对象。〔3〕排列事件发生的次序,确定每个对象可能有的状态及状态间的转换关系,并用状态图描绘它们。35〔4〕比较各个不同对象的状态图,检查对象之间的一致性,确保事件之间的匹配。5.3.1编写脚本在建立动态模型的过程中,脚本是指系统在某个执行期间内出现的一系列事件。脚本描述用户或其它外部设备与目标系统之间的一个或多噶典型的交互过程,以便对目标系统的行为有更具体的认识。编写脚本的目的,是保证不遗漏重要的交互步骤,它有助于确保整个交互过程的正确性和清晰性。365.3.2设想用户界面软件开发人员往往快速地建立起用户界面的原型,供用户试用和评价。图5-7是初步设想的ATM界面格式。37385.3.3画事件跟踪图1.确定事件从写好的脚本中提取所有外部事件,应注意遗漏异常事件和出错事件。在系统中区分出每类事件的发送对象和接收对象。2.画出事件跟踪图事件跟踪图中,一个类与对象用一条竖线表示,每个事件用一条水平的箭头线表示,箭头从事件的发送对象出发指向接收对象。事件按照先后顺序排列,画在最上面的水平箭头线代表最先发生的事件,画在最下面的水平箭头线代表的事件最后发生39箭头线之间的距离并不表示两个事件之间的精确时间差,箭头线的相对位置仅表示事件发生的先后次序。如5-8所示是ATM系统正常情况下的事件跟踪图。5.3.4画状态图状态图描绘事件与对象状态的关系,当对象接收了一个事件以后,它的下一个状态取决于当前状态及所接收的事件。由事件引起的状态的改变被称为“转换〞。如果一个事件并不引起当前状态发生转换,那么可忽略这个事件。1.确定状态图中的事件、类与对象40通常,用一张状态图描绘一个类的对象的行为,它确定了由事件序列引出的状态序列。并非任何一个类都需要有一张状态图描绘它的行为。2.状态图表示首先考虑影响一类对象的事件,也就是事件跟踪图中执行某条竖线的那些箭头,把这些事件作为状态图中的有向边即箭头线,边

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论