第10章面向对象讲解
- 格式:doc
- 大小:465.50 KB
- 文档页数:24
什么是面向对象「什么是面向对象分析方法」面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
面向对象其实是现实世界模型的自然延伸现实世界中任何实体都可以看作是对象对象之间通过消息相互作用另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例如果说传统的面向过程式编程语言是以过程。
在我理解,面向对象是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例面向对象的编程是以对象为中心,以消息为驱动,所以程序=对。
面向对象是指一种程序设计范型,同时也是一种程序开发的方法对象指的是类的集合它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性灵活性和扩展性起初,“面向对象”是专指在程序设计中采用封装。
面向对象相比于面向过程,是两种不同的处理问题的角度面向过程更注重事情的每一个步骤和以及顺序,面向对象更注重事件有哪些参与者,以及各自需要什么比如洗衣机洗衣服,面向过程将会把任务解析成一系列步骤,打开洗衣机放。
面向对象Object Oriented,OO是当前计算机界关心的重点,它是90年代软件开发方法的主流面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围如数据库系统交互式界面应用结构应用平台分布式系统网络管理结构CAD。
你好面向对象就是指把一个应用程序看成是由许多“对象object”组成的,然后去对这些对象编程,让它们具有一定的功能类是具有相同或相似性质的对象的抽象就是类因此,对象的抽象是类,类的具体化就是对象,也可以说。
面向对象如果我没记错的话应该是一门Java语言吧,我记得上大学学计算机的时候学过一点,当然不是计算机专业的,学的水过地皮湿,都是点皮毛而已,具体的你可以找一下计算机相关方面的书来看一下。
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在。
第10章面向对象分析1.用面向对象方法分析研究本书第2章第2题中描述的储蓄系统,试建立它的对象模型、动态模型和功能模型。
答:(1)对象模型储蓄系统的对象模型,如图10-2所示。
图10-2储蓄系统的对象模型(2)动态模型①编写脚本a.正常情况脚本第一,储户有存款要求,填写存款单,包含储户个人信息,存款金额和存款类型;第二,业务员查收存款,审核存款与存款单存款金额吻合;第三,存款单生效;第四,储户有取款要求,填写取款单,包含个人账号、密码(待定)和存款金额;第五,业务员审核存款,验证储户身份,确定储户存款金额>=取款金额;第六,审核通过,取款单生效;第七,系统打印利息清单,业务员把本金和利息返回储户。
b.异常情况脚本第一,储户有存款要求,填写存款单,包含储户个人信息,存款金额和存款类型;第二,业务员查收存款,审核存款与存款单存款金额不符;第三,存款单作废;第四,储户有取款要求,填写取款单,包含个人账号、密码(待定)和存款金额;第五,业务员审核存款,验证储户身份,发现储户存款金额<=取款金额;第六,取款单作废。
②事件追踪图储蓄系统的事件追踪图,如图10-3所示。
图10-3储蓄系统的事件追踪图(3)功能模型储蓄系统的数据库流图,如图10-4所示。
图10-4储蓄系统的数据库流图2.用面向对象方法分析研究本书习题2第3题中描述的机票预订系统,试建立它的对象模型、动态模型和功能模型。
答:略。
3.用面向对象方法分析研究本书习题2第4题中描述的患者监护系统,试建立它的对象模型、动态模型和功能模型。
答:略。
4.下面是自动售货机系统的需求陈述,试建立它的对象模型、动态模型和功能模型:自动售货机系统是一种无人售货系统。
售货时,顾客把硬币投入机器的投币口中,机器检查硬币的大小、重量、厚度及边缘类型。
有效的硬币是一元币、五角币、一角币、五分币、二分币和一分币。
其他货币都被认为是假币。
机器拒绝接收假币,并将其从退币孔退出。
第10章面向对象分析一、选择题1._____是系统一个特定执行期间所发生的事件序列。
【答案】脚本2.功能模型描述系统内的计算,它和_____、_____共同构成系统模型结构的三大支柱。
【答案】对象模型;动态模型3.状态是对象的_____、_____的一种抽象。
【答案】属性值;链接4.在对象模型中,访问操作是直接从类的_____和_____中导出的。
【答案】属性;关联5.对象模型为建立_____和_____,提供了实质性框架。
【答案】动态模型;功能模型6.功能模型由多个_____组成,每个_____说明了操作和结束的含义。
【答案】数据流图;数据流图7.功能模型由多张数据流图组成。
数据流图中包含_____、_____、_____对象和_____对象。
【答案】处理;数据流;动作;数据存储8.事件跟踪图用来表示_____、_____对象和_____对象。
_____和_____可用一条垂直线表示,各_____用水平箭头表示,箭头方向是从_____对象指向_____对象。
【答案】事件;事件的接收;发送;接收对象;发送对象;事件;发送;接收9.状态转换图是_____的重要工具。
【答案】启发分析员认识对象服务10.说明一个状态可采用_____、_____、_____、_____、_____等内容描述。
【答案】状态名;状态目的描述;产生该状态的事件序列;表示状态特征的事件;在状态中接收的条件二、填空题1.一个()能用不同的方法表示它的特征。
A.事件B.抽象C.状态D.脚本【答案】C【解析】状态是对象的属性值和链接的一种抽象。
根据影响对象总的行为的性质,一系列组合在一起是一个状态。
它能用不同的方法表示它的特征。
2.在对象模型中,访问操作是直接从类的属性和关联中导出的。
下列不是对象模型的访问操作的是()。
A.查询B.动作C.抽象D.活动【答案】C【解析】对象模型的访问操作主要包括三大类:查询、活动和动作。
3.()对整个对象的状态/行为关系的图示,它附属于该对象的类描述模板。
第10章面向对象分析10.1面向对象分析的基本过程不论采用哪种软件工程方法开发软件,需求分析的主要工作都是:理解需求、表达需求和验证需求,下面的图概括地表示了参照当前系统建立目标系统的过程。
图:参照当前系统建立目标系统面向对象分析(Object-Oriented Analysis,简称OOA)的关键就是识别出对象与类,并分析它们之间的关系,最终建立对象模型、动态模型和功能模型。
10.1.1 概述系统分析员要善于学习、勇于实践,更重要的是一切从实际出发。
[[注注]]“OOA 就是抽取和整理用户需求并建立问题域精精确确模模型型的过程。
”(P231)——这在一开始能做到吗?——扯蛋10.1.2 3个子模型与5个层次面向对象建模需建立包含系统的三个要素:1)静态结构(对象模型)、2)交互次序(动态模型)、3)数据交换(功能模型)。
建立系统模型的过程是一个迭代(iterations )式的自顶向下的求精过程。
对于一个大型复杂系统来说对对象象模模型型一般由下述5个层次组成:图10.2 复杂问题的对象模型的5个层次其中主题层是指从一个更高(高于“类”)的抽象层次来描述对象模型(即从一个相当高的层次上描述总体模型),通过划分“主题”把一个复杂系统的对象模型分解成几个不同的概念范畴。
其实上述5个层次就是OOA中建立对象模型的5项主要工作:找出类和对象,识别结构(类或对象之间的关系),识别主题、定义属性、定义服务。
我们知道动态模型和功能模型中都包含了对象模型中的操作,因此人们在定义每个类中的服务前,往往先建立起动态模型和功能模型,这样说来OOA大体上可按下列顺序进行:(1)确定类和对象(2)确定关联(3)划分主题(4)定义属性(5)确定继承关系(6)建立动态模型(7)建立功能模型(8)定义服务需要注意地是在这里我们根本不强调顺序,更不是谈什么步骤。
10.2需求陈述需求陈述的主要任务是准确地回答“系统必须做什么?”,而不是“系统应该怎么做?”10.2.1书写要点10.2.2例子我们用“ATM系统”(ATM是Automatic Teller Machine的缩写,意即自动柜员机)的开发作为OOA&OOD的实例。
图10.2ATM 系统10.3建立对象模型10.3.1确定类与对象1. 找出候候选选的类与对象(例:P236 ATM 系统)一般来说,大千世界中的客观事物可分为5类:1)可感知的物理实体,如:飞机,汽车,房屋2)人或组织的角色,如:教师,医生,计算机系,学生处3)应该记忆的事件,如:飞行,演出,访问,交通事故4)对象的相互作用,如:购买,结婚,纳税5)概念,如:政策,刑法,泛化,集合2. 筛选出正确的类与对象我们需要确定的类与对象是:(1) 应该记录的对象(2) 需要它提供服务的对象同时要关注下述6个方面:1) 冗余: 去掉冗余的类(如“用户”)2) 无关: 去掉无关的类(如“储蓄所”)3) 笼统: 去掉笼统的类(如“银行”)4) 属性: 区分属性和类(某个性质若具有很强的独立性应当作为“类”)5) 操作: 区分操作和类(本身具有属性且需独立存在的“操作”应当作为“类”)6) 实现: 忽忽略略实实现现内内容容(应当去掉仅和实现有关的“类”,如“事务日志”)10.3.2确定关联对象之间的相互依赖、相互作用的关系就是关联。
在分析的起始阶段,我们不必花过多的精力去区分关联和聚集,聚集不过是一种特殊的关联,是关联的一个特例。
1. 初步确定关联通过分析动词词组我们可以得出大多数关联(例:P238 ATM 系统)2. 筛选筛选时要关注下述5个方面:1)已删去的类之间的关联也要删除2)无关的或在在实实现现阶阶段段考考虑虑的的关关联联要要删删除除3)描述瞬时事件的关系不应作为关联(关联应该描述问题域的静态结构)4)三个或三个以上对象的关联要作分解或描述成限定关联5)冗余关联要删除3. 进一步完善完善时要关注下述4个方面:1)正名:选择更明确的名字作为关联名2)分解:分解已确定的类以适用关联3)补充:及时补充遗漏关联4)标明重数:但无需花过多精力图10.3ATM系统原始的类图10.3.3划分主题按问题领域而不是用功能分解来高度概括主题10.3.4确定属性属性是类中所定义的数据,它表明了对象的性质。
一般来说,确定属性的过程包括分析和选择两个步骤:1. 分析通常用名词词组表示属性,如:“汽车的颜色”、“光标的位置”,而用形容词表示可枚举的具体属性,如:“红色的”、“白色的”。
在分析阶段应该仅考虑与具体应用直接相关的属性,而不不要要考考虑虑那那些些纯纯粹粹用用于于实实现现的的属属性性。
2. 选择选择时要关注下述6个方面:1) 区分对象与属性(仅关注其值的是属性);2) 区分关联类属性与对象属性(例:依赖某个关联链的性质是关联类属性);3) 区分限定词和属性(能用限定词更好)4) 区分内部状态和属性(例:某性质是对象的内部状态)5) 忽略无影响的属性(在分析阶段应该忽略对大多数操作无影响的属性)6) 注意属性的相关性(分解该“类”)图10.4ATM系统对象模型中的属性10.3.5识别继承关系确定了类中的属性之后,就可以利用继承机制共享公共性质,并对众多的类重新加以组织。
一般来说,可以应用两种方式建立继承(即泛化)关系:(1)自底向上:抽象出现有类的共同性质泛化出父类;(2)自顶向下:把现有类细化成更具体的子类。
图10.5带有继承关系的ATM对象模型10.3.6反复修改对象模型的建立是一个反复修改、逐步完善的迭代过程。
对于初学者来说,可尝试用面向对象方法开发几个较小系统,取得一定的经验后,再总结更适合自己的工作方式。
1. 分解“现金兑换卡”类2. “事务”由“更新”组成3. 把“分行”与“分行计算机”合并图10.6修改后的ATM对象模型10.4建立动态模型一般来说,建立动态模型的典型步骤如下:(1)编写脚本,确保不遗漏正常的交互行为;(2)从脚本中提取事件,确定每个事件的发送对象(触发该事件动作的对象)和接受对象;(3)画事件跟踪图(Sequence Diagram,时序图或顺序图,描述对象之间的时间顺序)(4)画状态图(5)审查状态图的完整性和一致性10.4.1编写脚本脚本是指系统在某一执行期间内出现的一系列事件(脚本描述事件序列,是用例的实例,是系统的一种实际使用方法。
),它描述用户(或其它外部设备)与系统之间的交互过程;对于每个事件,脚本都应该指明触发该事件的动作对象(如:系统、用户或其它外部事物)、接受事件的目标对象,以及该事件的参数。
[目的]编写脚本的目的是保证不遗漏重要的交互步骤。
[实质] 编写脚本的实质是分析用户对与系统交互过程的要求。
编写脚本时,首先编写正常情况的脚本,其次考虑特殊情况,最后考虑出错情况;如有可能还应该允许用户“异常操作”。
此外还应该提供“在线帮助”、状态查询等在基本交互行为之上的“通用”交互行为。
10.4.2设想用户界面用户界面是用户对系统的“第一感”,它往往对用户是否喜欢一个系统起很重要的作用,因此在分析阶段也不能完全忽略用户界面。
设计用户界面时重要的是用户和系统进行信息交换的方式。
图10.7 ATM的界面格式10.4.3画事件跟踪图脚本为建立动态模型(状态图)提供了很好的基础,但用自然语言书写的脚本还不够简明,并且会有二义性,因此在画状态图前,我们往往先画出事件跟踪图[简化的UML顺序图(Sequence Diagram,时序图)],为此需进一步明确事件(事件就是引起系统做动作或(和)转换状态的控制信息)及事件与对象的关系。
1. 确定事件事件包括系统与用户(或外部设备)交互的所有信号、输入、输出、中断、动作等,要注意的是(1)对象的动作也是事件;(2)对控制流产生相同效果的那些事件应作为一类事件。
经过分析要确定每类事件的发送对象和接受对象。
2. 画出事件跟踪图从脚本中提取出各类事件,并确定每类事件的发送对象和接受对象,就可以用事件跟踪图把事件序列以及事件与对象的关系表示出来,事件跟踪图是扩充的脚本,更是简化了的UML顺序图。
图10.8ATM系统正常情况脚本的事件跟踪图(时序图)10.4.4画状态图状态图描述了事件与对象状态(对象生命周期中的阶段)的关系。
UML用状态图来表示对象的动态行为,它确定了由事件序列引出的状态序列。
系统分析员应仅考虑系统内具有重要交互行为的哪些类,即每个主动发送事件的对象类的动态行为用一张状态图来表示,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型。
从一张事件跟踪图出发画状态图时,要关注影响一类对象的事件,即考虑指向某条竖线(对象)的箭头线,把这些事件作为状态图中的有向边(箭头线),边上标以事件名,两个事件之间的间隔就是一个状态。
图10.9 ATM类的状态图图10.10总行类的状态图图10.11分行类的状态图10.4.5审查动态模型各个类的状态图通过共享事件合并起来,就构成了系统的“动态模型”,应该细致审查动态模型的完整性和一致性10.5建立功能模型功能模型表明了系统中数据之间的依赖关系,以及有关的数据处理功能,它由一组DFD组成,其中处理功能可以用IPO图(或表)、伪码等描述。
10.5.1画出基本系统模型图[最高层的DFD]图10.12ATM系统的基本系统模型10.5.2画出功能级数据流图图10.13ATM系统的功能级数据流图10.5.3描述处理框功能10.6定义服务对象是由描述其属性的数据,以及可以对这些数据施加的操作,封装在一起构成的独立单元。
在确定类中的操作时,既要考虑该类实体的常规行为,又要考虑本系统中特殊的服务。
1.常规行为在分析阶段可以认为,类中定义的每个属性都是可以访问的,也就是类中已经定义了读、写该类每个属性的操作,而无需显式表示这些常规操作。
2. 从事件导出的操作状态图中若有发往对象的事件,该对象必须要有相应的操作。
3. 与数据流图中处理逻辑对应的操作DFD中的每个处理逻辑都与一个对象(或几个对象)上的操作相对应。
4. 利用继承减少冗余操作应尽量利用继承机制减少所需定义的操作。
10.7小结习题101. 用面向对象方法分析研究本书习题2第2题中描述的储蓄系统,试建立它的对象模型、动态模型和功能模型。
2. 用面向对象方法分析研究本书习题2第3题中描述的机票预订系统,试建立它的对象模型、动态模型和功能模型。
3. 用面向对象方法分析研究本书习题2第4题中描述的患者监护系统,试建立它的对象模型、动态模型和功能模型。
4. 下面是自动售货机系统的需求陈述,试建立它的对象模型、动态模型和功能模型:。