软工题第九章.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章习题 ? 一、简答题 1.为什么应该尽量使用面向对象语言来实现面向对象分析和设计的结果? 2.什么是强类型语言?这类语言有哪些优点? 3.用动态联编实现多态性是否会显著降低程序的运行效率? 4.为什么说参数化类有助于提高可重用性? 5.把策略方法与实现方法分开后,为什么能提高可重用性? 6.面向对象软件的哪些特点使得测试和维护变得比较容易?哪些特点使得测试和维护变得比较困难? 7.试用C++语言编程实现下述简单图形程序的类继承结构。 在显示器屏幕上圆心坐标为(250,100)的位置,画一个半径为25的小圆,圆内显示字符串“you”;在圆心坐标为(250,150)的位置,画一个半径为100的中圆,圆内显示字符串“world”;再在圆心坐标为(250,250)的位置,画一个半径为225的大圆,圆内显示字符串“Universe”。 8.设计测试用例以测试第7题类继承结构中的各个类。 第九章习题解答 ? 一、简答题 1. 答:面向对象语言充分支持对象、类、封装、继承、多态、重载等面向对象的概念,编译程序能够自动地在目标程序中实现上述概念,因此,把面向对象的设计结果翻译成面向对象程序比较容易,这就不仅降低了编程工作量而且减少了编程错误。更重要的是,从面向对象分析到面向对象设计再到面向对象程序设计,始终使用统一的概念,既可以保证在软件开发过程的各个阶段之间平滑过渡,又有助于提高软件的可重用性和可维护性。 2. 答:按照编译时对程序中使用的数据进行类型检查的严格程度,可以把程序设计语言划分成两类。如果语言仅要求每个变量或属性隶属于一个对象,则是弱类型的;如果语言规定每个变量或属性必须准确地属于某个特定的类,则这样的语言是强类型的。 强类型的语言主要有两个优点:一是有利于在编译时发现程序错误,二是增加了优化的可能性。因此,强类型语言有助于提高程序的可靠性和运行效率。 3. 答:绝大多数面向对象语言都优化了动态联编时查找多态操作入口点的过程,由于实行了高效率查找,因此并不会显著降低程序的运行效率。 以C++语言为例,使语言的动态联编是通过使用“虚函数表”实行的。所谓虚函数表,就是编译程序替每个使用虚函数的类构造的一个函数指针数组。类中每个虚函数在表中都有一个表项(即数组元素),它是一个函数指针。注意,如果在派生类中没有重新定义基类的虚函数,又没有通过一般的函数重载屏蔽基类的虚函数,则派生类的虚函数表中有指针项指向其继承的基类虚函数。 每个类的实例都有一个隐含的指向该类虚函数表的指针。当指向调用虚函数的语句时,系统首先用调用虚函数的对象的虚函数表指针找到相应类的虚函数表,再由虚函数表中与虚函数名对应的表项找到该虚函数的入口点。为了进一步提高效率,根据虚函数名查找虚函数表中对应表项的过程,可以使用希哈表技术。 从C++语言实现动态联编的方法可以知道,调用虚函数确实比调用普通函数的开销大一些,主要是多了读虚函数表指针的操作,实际上开销增加得并不多,虚函数调用只比普通函数调用慢一点点。 4. 答:在实际的应用程序中,往往有这样一些软件元素(即函数、类等软件成分),从它们的逻辑功能看,彼此是相同的,所不同的主要是处理的对象类型不同。 所谓参数化类,就是使用一个或多个类型去参数化一个类的机制,有了这种机制,程序员就可以先定义一个参数化的类模块(即在类定义中包含以参数形式出现的一个或多个类型),然后再使用时把数据类型作为参数传递进来,从而把这个类模块在不同的应用程序中重复使用,或在同一程序的不同部分重复使用。 5. 答:从所完成的功能看,有两类不同的方法。一类方法负责做出决策,提供变元,并且管理全局资源,可称为策略方法。另一类方法负责完成具体操作,但却并不做出是否执行这个操作的决定,可称为实现方法。 策略方法通常紧密依赖于具体应用,应用系统不同,策略方法往往也不同。 实现方法是自含式算法,相对独立于具体应用,因此,在其他应用系统中也可能重用它们。 为提高可重用性,编程时不要把策略和实现放在同一个方法中,应该把算法的核心部分放在一个单独的具体实现方法中。当开发不同的应用系统时,可以从已有类派生出新的子类,子类从基类直接继承不需修改的实现方法,并且根据需要重新定义策略方法。 6. 答:封装性使得对象成为独立性很强的模块,理解一个对象所需要了解的元素,大部分都在该对象内部,因此,测试和维护比较容易。对象彼此之间仅能通过发送消息相互作用,不能从外界之间修改对象的私有数据,进一步使得测试和维护变得更容易。信息隐藏确保了对对象本身的修改不会在该对象以外产生影响,从而大大减少了回归错误的数量,因此,这个特点也使得测试和维护变得比较容易。 与封装性和信息隐藏相反,继承性和多态性加大了测试(含调试)和维护的难度: ● 由于派生类继承了它的全部基类的属性和方法,为了理解和

文档评论(0)

我思故我在 + 关注
实名认证
文档贡献者

部分用户下载打不开,可能是因为word版本过低,用wps打开,然后另存为一个新的,就可以用word打开了

1亿VIP精品文档

相关文档