面向对象实现ppt课件_第1页
面向对象实现ppt课件_第2页
面向对象实现ppt课件_第3页
面向对象实现ppt课件_第4页
面向对象实现ppt课件_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象实现第十二章张海藩 软件工程导论 (第 5版 )Date 1面向对象实现 的两项工作 面向对象实现主要包括两项工作: 把面向对象设计结果翻译成用某种程序语言书写的面向对象程序; 测试并调试面向对象的程序。Date 2面向对象程序 的质量 面向对象程序的质量基本上由 面向对象设计的质量决定。 所采用的 程序语言的特点 和 程序设计风格 也将对程序的可靠性、可重用性及可维护性产生深远影响。Date 3面向对象测试 的特殊性 目前,软件测试仍然是保证软件可靠性的主要措施,对于面向对象的软件来说,情况也是如此。 面向对象测试的目标,也是用尽可能低的测试成本发现尽可能多的软件错误。 面向对象程序中特有的封装、继承和多态等机制, 给面向对象测试带来一些新特点,增加了测试和调试的难度 。Date 4主要内容程序设计语言程序设计语言程序设计风格程序设计风格测试策略测试策略设计测试用例设计测试用例Date 5“程序设计语言 ”主要内容面向对象语言的优点面向对象语言的技术特点选择面向对象语言Date 6面向对象设计结果 的实现 面向对象设计的结果 既可以用面向对象语言,也可以用非面向对象语言实现。 使用面向对象语言时,由于语言本身充分支持面向对象概念的实现,因此,编译程序可以自动把面向对象概念映射到目标程序中。 使用非面向对象语言编写面向对象程序,则必须由程序员自己把面向对象概念映射到目标程序中。 例如, C语言并不直接支持类或对象的概念,程序员只能在struct中定义变量和相应的函数(事实上,不能直接在结构中定义函数而是要利用指针间接定义)。 所有非面向对象语言都不支持一般 -特殊结构的实现,使用这类语言时要么完全回避继承的概念,要么在声明特殊化类时,把一般化类的引用嵌套在它里面。Date 7选用语言的关键 选用面向对象语言还是非面向对象语言,关键不在于语言功能强弱。 从原理上说,使用任何一种通用语言都可以实现面向对象概念。 当然,使用面向对象语言,实现面向对象概念,远比使用非面向对象语言方便, 但方便性不是决定选择何种语言的关键因素 。 选择编程语言的关键因素,是语言的 一致的表达能力 、 可重用性 及 可维护性 。 从面向对象观点看来,能够更完整、更准确地 表达问题域语义 的面向对象语言的语法是非常重要的,因为这会带来一些重要优点: 一致的表示方式 可重用性 可维护性Date 8面向对象语言的重要优点 -1一致的表示方法 面向对象的开发基于不随时间变化的、一致的表示方法。 这种表示方法应该从问题域到OOA,从 OOA到 OOD,最后从 OOD面OOP,始终保持不变。 在软件开发的全过程中始终保持表示方法稳定不变, 既有利于在软件开发过程中使用统一的概念,又有利于维护人员理解软件的各种配置成分。Date 9面向对象语言的重要优点 -2可重用性 为了能带来可观的商业利益,必须在更广泛的范围中运用重用机制,而不仅仅在程序设计这个层次上进行重用。 在 OOA, OOD直到 OOP中都始终 显式地表示问题域语义 ,意义十分深远。 这样做既可能重用 OOA结果; 也可能重用相应的 OOD和 OOP结果。Date 10面向对象语言的重要优点 -3可维护性 尽管人们反复强调保持 文档 与 源程序 一致 的必要性,但实际工作很难做到在交付软件系统时, “文档 ”和 “源程序 ” 这两个软件配置的不同成分 保持完全一致 ,即维护人员面对的往往只有源程序本身。 因此,程序内部表达问题域语义,对维护人员理解待维护的软件有很大帮助。 以 ATM系统为例。假设在维护该系统时没有合适的文档资料可供参阅,于是维护人员人工浏览程序或使用软件工具扫描程序,记下或打印出程序显式陈述的问题域语义,维护人员看到 “ATM”、 “账户 ”、 “现金兑换卡 ”等,这对维护人员理解所要维护的软件将有很大帮助。Date 11为什么选择 面向对象语言 ? 在选择编程语言时,应该考虑的首要因素,是在供选择的语言中 哪个语言能最好地表达问题域语义 。 一般说来,应该尽量选用面向对象语言来实现面向对象分析、设计的结果。Date 12“程序设计语言 ”主要内容面向对象语言的优点面向对象语言的技术特点选择面向对象语言Date 13面向对象语言借鉴了历史上许多程序语言的特点 面向对象语言的形成借鉴了历史上许多程序语言的特点,从中吸取了丰富的营养: 从 20世纪 50年代诞生的 LIST语言中引进了动态联编的概念和交互式开发环境的思想; 从 20世纪 60年代推出的 SIMULA语言中引进了类的概念和继承机制; 还爱到 20世纪 70年代末期开发的 Modula_2语言和 Ada语言中数据抽象机制的影响。Date 14两大类 面向对象语言 20世纪 80年代以来,面向对象语言大量涌现,形成了两大类: 纯面向对象语言,如 Smalltalk和 Eiffel等语言 混合型面向对象语言,即在过程语言的基础上增加面向对象机制,如 C+ 一般说来: 纯面向对象语言着重支持面向对象方法研究和快速原型的实现 混合型面向对象语言的目标是提高运行速度和使传统程序员容易接受面向对象思想。 成熟的面向对象语言通常都提供丰富的类库和强有力的开发环境。Date 15选择 面向对象语言 时应考察的技术特点 支持类与对象概念的机制。 实现聚集结构的机制。 实现泛化结构的机制。 实现属性和服务的机制。 类型检查机制。 类库。 效率。 持久保存对象的机制。 参数化类的机制。 开发环境。Date 16选择 面向对象语言 时应考察的技术特点 -1支持类与对象概念的机制 所有面向对象语言都允许用户动态创建对象,并且可以用指针引用动态创建的对象。 允许动态创建对象,系统必须处理内存管理问题,及时释放不再需要的对象所占用的内存。 有两种管理内存的方法: 由语言的运行机制自动管理内存,即提供自动回收 “垃圾 ”的机制; 方便而且安全 必须采用先进的 “垃圾收集算法 ”才能减少开销 由程序员编写释放内存的代码。 C+允许程序员定义析构函数。每当一个对象超出范围或被显式删除时,就自动调用析构函数。 使程序员能方便地构造和唤醒释放内存的操作,却又不是垃圾收集机制。Date 17选择 面向对象语言 时应考察的技术特点 -2实现聚集 (整体 -部分) 结构的机制 一般说来,有两种实现方法,分别使用指针和独立的关联对象实现整体 -部分结构。 大多数现有的面向对象语言并不显式支持独立的关联对象,在这种情况下,使用指针是最容易的实现方法,通过增加内部指针可以方便地实现关联。Date 18选择 面向对象语言 时应考察的技术特点 -3实现泛化 (一般 -特殊) 结构的机制 既包括实现继承的机制也包括解决名字冲突的机制。 所谓解决名字冲突,指的是处理在多个基类中可能出现的重名问题, 这个问题仅在支持多重继承的语言中才会遇到 。 某些语言拒绝接受有名字冲突的程序,另一些语言提供了解决冲突的协议。不论使用何种语言,程序员都应该尽力避免出现名字冲突。Date 19选择 面向对象语言 时应考察的技术特点 -4实现属性和服务的机制 对于实现属性的机制应该着重考虑以下几个方面: 支持实例连接的机制; 属性的可见性控制; 对属性值的约束。 对于服务来说,主要应该考虑下列因素: 支持消息连接 (即表达对象交互关系 )的机制; 控制服务可见性的机制; 动态联编。 所谓 动态联编 ,是指应用系统在运行过程中,当需要执行一个特定服务的时候,选择 (或联编 )实现该服务的适当算法的能力。 动态联编机制使得程序员在向对象发送消息时拥有较大自由,在发送消息前,无须知道接受消息的对象当时属于哪个类 。Date 20选择 面向对象语言 时应考察的技术特点 -5类型检查 按编译时进行类型检查的严格程度 可将程序设计语言分为: 弱类型的。语言仅要求每个变量或属性隶属于一个对象; 强类型的。语法规定每个变量或属性必须准确地属于某个 特定的类, C+和 Eiffel是强类型语言。 强类型语言主要有两个优点: 一是有利于在编译时发现程序错误; 二是增加了优化的可能性。 通常使用强类型编译型语言开发软件产品,使用弱类型解释型语言快速开发原型。 强类型语言有助于提高软件的可靠性和运行效率,现代的程序语言理论支持强类型检查,大多数新语言都是强类型的。Date 21选择 面向对象语言 时应考察的技术特点 -6类库 大多数面向对象语言都提供一个实用的类库。 某些语言本身并没有规定提供什么样的类库,而是由实现这种语言的编译系统自行提供类库。 存在类库,许多软构件就不必由程序员重头编写了,这为实现软件重用带来很大方便。 类库中往往包含实现通用数据结构 (例如,动态数组、表、队列、栈、树等等 )的类,通常把这些类称为包容类 。在类库中还可以找到实现各种关联的类。 更完整的类库通常还提供独立于具体设备的接口类 (例如,输入输出流 ),此外,用于实现窗口系统的用户界面类也非常有用,它们构成一个相对独立的图形库。Date 22选择 面向对象语言 时应考察的技术特点 -7效率 事实上,使用拥有完整类库的面向对象语言,有时能比使用非面向对象语言得到运行更快的代码。这是因为 类库中提供了更高效的算法和更好的数据结构 。 认为面向对象语言效率低的另一个理由是,这种语言在运行时使用动态联编实现多态性,这似乎需要在运行时查找继承树,以得到定义给定操作的类。 事实上,绝大多数面向对象语言都优化了这个查找过程,从而实现了高效率查找 。 只要在程序运行时始终保持类结构不变,就能在子类中存储各个操作的正确入口点,从而使得动态联编成为查找哈希表的高效过程,不会由于继承树深度加大或类中定义的操作数增加而降低效率。Date 23选择 面向对象语言 时应考察的技术特点 -8持久保存对象 希望长期保存数据主要出于以下两个原因: 为实现在不同程序之间传递数据,需要保存数据; 为恢复被中断了的程序的运行,首先需要保存数据。 不同语言的策略: C+没有提供直接存储对象的机制。用户必须自己管理对象的输入输出,或购买面向对象的数据库管理系统。 Smalltalk把当前的执行状态完整地保存在磁盘上。还有一些语言提供了访问磁盘对象的输入输出操作。 Eiffel语言采用的策略:通过在类库中增加对象存储管理功能,可以在不改变语言定义或不增加关键字的情况下,就在开发环境中提供这种功能。然后,可以从 “可存储的类 ”中派生出需要持久保存的对象,该对象自然继承了对象存储管理功能。 理想情况下,应该使程序设计语言语法与对象存储管理语法实现无缝集成。Date 24选择 面向对象语言 时应考察的技术特点 -9参数化类 在实际的应用程序中,常常看到这样一些软件元素 (即函数、类等软件成分 ),从它们的逻辑功能看,彼此是相同的,所不同的主要是处理的对象 (数据 )类型不同。 所谓 参数化类 ,就是使用一个或多个类型去参数化一个类的机制。 有了这种机制,程序员就可以先定义一个参数化的类模板(即在类定义中包含以参数形式出现的一个或多个类型 ),然后把数据类型作为参数传递进来,从而把这个类模板应用在不同的应用程序中,或用在同一应用程序的不同部分。 Eiffel语言中有参数化类, C+语言提供了类模板。Date 25选择 面向对象语言 时应考察的技术特点 -10开发环境 软件工具和软件工程环境对软件生产率有很大影响。由于面向对象程序中继承关系和动态联编等引入的特殊复杂性,面向对象语言所提供的软件工具或开发环境就显得尤其重要了。至少应该包括下列一些最基本的软件工具: 编辑程序,编译程序或解释程序,浏览工具,调试器 (debugger)等。 编译程序或解释程序是最基本、最重要的软件工具。编译与解释的差别主要是速度和效率不同。 在评价调试器时: 首先应该弄清楚它是针对原始的面向对象源程序,还是针对中间代码进行调试。如果是针对中间代码进行调试,则会给调试人员带来许多不便。 此外,面向对象的调试器,应该能够查看属性值和分析消息连接的后果。Date 26“程序设计语言 ”主要内容面向对象语言的优点面向对象语言的技术特点选择面向对象语言Date 27选择 面向对象语言 的实际因素 将来能否占主导地位。 可重用性。 类库和开发环境。 语言、开发环境和类库这 3个因素综合起来,共同决定可重用性。 考虑类库的时候,不仅应考虑是否提供了类库,还应该考虑类库中提供了哪些有价值的类。 为便于积累可重用的类和重用已有的类,在开发环境中,还应该提供使用方便的类库编辑工具和浏览工具。 其他因素 对用户学习面向对象分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论