《面向对象分析优秀PPT.ppt》由会员分享,可在线阅读,更多相关《面向对象分析优秀PPT.ppt(96页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象分析第一页,本课件共有96页面向对象分析(OOA)的关键是识别出问题域内的类与对象,并分析它们相互间的关系,最终建立起问题域的简洁、精确、可理解的正确模型。在用面向对象观点建立起的3种模型中,对对象象模型模型是最基本、最重要、最核心的。第二页,本课件共有96页10.1 面向对象分析的基本过程 10.1.1 概述面向对象分析:抽取和整理用户需求并建立问题域精确模型的过程。面向对象分析过程从分析陈述用户需求的文件开始。可能由用户单方面写出需求陈述,也可能由系统分析员配合用户,共同写出需求陈述。需求陈述通常是不完整、不准确的,而且往往是非正式的。很难准确很难准确描述描述第三页,本课件共有96
2、页10.1.1 概述通过分析,可以发现和改正原始陈述中的二义性和不一致性,补充遗漏的内容,从而使需求陈述更更完整、更准确完整、更准确。因此,需求陈述不是一成不变的,它是细化和完善实际需求的基础。快速建立的原型系统,有助于分析员和用户之间的交流和理解,从而能更正确地提炼出用户的需求。接着,系统分析员深入理解用户需求,抽象出目标系统的本质属性,并用模型模型准确地表示出来。迭代迭代分析模型分析模型第四页,本课件共有96页10.1.1 概述建模过程中分类分类工作往往有很大难度。它必须反映出一定深度的领领域域知知识识,必须有领域专家的密切配合才能完成。重用技术重用技术是经常使用的。面向对象建模得到的模型
3、即静静态态结结构构(对象模型)、交交互互次次序序(动态模型)和数数据据变变换换(功能模型)。第五页,本课件共有96页10.1.2 3个子模型与5个层次不同问题中这3个子模型的重要程度也不同。解决任何一个问题,都需要从客观世界实体及实体间相互关系抽象出极有价值的对象模型;当问题涉及交互作用和时序时,动态模型是重要的;解决运算量很大的问题,则涉及重要的功能模型。动态模型和功能模型中都包含了对象模型中的操作(即服务或方法)。第六页,本课件共有96页10.1.2 3个子模型与5个层次复杂问题的对象模型通常由5个层次组成:主主题层、类与对象层、结构层、属性层和服务层。题层、类与对象层、结构层、属性层和服
4、务层。第七页,本课件共有96页10.1.2 3个子模型与5个层次主题是指导读者(包括系统分析员、软件设计人员、领域专家、管理人员、用户等,泛指所有需要读懂系统模型的人)理解大型、复杂模型的一种机制。通过划分主题把一个大型、复杂的对象模型分解成几个不同的概念范畴。第八页,本课件共有96页10.1.2 3个子模型与5个层次5个层次对应着在面向对象分析过程中建立对象模型的5项主要活动:找出类与对象;识别结构;识别主题;定义属性;定义服务。在进行面向对象分析时并不需要严格遵守自顶向下的原则。第九页,本课件共有96页10.1.2 3个子模型与5个层次在完整地定定义义每每个个类类中中的的服服务务之之前前,
5、需要先先建建立立起起动动态态模模型型和和功功能能模模型型,通过对这两种模型的研究,能够更正确更合理地确定每个类应该提供哪些服务。第十页,本课件共有96页10.1.2 3个子模型与5个层次在概念上可以认为,面向对象分析大体上按照下列顺序进行:Step1:Step1:寻找类与对象寻找类与对象Step2:Step2:识别结构识别结构Step3:Step3:识别主题识别主题Step4:Step4:定义属性定义属性Step5:Step5:建立动态模型建立动态模型Step6:Step6:建立功能模型建立功能模型Step7:Step7:定义服务。定义服务。当然,上述过程要当然,上述过程要多次迭代多次迭代得以
6、实现。得以实现。第十一页,本课件共有96页10.2 需求陈述 10.2.1 书写要点需求陈述的内容包括:问题范围,功能需求,性能需求,应用环境及假设条件等。它描述用户的需求而不是提出解决问题的方法。应该指出哪些是系统必要的必要的,哪些是任选的任选的。应该避免对设计策略施加约束,也不要描述系统的内部结构。对系统性能及系统与外界环境交互协议的描述,是合适的需求。从实际出发,迭代完成。第十二页,本课件共有96页10.2.2 例子某银行拟开发一个自动取款机系统,它是一个由自动取款机、中央计算机、分行计算机及柜员终端组成的网络系统。ATM和中央计算机由总行投资购买。总行拥有多台ATM,分别设在全市各主要
7、街道上。分行负责提供分行计算机和柜员终端。柜员终端设在分行营业厅及分行下属的各个储蓄所内。该系统的软件开发成本由各个分行分摊。第十三页,本课件共有96页10.2.2 例子第十四页,本课件共有96页10.2.2 例子银行柜员使用柜员终端处理储户提交的储蓄事务。储户可以用现金或支票向自己拥有的某个账户内存款或开新账户。储户也可以从自己的账户中取款。通常,一个储户可能拥有多个账户。柜员负责把储户提交的存款或取款事务输进柜员终端,接收储户交来的现金或支票,或付给储户现金。柜员终端与相应的分行计算机通信,分行计算机具体处理针对某个账户的事务并且维护账户。第十五页,本课件共有96页10.2.2 例子拥有银
8、行账户的储户有权申请领取现金兑换卡。使用现金兑换卡可以通过ATM访问自己的账户。目前仅限于用现金兑换卡在ATM上提取现金(即取款),或查询有关自己账户的信息(例如,某个指定账户上的余额)。将来可能还要求使用ATM办理转账、存款等事务。第十六页,本课件共有96页10.2.2 例子所谓现金兑换卡就是一张特制的磁卡,上面有分行代码和卡号。分行代码惟一标识总行下属的一个分行,卡号确定了这张卡可以访问哪些账户。通常,一张卡可以访问储户的若干个账户,但是不一定能访问这个储户的全部账户。每张现金兑换卡仅属于一个储户所有,但是,同一张卡可能有多个副本,因此,必须考虑同时在若干台ATM上使用同样的现金兑换卡的可
9、能性。也就是说,系统应该能够处理并发的访问。第十七页,本课件共有96页10.2.2 例子当用户把现金兑换卡插入ATM之后,ATM就与用户交互,以获取有关这次事务的信息,并与中央计算机交换关于事务的信息。首先,ATM要求用户输入密码,接下来ATM把从这张卡上读到的信息以及用户输入的密码传给中央计算机,请求中央计算机核对这些信息并处理这次事务。中央计算机根据卡上的分行代码确定这次事务与分行的对应关系,并且委托相应的分行计算机验证用户密码。如果用户输入的密码是正确的,ATM就要求用户选择事务类型(取款、查询等)。当用户选择取款时,ATM请求用户输入取款额。最后,ATM从现金出口吐出现金,并且打印出账
10、单交给用户。第十八页,本课件共有96页10.3 建立对象模型面向对象分析首首先先建立问题域的对对象象模模型型。它表示了目标系统的静态数据结构。需求陈述、应用领域的专业知识以及关于客观世界的常识,是建立对象模型时的主要信息来源。第十九页,本课件共有96页10.3 建立对象模型对象模型通常有5个层次。典型的工作步骤是:Step1:确定对象类和关联。对于大型复杂问题还要进一步划分出若干个主题;Step2:给类和关联增添属性。以进一步描述它们;Step3:设计继承关系。利用适当的继承关系进一步合并和组织类。Step4:设计类中的操作。对类中操作的最后确定。第二十页,本课件共有96页10.3.1 确定类
11、与对象类与对象是客观存在的。系统分析员的首要任务就是所有候候选选的的类类与与对对象象,然后从中筛选掉不正确的或不必要的。1.1.找出候选的类与对象找出候选的类与对象对象是问题域中有意义的事物的抽象,它们既可能是物理实体,也可能是抽象概念。具体地说,大多数客观事物可分为下述5类:第二十一页,本课件共有96页10.3.1 确定类与对象(1)可感知的物理实体,例如,飞机、汽车、书、房屋等。(2)人或组织的角色,例如,医生、教师、雇主、雇员、计算机系、财务处等。(3)应该记忆的事件,例如,飞行、演出、访问、交通事故等。(4)两个或多个对象的相互作用,通常具有交易或接触的性质,例如,购买、纳税、结婚等。
12、(5)需要说明的概念,例如,政策、保险政策、版权法等。第二十二页,本课件共有96页10.3.1 确定类与对象另一种非正式分析方法以用自然语言书写的需求陈述为依据。把陈述中的名词名词作为类与对象的候选者候选者 把形容词形容词作为确定属性属性的线索 把动词动词作为服务服务的候选者。第二十三页,本课件共有96页10.3.1 确定类与对象银行,自动取款机(ATM),系统,中央计算机,分行计算机,柜员终端,网络,总行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,信息,密码,类型,取款额,账单,访问。分析员还应该根据领
13、域知识或常识进一步把隐含的类与对象提取出来。例如,在ATM系统的需求陈述中提取“通信链路”和“事务日志”。第二十四页,本课件共有96页10.3.1 确定类与对象2.2.筛选出正确的类与对象筛选出正确的类与对象非正式分析仅仅找到一些候选的类与对象,下面应该严格考察每个候选对象,从中去掉不正确的或不必要的,仅保留确实应该记录其信息或需要其提供服务的那些对象。筛选时主要依据下列标准,删除不正确或不必要的类与对象:第二十五页,本课件共有96页10.3.1 确定类与对象(1)(1)冗余冗余如果两个类表达了同样的信息,则应该保保留留在在此此问问题题域中最富于描述力的名称域中最富于描述力的名称。以ATM系统
14、为例,上面用非正式分析法得出了34个候选的类,其中储户与用户,现金兑换卡与磁卡及副本分别描述了相同的两类信息,因此,应该去掉“用户”、“磁卡”、“副本”等冗余的类,仅保留“储户”和“现金兑换卡”这两个类。第二十六页,本课件共有96页10.3.1 确定类与对象(2)(2)无关无关现实世界中存在许多对象,不能把它们都纳入到系统中去,仅需要把与本本问问题题密密切切相相关关的类与对象放进目标系统中。以ATM系统为例,这个系统并不处理分摊软件开发成本的问题,而且ATM和柜员终端放置的地点与本软件的关系也不大。因此,应该去掉候选类“成本”、“市”、“街道”、“营业厅”和“储蓄所”。第二十七页,本课件共有9
15、6页10.3.1 确定类与对象(3)(3)笼统笼统在需求陈述中常常使用一些笼笼统统的的、泛泛指指的的名名词词,要么系统无须记忆有关它们的信息,要么在需求陈述中有更明确更具体的名词对应它们所暗示的事务。以ATM系统为例,“银行”实际指总行或分行,“访问”在这里实际指事务,“信息”的具体内容在需求陈述中随后就指明了。此外还有一些笼统含糊的名词。总之,在本例中应该去掉“银行”、“网络”、“系统”、“软件”、“信息”、“访问”等候选类。第二十八页,本课件共有96页10.3.1 确定类与对象(4)(4)属性属性在需求陈述中有有些些名名词词实实际际上上描描述述的的是是其其他他对对象的属性象的属性。在ATM
16、系统的例子中,“现金”、“支票”、“取款额”、“账单”、“余额”、“分行代码”、“卡号”、“密码”、“类型”等,实际上都应该作为属性对待。第二十九页,本课件共有96页10.3.1 确定类与对象(5)(5)操作操作在需求陈述中有时可能使用一些既既可可作作为为名名词词,又又可作为动词的词可作为动词的词。例如,谈到电话时通常把“拨号”当作动词,当构造电话模型时确实应该把它作为一个操作,而不是一个类。但是,在开发电话的自动记账系统时,“拨号”需要有自己的属性(例如日期、时间、受话地点等),因此应该把它作为一个类。第三十页,本课件共有96页10.3.1 确定类与对象(6)(6)实现实现在分析阶段不应该过
17、早地考虑怎样实现目标系统。因此,应该去掉和实现有关的候选的类与对象。去掉和实现有关的候选的类与对象。在ATM系统的例子中,“事务日志”无非是对一系列事务的记录,它的确切表示方式是面向对象设计的议题;“通信链路”在逻辑上是一种联系,在系统实现时它是关联类的物理实现。总之,应该暂时去掉“事务日志”和“通信链路”这两个类,在设计或实现时再考虑它们。第三十一页,本课件共有96页10.3.1 确定类与对象综上所述,在ATM系统的例子中,经过初步筛选,剩下下列类与对象:ATM、中央计算机、分行计算机、柜员终端、总行、分行、柜员、储户、账户、事务、现金兑换卡。第三十二页,本课件共有96页10.3.1 确定类
18、与对象两个或多个对象之间的相相互互依依赖赖、相相互互作作用用的的关关系系就是关联。分析确定关联,能促使分析员考虑问题域的边缘情况,有助于发现那些尚未被发现的类与对象。在分析确定关联的过程中,不必花过多的精力去区分关联和聚集。第三十三页,本课件共有96页10.3.1 确定类与对象1.1.初步确定关联初步确定关联需求陈述中的描述性动词或动词词组,通常表示关联。以ATM系统为例,经过分析初步确定出下列关联:第三十四页,本课件共有96页10.3.1 确定类与对象(1)直接提取动词短语动词短语得出的关联ATM、中央计算机、分行计算机及柜员终端组成网络。总行拥有多台ATM。ATM设在主要街道上。分行提供分
19、行计算机和柜员终端。柜员终端设在分行营业厅及储蓄所内。分行分摊软件开发成本。储户拥有账户。分行计算机处理针对账户的事务。分行计算机维护账户。第三十五页,本课件共有96页10.3.1 确定类与对象柜员终端与分行计算机通信。柜员输入针对账户的事务。ATM与中央计算机交换关于事务的信息。中央计算机确定事务与分行的对应关系。ATM读现金兑换卡。ATM与用户交互。ATM吐出现金。ATM打印账单。系统处理并发的访问。第三十六页,本课件共有96页10.3.1 确定类与对象(2)需求陈述中隐含的关联隐含的关联总行由各个分行组成。分行保管账户。总行拥有中央计算机。系统维护事务日志。系统提供必要的安全性。储户拥有
20、现金兑换卡。(3)根据问题域知识问题域知识得出的关联现金兑换卡访问账户。分行雇用柜员。第三十七页,本课件共有96页10.3.1 确定类与对象2.2.筛选筛选经初步分析得出的关联只能作为候选的关联,还需经过进一步筛选,主要依据如下:(1)(1)已删去的类之间的关联已删去的类之间的关联如果已经删掉的候选类,则与这个类有关的关联也应该删去,或用其他类重新表达这个关联。由于已经删去了“系统”、“网络”、“市”、“街道”、“成本”、“软件”、“事务日志”、“现金”、“营业厅”、“储蓄所”、“账单”等候选类,因此,与这些类有关的下列8个关联也应该删去:第三十八页,本课件共有96页10.3.1 确定类与对象
21、 ATM、中央计算机、分行计算机及柜员终端组成网络。ATM设在主要街道上。分行分摊软件开发成本。系统提供必要的安全性。系统维护事务日志。ATM吐出现金。ATM打印账单。柜员终端设在分行营业厅及储蓄所内。第三十九页,本课件共有96页10.3.1 确定类与对象(2)(2)与问题无关的或应在实现阶段考虑的关联与问题无关的或应在实现阶段考虑的关联应该把处在本问题域之外的关联或与实现密切相关的关联删去。例如,在ATM系统的例子中,“系统处理并发的访问”并没有标明对象之间的新关联,它只不过提醒我们在实现阶段需要使用实现并发访问的算法,以处理并发事务。第四十页,本课件共有96页10.3.1 确定类与对象(3
22、)(3)瞬时事件瞬时事件关联应该描述问题域的静态结构,而不应该是一个瞬时事件。以ATM系统为例,“ATM读现金兑换卡”描述了ATM与用户交互周期中的一个动作,它并不是ATM与现金兑换卡之间的固有关系,因此应该删去。类似地,还应该删去“ATM与用户交互”。第四十一页,本课件共有96页10.3.1 确定类与对象如果用动作表述的需求隐含了问题域的某种基本结构,则应该用适当的动词词组重新表示这个关联。例如,在ATM系统的需求陈述中,“中央计算机确定事务与分行的对应关系”隐含了结构上“中央计算机与分行通信”的关系。第四十二页,本课件共有96页10.3.1 确定类与对象(4)(4)三元关联三元关联三个或三
23、个以上对象之间的关联,大多可以分解为二二元关联或用词组描述成限定的关联元关联或用词组描述成限定的关联。“柜员输入针对账户的事务”可以分解成“柜员输入事务”和“事务修改账户”这样两个二元关联。而“分行计算机处理针对账户的事务”也可以做类似的分解。“ATM与中央计算机交换关于事务的信息”这个候选的关联,实际上隐含了“ATM与中央计算机通信”和“在ATM上输入事务”这两个二元关联。第四十三页,本课件共有96页10.3.1 确定类与对象(5)(5)派生关联派生关联应该去掉那些可以用其他关联定义的冗余关联。例如,在ATM系统的例子中,“总行拥有多台ATM”实质上是“总行拥有中央计算机”和“ATM与中央计
24、算机通信”这两个关联组合的结果。而“分行计算机维护账户”的实际含义是“分行保管账户”和“事务修改账户”。3.3.进一步完善进一步完善应该进一步完善经筛选后余下的关联,通常从下述几个方面进行改进:第四十四页,本课件共有96页10.3.1 确定类与对象(1)(1)正名正名好的名字是帮助读者理解的关键因素之一。因此,应该选择含义更明确的名字作为关联名。“分行提供分行计算机和柜员终端”不如改为“分行拥有分行计算机”和“分行拥有柜员终端”。(2)(2)分解分解为了能够适用于不同的关联,必要时应该分解以前确定的类与对象。例如,在ATM系统中,应该把“事务”分解成“远程事务”和“柜员事务”。第四十五页,本课
25、件共有96页10.3.1 确定类与对象(3)(3)补充补充遗漏的关联就应该及时补上。例如,在ATM系统中把“事务”分解成上述两类之后,需要补充“柜员输入柜员事务”、“柜员事务输进柜员终端”、“在ATM上输入远程事务”和“远程事务由现金兑换卡授权”等关联。(4)(4)标明重数标明重数初步判定各个关联的类型,并粗略确定关联的重数。下图是经上述分析过程之后得出的ATM系统原始的类图。第四十六页,本课件共有96页10.3.1 确定类与对象图10.3 ATM系统原始的类图第四十七页,本课件共有96页10.3.3 划分主题应该按照使不同主题内的对象相互间依赖和交互最少的原则来确定主题。以ATM系统为例,可
26、以把它划分成总总行行(包含总行和中央计算机这两个类)、分分行行(包含分行、分行计算机、柜员终端、柜员事务、柜员和账户等类)和ATMATM(包含ATM、远程事务、现金兑换卡和储户等类)等3个主题。第四十八页,本课件共有96页10.3.4 确定属性属性是对象的性质。分析阶段不用属性来表示对象间的关系,使用关联能够表示两个对象间的任何关系。确定属性的过程包括分析分析和选择选择两个步骤。第四十九页,本课件共有96页10.3.4 确定属性1.1.分析分析在需求中用名名词词词词组组表示属性,例如,“汽车的颜色”或“光标的位置”。往往用形形容容词词表表示可可枚枚举举的的具具体体属属性性值值,例如,“红色的”
27、、“打开的”。分析员还必须借助于领领域域知知识识和常常识识才能分析得出需要的属性。应该仅考虑与具体应用直直接接相相关关的的属属性性,不要考虑那些超出所要解决的问题范围的属性。在分析过程中应该首首先先找出最最重重要要的属性,以后再逐渐把其余属性增添进去。(迭代)第五十页,本课件共有96页10.3.4 确定属性2.2.选择选择认真考察经初步分析而确定下来的那些属性,从中删掉不正确的或不必要的属性。(1)(1)误把对象当作属性误把对象当作属性如果某个实体的独独立立存存在在比它的值更重要,则应把它作为一个对象。在具体应用领域中具有自身性质具有自身性质的实体,必然是对象。第五十一页,本课件共有96页10
28、.3.4 确定属性(2 2)误误把把关关联联类类的的属属性性当当作作一一般般对对象象的的属属性性如果某个性质依依赖赖于于某某个个关关联联链链,则该性质是关联类的属性。在多对多关联中,关联类属性很明显,即使在以后的开发阶段中,也不能把它归并成相互关联的两个对象中任一个的属性。第五十二页,本课件共有96页10.3.4 确定属性(3 3)把限定误当成属性把限定误当成属性正确使用限定词往往可以减少关联的重数。如果把某个属性值固定下来以后能减少关联的重数,则应该考虑把这个属性重新表述成一个限定词。在ATM系统的例子中,“分行代码”、“账号”、“雇员号”、“站号”等都是限定词。第五十三页,本课件共有96页
29、10.3.4 确定属性(4)(4)误把内部状态当成了属性误把内部状态当成了属性如果某个性质是对象的非公开的内部状态,则应该从对象模型中删掉这个属性。(5)(5)过于细化过于细化在分析阶段应该忽略那些对大多数操作都没有影响的属性。(6)(6)存在不一致的属性存在不一致的属性类应该是简单而且一致的。如果得出一些看起来与其他属性毫不相关的属性,则应该考虑把该类分解成两个不同的类。第五十四页,本课件共有96页10.3.5 识别继承关系一般说来,可以使用两种方式建立继承关系:自自底底向向上上:抽抽象象出出现现有有类类的的共共同同性性质质泛泛化化出出父父类,这个过程实质上模拟了人类归纳思维过程。类,这个过
30、程实质上模拟了人类归纳思维过程。在ATM系统中,“远程事务”和“柜员事务”是类似的,可以泛化出父类“事务”;类似地,可以从“ATM”和“柜员终端”泛化出父类“输入站”。第五十五页,本课件共有96页10.3.5 识别继承关系自底向上也称为从特殊类发现一般类。如下图的例子:公司职员公司职员股东股东姓名姓名身分证号码身分证号码股份股份职员职员工资工资股东股东姓名姓名身分证号码身分证号码股份股份职员职员姓名姓名身分证号码身分证号码工资工资?第五十六页,本课件共有96页10.3.5 识别继承关系(2)(2)自自顶顶向向下下:把把现现有有类类细细化化成成更更具具体体的的子子类类,这模拟了人类的演绎思维过程
31、。这模拟了人类的演绎思维过程。利用多重继承可以提高共享程度,但是同时也增加了概念上以及实现时的复杂程度。使用多重继承机制时,通常应该指定一个主要父类,从它继承大部分属性和行为;次要父类只补充一些属性和行为。第五十七页,本课件共有96页10.3.5 识别继承关系自顶向下也称为从一般类发现特殊类。公司职员公司职员股东股东姓名姓名身分证号码身分证号码股份股份职员职员工资工资公司职员公司职员姓名姓名身分证号码身分证号码股份股份工资工资?第五十八页,本课件共有96页10.3.6 反复修改软件开发过程是一个迭迭代代的过程。建模过程同理。面向对象的概念和符号在整个开发过程中都是一一致的致的,更容易实现反复修
32、改、逐步完善。有些细化工作是在建立了动态模型和功能模型之后才进行的。建模的步骤并并不不一一定定严格按照前面讲述的次序进行。第五十九页,本课件共有96页10.3.6 反复修改1.1.分解分解“现金兑换卡现金兑换卡”类类“现金兑换卡”有两个相对独立的功能,它既是鉴别储户使用ATM的权限的卡,又是ATM获得分行代码和卡号等数据的数据载体。因此把“现金兑换卡”类分解为“卡卡权权限限”和“现金兑换卡现金兑换卡”两个类。前一个类标志储户访问账户的权限,后一个类是含有分行代码和卡号的数据载体。多张现金兑换卡可能对应着相同的访问权限。关联关联第六十页,本课件共有96页10.3.6 反复修改2.2.“事务事务”
33、由由“更新更新”组成组成一个事务包含对账户的若干次更新,更新指的是对账户所做的一个动作(取款、存款或查询)。“更新”虽然代表一个动作,但是它有自己的属性(类型、金额等),应该独立存在,因此应该把它作为类。3.3.把把“分行分行”与与“分行计算机分行计算机”合并合并区分“分行”与“分行计算机”,对于本系统并没有多大意义,为简单起见,应该把它们合并。类似地,合并“总行”和“中央计算机”。第六十一页,本课件共有96页10.3.6 反复修改取消没有特殊属性的特殊类。大学生大学生研究生研究生研究方向研究方向指导教师指导教师学生学生姓名姓名学号学号班级班级研究生研究生研究方向研究方向指导教师指导教师学生学
34、生姓名姓名学号学号班级班级第六十二页,本课件共有96页10.3.6 反复修改通过增加属性简化一般-特殊结构。人员人员男人男人女人女人美国人美国人日本人日本人人员人员性别性别国籍国籍中国人中国人第六十三页,本课件共有96页10.3.6 反复修改两种结构的变通两种结构的变通冷藏车冷藏车汽车汽车制冷设备制冷设备冷藏车冷藏车汽车汽车制冷设备制冷设备仅用一般仅用一般-特殊结构特殊结构两种结构两种结构同同 用用冷藏车冷藏车汽车汽车仅用整体仅用整体-部分结构部分结构第六十四页,本课件共有96页10.3.6 反复修改用整体用整体-部分结构实现复用部分结构实现复用车床车床机床机床刨床刨床起重机起重机电动机电动机
35、钻床钻床送料车送料车第六十五页,本课件共有96页10.4 建立动态模型第第一一步步,编写典型交互行为的脚本。虽然脚本中不可能包括每个偶然事件,但是,至少必须保证不遗漏常见的交互行为。第第二二步步,从脚本中提取出事件。确定触发每个事件的动作对象以及接受事件的目标对象。第第三三步步,排列事件发生的次序。确定每个对象可能有的状态及状态间的转换关系,并用状态图描绘它们。最最后后,比较各个对象的状态图。检查它们之间的一致性,确保事件之间的匹配。第六十六页,本课件共有96页10.4.1 编写脚本所谓“脚本”,原意是指“表演戏曲、话剧,拍摄电影、电视剧等所依据的本子,里面记载台词、故事情节等”。在建立动态模
36、型的过程中,脚脚本本是是指指系系统统在在某某一执行期间内出现的一系列事件一执行期间内出现的一系列事件。脚本描述用户与目标系统之间的一一个个或或多多个个典典型型的的交交互互过过程程,以便对目标系统的行为有更具体的认识。编写脚本有助于确保整个交互过程的正确性的和清晰性。第六十七页,本课件共有96页10.4.1 编写脚本编写脚本时,首先编写正正常常情情况况的的脚本。然后,考虑特特殊殊情情况况,例如输入或输出的数据为最大值(或最小值)。最后,考虑出错情况出错情况。例如,输入的值为非法值或响应失败。对大多数交互式系统来说,出错处理都是最难实现的部分。如果可能,应该允许用户“异常中止”一个操作或“取消”一
37、个操作。此外,还应该提供诸如“帮助”和状态查询之类的在基本交互行为之上的“通用”交互行为。第六十八页,本课件共有96页10.4.1 编写脚本脚脚本本描描述述事事件件序序列列。每当系统中的对象与用户交换信息时,就发生一个事件。所交换的信息值就是该事件的参数(例如,“输入密码”事件的参数是所输入的密码)。也有许多事件是无参数的,这样的事件仅传递一个信息该事件已经发生了。对于每个事件,都应应该该指指明明触触发发该该事事件件的的动动作作对对象象(例如,系统、用户或其他外部事物)、接受事件的目标对象以及该事件的参数。第六十九页,本课件共有96页10.4.2 设想用户界面大多数交互行为都可以分为应用逻辑和
38、用户界面两部分。通常,系统分析员首先集中精力考虑系统的信息流和控制流,而不是首先考虑用户界面。事实上,采用不同界面(例如,命令行或图形用户界面),可以实现同样的程序逻辑。应用逻辑是内内在在的的、本本质质的的内内容容,用户界面是外外在在的的表现形式。动态模型着重表示应用系统的控制逻辑。第七十页,本课件共有96页10.4.2 设想用户界面图10.7 ATM的界面格式第七十一页,本课件共有96页10.4.3 画事件跟踪图完整、正确的脚本为建立动态模型奠定了必要的基础。为了有助于建立动态模型,通通常常在在画画状状态态图图之之前前先先画画出出事事件件跟跟踪踪图图。为此首先需要进一步明确事件及事件与对象的
39、关系。第七十二页,本课件共有96页10.4.3 画事件跟踪图1.1.确定事件确定事件应该仔细分析每个脚本,以便从中提提取取出出所所有有外部事件外部事件。事事件件包包括括系系统统与与用用户户交交互互的的所所有有信信号号、输输入入、输输出出、中中断断、动动作作等等。从脚本中容易找出正常事件,但是不要遗漏了异常事件和出错条件不要遗漏了异常事件和出错条件。传递信息的对象的动作也是事件。例如,储户插入现金兑换卡、储户输入密码、ATM吐出现金等都是事件。大大多多数数对对象象到到对对象象的的交交互互行行为为都都对对应着事件。应着事件。第七十三页,本课件共有96页10.4.3 画事件跟踪图应该把对控制流产产生
40、生相相同同效效果果的那些事事件件组组合合在在一一起起作为一类事件,并给它们取一个惟一的名字。例如,“吐出现金”是一个事件类,尽管这类事件中的每个个别事件的参数值不同(吐出的现金数额不同),然而这并不影响控制流。第七十四页,本课件共有96页10.4.3 画事件跟踪图2.2.画出事件跟踪图画出事件跟踪图从脚本中提取出各类事件并确定了每类事件的发送对象和接受对象之后,就可以用事件跟踪图把事件序列以及事件与对象的关系,形象、清晰地表示出来。事件跟踪图实质上是扩充的脚本,可认为事件跟踪图事件跟踪图是简化的UML顺序图。第七十五页,本课件共有96页事件跟踪图举例:打电话挂断电话挂断电话电话切断电话切断挂断
41、电话挂断电话通通 话话通通 话话停止振铃停止振铃停止振铃停止振铃响应电话响应电话电话振铃电话振铃铃铃 声声拨拨 号号(3)拨拨 号号(7拨拨 号号(3)拨拨 号号(2)电话忙音结束电话忙音结束拨拨 号号(8)电话忙音开始电话忙音开始拿起听筒拿起听筒电话线电话线接电话者接电话者打电话者打电话者第七十六页,本课件共有96页存量为零存量为零找零找零扣减存扣减存量量灯亮灯亮余额余额饮料饮料结算结算选择键选择键#选择按纽选择按纽灯亮灯亮总总金额够金额够显示总额显示总额总额总额累加累加投入硬币投入硬币金额计算器金额计算器存量计算器存量计算器顾客顾客售货机售货机选择键选择键售完灯售完灯举例:饮料自动售货机系
42、统的时序图第七十七页,本课件共有96页10.4.4 画状态图状状态态图图描描绘绘事事件件与与对对象象状状态态的的关关系系。当对象接受了一个事件以后,它的下个状态取决于当前状态及所接受的事件。由事件引起的状态改变称为“转换”。通通常常,用用一一张张状状态态图图描描绘绘一一类类对对象象的的行行为为,它确定了由事件序列引出的状态序列。它确定了由事件序列引出的状态序列。但是,也不是任何一个类都需要有一张状态图描绘它的行为。系统分析员应该集中精力仅考虑具有重要交互行为的那些类具有重要交互行为的那些类。第七十八页,本课件共有96页10.4.4 画状态图从一张事件跟踪图出发画状态图时,应该集集中中精精力力仅
43、仅考考虑虑影影响响一一类类对对象象的的事事件件,也就是说,仅考虑事件跟踪图中指向某条竖线的那些箭头线。如果同一个对象对相同事件的响应不同,则这个对对象象处在不同状态处在不同状态。应该尽量给每个状态取个有意义的名字有意义的名字。通常,从事件跟踪图中当前考虑的竖线射出的箭头线,是这条竖线代表的对象达到某个状态时所做的行为(往往是引起另一类对象状态转换的事件)。第七十九页,本课件共有96页10.4.4 画状态图根据一张事件跟踪图画出状态图之后,再把其他脚本的事件跟踪图合并到已画出的状态图中。为此需在事件跟踪图中找出以前考虑过的脚本的分支点例如“验证账户”就是一个分支点,因为验证的结果可能是“账户有效
44、”,也可能是“无效账户”然后把其他脚本中的事件序列并入已有的状态图中,作为一条可选的路径。第八十页,本课件共有96页10.4.4 画状态图考虑完正常事件之后再考虑边边界界情情况况和特特殊殊情情况况,其中包括在不适当时候发生的事件。有时用户不能做出快速响应,然而某些资源又必须及时收回,于是在一定间隔后就产生了“超时”事件。对用户出错情况往往需要花费很多精力处理,但是,出错处理是不能省略的。第八十一页,本课件共有96页10.4.4 画状态图图10.10 总行类的状态图第八十二页,本课件共有96页10.4.4 画状态图图10.11 分行类的状态图第八十三页,本课件共有96页10.4.5 审查动态模型
45、各个类的状态图通过共共享享事事件件合并起来,构成了系统的动态模型。在完成了每个具有重要交互行为的类的状态图之后,应该检查系统级的完整性和一致性。每个事件都应该既有发送对象又有接受对象,当然,有时发送者和接受者是同一个对象。对于没有前驱或没有后继的状态应该着重审查,如果这个状态既不是交互序列的起点也不是终点,则发现了一个错误。第八十四页,本课件共有96页10.4.5 审查动态模型应该审查每个事件,跟踪它对系统中各个对象所产生的效果,以保证它们与每个脚本都匹配。在总行类的状态图中,事件“分行代码错”是由总行发出的,但是在ATM类的状态图中并没有一个状态接受这个事件。因此,在ATM类的状态图中应该再
46、补充一个状态“do/显示分行代码错信息”,它接受由前驱状态“do/验证账户”发出的事件“分行代码错”,它的后续状态是“退卡”。第八十五页,本课件共有96页10.5 建立功能模型功功能能模模型型表表明明了了系系统统中中数数据据之之间间的的依依赖赖关关系系,以以及及有有关关的的数数据据处处理理功功能能,它由一组数据流图组成。其中的处理功能可以用IPO图(或表)、伪码等多种方式进一步描述。通常在建立了对象模型和动态模型之后再建立功能模型。第八十六页,本课件共有96页10.5.1 画出基本系统模型图第八十七页,本课件共有96页10.5.2 画出功能级数据流图把基本系统模型中单一的处理框分解成若干个处理
47、框,以描述系统加工、变换数据的基本功能,就得到功能级数据流图。ATM系统的功能级数据流图如图10.13(见书246页)所示。第八十八页,本课件共有96页10.5.3 描述处理框功能把数据流图分解细化到一定程度之后,就应该描描述述图图中中各各个个处处理理框框的的功功能能。要着重描述每个处理框所代表的功能,而不是实现功能的具体算法。描述既可以是说明性的,也可以是过程性的。第八十九页,本课件共有96页10.6 定义服务10.3节指出“对象”是由描述其属性的数据及可以对这些数据施加的操作(即服务)封装在一起构成的独立单元。为建立完整的对象模型,既要确定类中应该定义的属性,又要确定类中应该定义的服务。在
48、确定类中应有的服务时,既既要要考考虑虑该该类类实实体体的的常常规规行行为为,又又要要考考虑虑在在本本系系统统中中特特殊殊需需要要的服务。的服务。第九十页,本课件共有96页10.6 定义服务1.1.常规行为常规行为类中定义的每个属性都是可以访问的,也就是说,假设在每个类中都定义了读读、写写该该类类每每个个属属性性的的操操作作。但是,通常无需在类图中显式表示这些常规操作。Set和和Get第九十一页,本课件共有96页10.6 定义服务2.2.从事件导出的操作从事件导出的操作状态图中发往对象的事件也就是该对象接收到的消息,因此该该对对象象必必须须有有由由消消息息选选择择符符指指定定的的操操作作,这个操
49、作修改对象状态(即属性值)并启动相应的服务。例如,发往ATM对象的事件“中止”,启动该对象的服务“打印账单”;发行分行的事件“请分行验卡”启动该对象的服务“验证卡号”;而事件“处理分行事务”启动分行对象的服务“更新账户”。可以看出,所启动的这些服务通常就是接受事件的对象在相应状态的行为。第九十二页,本课件共有96页10.6 定义服务3.3.与数据流图中处理框对应的操作与数据流图中处理框对应的操作数数据据流流图图中中的的每每个个处处理理框框都都与与一一个个对对象象(也也可可能能是是若若干干个个对对象象)上上的的操操作作相相对对应应。应该仔细对照状态图和数据流图,以便更正确地确定对象应该提供的服务
50、。例如,从状态图上看出分行对象应该提供“验证卡号”服务,而在数据流图上与之对应的处理框是“验卡”,根据实际应该完成的功能看,该对象提供的这个服务应该是“验卡”。第九十三页,本课件共有96页10.6 定义服务4.4.利用继承减少冗余操作利用继承减少冗余操作应该尽量利用继承机制以减少所需定义的服务数目。只要不违背领域知识和常识,就尽量抽取出相似类的公共属性和操作,以建立这些类的新父类,并在类等级的不同层次中正确地定义各个服务。第九十四页,本课件共有96页10.7 小结分析就是提取系统需求并建立问题域精确模型的过程,它包括理解、表达和验证等3项主要工作内容。面向对象分析的关键工作,是分析、确定问题域