- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章 面向对象专题讨论 本章先讨论在实际应用中需要考虑的几个专题: 如何发现对象 如何发现对象的数据成员和成员函数 如何定义数据成员和成员函数 如何发现基类和派生类结构 如何考虑接口继承与实现继承 最后给出一个设计实例。 本章的目的是加深对知识的理解并锻炼解决实际问题的能力,希望通过本章的学习,能将所学知识正确地运用到实际中去。 主要内容 10.1 过程抽象和数据抽象 10.2 发现对象并建立对象层 10.3 定义数据成员和成员函数 10.4 如何发现基类和派生类结构 10.5 接口继承与实现继承 10.6设计实例 10.1 过程抽象和数据抽象 抽象(abstraction)是形成概念的必要手段,它是从许多事物中舍弃个别的、非本质性的特征,抽取共同及本质性的特征,例如。谈到猫,世上没有任何两只猫是完全相同的,但是舍弃了每只猫相互之间的差异,把共同和本质性的特征抽取出来,就形成了“猫”这个概念。 对于分析而言,抽象原则具有两方面的意义: ① 尽管问题域中的事物很复杂,但分析员并不需要了解和描述它们的全部,只需要分析研究其中与系统目标有关的事物及其本质性特征。对于那些与系统目标无关的特征和许多具体的细节,即使有所了解,也应该舍弃。 ② 通过舍弃个体事物在细节上的差异,抽取其共同特征而得到一批事物的抽象概念。OOA中的类就是这样得到的。 抽象是面向对象方法中使用最为广泛的原则,例如系统中的对象是对现实世界中事物的抽象;类是对象的抽象;数据成员是事物静态特征的抽象;成员函数是事物动态特征的抽象等。 在软件开发领域中,早在面向对象方法出现之前就已经开始运用抽象的原则,主要是过程抽象和数据抽象。 过程抽象是指任何一个完成确定功能的操作序列,其使用者都可把它看做一个单一的实体,尽管实际上它可能是由一系列更低级的操作完成的。运用过程抽象,软件开发者可以把一个复杂的功能分解为一些子功能;如果子功能仍然比较复杂,则可以进一步分解。这使得开发者可以在不同的抽象层次上考虑问题,在较高的层次上思考时可以不关心较低层次的实现细节,即只注意一个过程完成什么功能,而不注意它是怎样完成的。过程抽象不是OOA的主要抽象形式,因为面向对象方法不允许超出对象的界限在全系统的范围内进行功能的描述。但是过程抽象对于在对象范围内组织对象的成员函数是很有用的。 数据抽象是根据施加于数据之上的操作来定义数据类型,并限定数据的值只能由这些操作来修改和观察。 程序设计语言的类型定义就是抽象原则的运用(如根据整数集合及该集合所适应的共同四则运算等操作,抽象出整数类型)。 20世纪70年代后期形成的抽象数据类型理论明确提出把数据及其操作结合为一个整体并实行信息隐蔽,这是对数据抽象原则的进一步发展。 10.2 发现对象并建立对象层 软件开发者将被开发的整个业务范围称作“问题域”。可以按如下步骤考虑发现对象并建立对象层。 1. 将问题域和系统责任作为出发点 问题域和系统责任从不同的角度告诉分析员应该设立哪些对象,问题域侧重客观存在的事物与系统中对象的映射, 系统责任侧重于系统责任范围内的每一项职责都应落实到某些对象来完成。两者有很大部分重合,但又不完全一致。 2. 正确运用抽象原则 OOA使用对象映射问题域中的事物,但并不是对分析员见到的任何东西都在系统中设立相应的对象。OOA需要正确地运用抽象原则,即紧紧围绕系统责任这个目标去进行抽象。 抽象意味着要有所取舍。取舍的准则是看被观察的事物及其特征是否与当前的目标有关。中国古代“九方皋相马”和“庖丁解牛”的故事就含有这种哲理。九方皋应伯乐之荐, 为秦穆公寻得千里马,但在复命时却把马的公、母和颜色都说错了。穆公对其能力表示怀疑。伯乐回答说:“皋之所观,天机也:得其精而忘其粗,得其内而忘其外”。把马牵来一试,果然是一匹千里马。精于相马的高手把主要精力都集中于跟自己的目标有关的特征上,忽略了与目标无关的特征。宋国庖丁解牛时则从另一个角度抽象,他的目标是看牛的皮、肉、筋、骨中哪里有缝隙可以下刀,他是“目无全牛”。有人对此二事做成一联: 九方皋相马,不分牡、牝、骊、黄,心唯骏马特征; 宋庖丁解牛,只见筋、骨、皮、肉,目无全牛形象。 在OOA中正确地运用抽象原则,首先要舍弃那些与系统责任无关的事物,只注意与系统责任有关的事物。其次,对于与系统责任有关的事物,也不是把它们的任何特征都在相应的对象中表达出来,而要舍弃那些与系统责任无关的特征。判断事物是否与系统责任有关的关键问题,一是该事物是否为系统提供了一些有用的信息(是否需要系统为它保存和管理某些信息);二是它是否向系统提供了某些服务(是否需要系统描述它的某些行为)。 正确进行抽象,还需要考虑一些更深入的问题,即应该把问题域中的事物映射为什么对象,以及如何对
文档评论(0)