- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.6 类与对象的进一步讨论
§ 5.6类与对象的进一步讨论 1.基本数据类型与对象 在一些面向对象程序设计语言中,系统提供给程序员使用的基本数据类型也是以类的形式提供的,然而在C++这类混合型面向对象程序设计语言中,基本数据类型是独立处理的。虽然从形式上看,由int声明的变量i与由类类型CLOCK声明对象cima有所不同,但从本质上来看,基本数据类型声明的变量与对象是相同的,我们可以将这些变量也理解为对象,其属性即是变量的值,其操作即是C++提供的基本操作。 2.抽象数据类型 类是构造面向对象程序的基本单位,面向对象程序设计的主要任务就是设计类并利用类组装程序。一个面向对象程序是由一组相关的类组成的,在C++语言中还必须提供一个主函数main( ). 类是关于一组结构与行为相似的对象的共同特性的描述。然而类与对象是两个不同的概念:类是面向对象程序静态文本中的概念,而对象则是面向对象程序动态运行时的概念。 类是一组相似对象的抽象描述,尽管各个对象内部状态是不同的,但类摒弃了这些差异,抽取出这些对象的共性组成一个共同的概念。与此类似,在类之上还有一个抽象描述,我们称之为抽象数据类型(Abstract Data Type,简称ADT),ADT是一组相似类的抽象描述,而是一个类是ADT的具体实现。 ADT只是一个数学意义上的形式系统,它通过定义数据结构上允许的操作的性质来定义一种数据类型。其“抽象”表现在两方面:一是不给出数据的具体表示而只给出值域,二是不给出操作的实现细节而只给出其性质(操作必须满足的前置断言和公理)。 类作为ADT的一个实现,其“实现”的含义有两个方面:一是给出了具体的数据结构表示,二是用面向对象程序设计语言给出了完成操作的语句序列。 一个类可以声明多个对象,一个ADT也允许有多个类来实现它。 3.设计良好的类界面 ADT为描述现实世界或思维世界中的实体提供了一种理想的工具:不是从对象的物理表示来定义一个对象,而是从它的行为来定义。即这个对象提供给其他对象的服务。从这个意义上,ADT可以作为类界面的一种描述。 我们在设计一个类的界面时应该至少从三方面作评价: 类界面应该具有完备性 类界面应该是无二义的 类界面应该是无冗余的 4.再论对象 类作为软件重用的基本构件(component)需要在不同环境下重复使用,但并不是每次使用时一个类都是百分之百合用,在新的环境下我们可能需要为原有的类增加一些 新属性或新操作。这地当然可以从原有类复制一个副本作修改,但更好的方法是使用面向对象程序设计的继承(inheritance)机制。 继承是面向对象程序设计的一大特色。 有时我们想为一个类提供多种声明对象时的初始化方式,即为类设计多个构造函数。这种允许一个运算符或函数名字具有多重含义的机制称为重载(overloading)。 设想一下,我们现在需要设计一个整数集合类INTEGER_SET,这可以是一个非常完善的新类型。但我们下一次可能又需要一个实数集合类、字符串集合类,甚至是学生记录集合类,如果我们又要重新设计新的REAL_SET、STRING_SET或STUDENT_SET,这些集合的共性就无法描述出来了。C++与Ada、Eiffel等语言均提供了类属(generics)机制,允许把类型也作为参数。 C++语言的构造函数不允许有返回值,如果我们在声明一个新对象时,由于无足够内存、初始值不正确等原因出现异常时,应该如何处理?(exception handling,异常处理问题) 对象从哪里来?在解决一个问题时,哪些是我们关心的对象?哪些不是?我们如何从最初的问题定义提取出对象? 上一节 返回 * *
文档评论(0)