[计算机软件及应用]数据抽象与面向对象的程序设计课件(PPT 105页).pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[计算机软件及应用]数据抽象与面向对象的程序设计课件(PPT 105页).pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件及应用 计算机软件及应用数据抽象与面向对象的程序设计课件PPT 105页 计算机软件 应用 数据 抽象 面向 对象 程序设计 课件 PPT 105
- 资源描述:
-
1、Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计Outline1.大型程序设计概述大型程序设计概述2.数据抽象数据抽象3.抽象数据类型的形式规范描述抽象数据类型的形式规范描述4.面向对象概述面向对象概述 4.1 OO技术优势技术优势 4.2 OO基本概念基本概念5.面向对象设计的过程面向对象设计的过程6.OOM vs 传统面向过程方法传统面向过程方法7.面向对象设计的基本原则面向对象设计的基本原则2022-7-301鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第1页,共105页。Chap9数据抽象与面向
2、对象程序设计数据抽象与面向对象程序设计9.7 OOD的基本原则的基本原则1.封装和同源封装和同源2.域、相关度和内聚域、相关度和内聚3.类和子类的属性类和子类的属性4.继承和多态的危险性继承和多态的危险性5.类接口类接口6.可复用可复用OO设计原则设计原则优秀的优秀的OO设计规则及评估设计质量的标准。设计规则及评估设计质量的标准。什么样的设计是优秀的什么样的设计是优秀的OOD?代码是可扩展、可维护的。代码是可扩展、可维护的。2022-7-302鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第2页,共105页。Chap9
3、数据抽象与面向对象程序设计数据抽象与面向对象程序设计1.OO设计原则封装和同源设计原则封装和同源nEncapsulation structure封装结构封装结构nConnascence同源同源2022-7-303鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第3页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计1.OO设计原则设计原则封装封装和同源和同源Level 2:The object/class structure 对对象象/类结构类结构封装结构的三个封装层次封装结构的三个封装层次Le
4、vel 0:Raw lines of code原始代码行原始代码行Level 1:Standard structured design modules过程化单元过程化单元2022-7-304鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第4页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计1.OO设计原则设计原则封装封装和同源和同源n控制封装层次交互的设计标准控制封装层次交互的设计标准n显示哪种标准适合于哪个层次;显示哪种标准适合于哪个层次;n结构化编程结构化编程的原则规定了代码行和同一过程
5、的其他代码行之间的关系的原则规定了代码行和同一过程的其他代码行之间的关系n扇出:扇出:是在一个给定过程中代码行从其他过程中所作引用的数目是在一个给定过程中代码行从其他过程中所作引用的数目n内聚内聚:是一个给定过程的代码行对实现过程目标的聚合度:是一个给定过程的代码行对实现过程目标的聚合度n耦合耦合:描述过程之间联系的数目和力度:描述过程之间联系的数目和力度n类内聚类内聚:表示与实现类目标有关的各个方法之间相互之间的聚合度:表示与实现类目标有关的各个方法之间相互之间的聚合度n类耦合类耦合:描述类间联系的数目和力度:描述类间联系的数目和力度到到 从从 层次层次0(代码行代码行)层次层次1(过程过程
6、)层次层次2(类类)层次层次0结构化编程结构化编程扇出扇出层次层次1内聚内聚耦合耦合层次层次2类内聚类内聚类耦合类耦合方方法法类类私有私有变量变量2022-7-305鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第5页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计1.OO设计原则封装和设计原则封装和同源同源 Two software elements that are connascent share the same fate for at least one reason 两个软件元素
7、在生命中有相同的命运两个软件元素在生命中有相同的命运 Could use the term coupling 耦合耦合 两个软件组件同源的含义是指:两个软件组件同源的含义是指:为保持正确性,改变一个元素,另一个必须随之改变,或至少需要检查它;为保持正确性,改变一个元素,另一个必须随之改变,或至少需要检查它;可以假定某种变化,需要两个同源的组件同时变化以保持整体的正确性。可以假定某种变化,需要两个同源的组件同时变化以保持整体的正确性。Simple example 类型同源类型同源 名字同源名字同源Connascence同源同源int i;/Line A.i:=7;/Line B.如果行如果行A变
8、成变成 Char i;则行则行B需要变化,需要变化,则称为类型同源则称为类型同源若行若行A变成变成 int j;则行则行B应变成应变成 j:=7,则称为名称同源则称为名称同源2022-7-306鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第6页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计同源的多样性同源的多样性n外在同源外在同源n如名字同源和类型同源如名字同源和类型同源n内在同源内在同源n如汇编代码中如汇编代码中:X:JUMP Y+38Y:Clear R1 /这里有这里有38个字节个字
9、节Z:Clear R2 /这是从这是从X处跳转过来执行的指令处跳转过来执行的指令.n在在Y和和Z之间有精确的之间有精确的38字节字节n同源表现的越内在,发现同源的时间耗费越多,除非在合适同源表现的越内在,发现同源的时间耗费越多,除非在合适的位置做了详细的文档说明。在类库或其他文档中相距较大的位置做了详细的文档说明。在类库或其他文档中相距较大的同源处理起来很费时且很难发现。的同源处理起来很费时且很难发现。2022-7-307鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第7页,共105页。Chap9数据抽象与面向对象程序
10、设计数据抽象与面向对象程序设计同源的多样性同源的多样性n静态同源的多样性静态同源的多样性n名称同源名称同源n例如两个变量需要有相同的名字指向相同的东西例如两个变量需要有相同的名字指向相同的东西n类继承中,子类明显地使用了父类的变量名字。类继承中,子类明显地使用了父类的变量名字。n类型或者类同源类型或者类同源nInt I;I:=7;n意义同源意义同源n例如,假设帐号例如,假设帐号acc_num为正,表示个人帐号,为负表示企业的,为零为正,表示个人帐号,为负表示企业的,为零属于内部的,则代码属于内部的,则代码If order.acc_num0 then n在所有同帐号相关的软件组件之间就有意义上的
11、同源在所有同帐号相关的软件组件之间就有意义上的同源n算法同源算法同源n例如,例如,检验检验帐号的算法和帐号的算法和检查检查帐号的算法之间;帐号的算法之间;n构造构造Hash函数和利用函数和利用Hash函数查找的算法函数查找的算法n位置同源位置同源n过程化单元中的多数代码有位置同源,需要以正确的顺序执行;形式过程化单元中的多数代码有位置同源,需要以正确的顺序执行;形式化参数和实在参数之间具有位置同源化参数和实在参数之间具有位置同源2022-7-308鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第8页,共105页。Cha
12、p9数据抽象与面向对象程序设计数据抽象与面向对象程序设计同源的多样性同源的多样性n动态同源是基于代码的执行形式的同源动态同源是基于代码的执行形式的同源n执行同源:执行同源:n与位置同源等价的同源与位置同源等价的同源n时间同源:时间同源:n出现在实时系统中,如,关闭出现在实时系统中,如,关闭X-Ray机器的指令必须在打开机器的指令必须在打开他的指令后的他的指令后的n毫秒内执行;毫秒内执行;n数值同源:数值同源:n经常包括一些算术限制。如,一个矩形的四角需要保持经常包括一些算术限制。如,一个矩形的四角需要保持一定的关系;一定的关系;n本体同源:本体同源:n面向对象系统中经常使用的限制。两个对象面向
13、对象系统中经常使用的限制。两个对象o1和和o2,每每个都有一个变量指向另一个相同的对象,而且必须总是个都有一个变量指向另一个相同的对象,而且必须总是指向相同的对象。指向相同的对象。动态同源的多样性动态同源的多样性2022-7-309鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第9页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计逆向同源逆向同源n同源等同于同源等同于“相同相同”或或“相关相关”n逆向同源:逆向同源:“差别同源差别同源”或或“否定同否定同源源”n逆向同源保持了不同性,而不是等
14、同性逆向同源保持了不同性,而不是等同性n例如,例如,nint I;int j;若若j改为改为I,则则I必须改名必须改名n类类C同时从类同时从类A和类和类B继承而来,则继承而来,则A和和B的方的方法就应该有不同的名字。法就应该有不同的名字。产生了产生了A的方法和的方法和B的方法之间的名称的逆向同源的方法之间的名称的逆向同源。2022-7-3010鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第10页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计同源与封装边界同源与封装边界n同源和逆同源同源和
15、逆同源是现代软件工程的核心;是现代软件工程的核心;n封装是逆向同源的封装是逆向同源的一个检测手段一个检测手段n设想一个有设想一个有10万行代码的系统,需要给一个新变量起名,简直是万行代码的系统,需要给一个新变量起名,简直是个恶梦。个恶梦。n同源同源也是也是OO具有优势的原因。具有优势的原因。OO平滑了在封装层次平滑了在封装层次1上上的一些同源。例如,的一些同源。例如,n封装层次封装层次1中的中的Hash表,更新表的位置和检索表的位置,具有表,更新表的位置和检索表的位置,具有算法同源。如果想更换算法同源。如果想更换Hash的实现算法,需要找出所有与此的实现算法,需要找出所有与此Hash有关的代码
16、;有关的代码;n封装层次封装层次1不会引导维护者到达这些位置;而封装层次不会引导维护者到达这些位置;而封装层次2可以有效可以有效地控制与该地控制与该Hash有关的数据和方法在一个独立的组件的边界之有关的数据和方法在一个独立的组件的边界之内。内。方方法法类类私有私有变量变量2022-7-3011鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第11页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计同源与可维护性同源与可维护性n同源提供了三个提高系统可维护性的原则同源提供了三个提高系统可维护性的原
17、则n通过将系统分割为封装组件来减少整体的同源;通过将系统分割为封装组件来减少整体的同源;n减少封装边界间的任何保留的同源;减少封装边界间的任何保留的同源;n在封装内部对同源最大化;在封装内部对同源最大化;设计准则:将相似的元素结合起来,将不相似的元素分开设计准则:将相似的元素结合起来,将不相似的元素分开方法方法类类私有变量私有变量同源代表了软件互相依赖性同源代表了软件互相依赖性的集合;的集合;外在同源在源代码中很明外在同源在源代码中很明显;可以使用编辑器查找;显;可以使用编辑器查找;内在同源则只有靠直觉内在同源则只有靠直觉发现,或参考文档。发现,或参考文档。2022-7-3012鲍玉斌鲍玉斌
18、东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第12页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计OO系统中的同源滥用系统中的同源滥用(1/2)nC+友元函数:友元函数:抵消了封装带来的好处抵消了封装带来的好处nC+的友元极大地违反了封装边界。它是类边的友元极大地违反了封装边界。它是类边界之外的组件,可以存取类的对象的私有元素;界之外的组件,可以存取类的对象的私有元素;n友元可用于测试对象的内部状态;友元可用于测试对象的内部状态;Class A public:void display()cout xg
19、etClassB()-getClassC()-getClassD()-getTimer();n问题:问题:nClassB,ClassC,ClassD都是都是Class Client的陌生人;的陌生人;n为反了为反了“不和陌生人讲话不和陌生人讲话”的原则的原则n解决方法:解决方法:n为为ClassA添加一个职责添加一个职责getTimer(),这样这样Client只需调用只需调用ClassA的的getTimer方法即可。方法即可。2022-7-3029鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第29页,共105页。C
20、hap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计类内聚:类和它的方法类内聚:类和它的方法n类内聚是类内聚是衡量类的外部接口中的方法间的联系尺度衡量类的外部接口中的方法间的联系尺度。类内聚的。类内聚的封装层次高于模块的内聚。封装层次高于模块的内聚。n具有具有较低内聚较低内聚的类具有一些彼此的类具有一些彼此不相关联不相关联的方法。的方法。n具有具有高内聚度高内聚度的类方法通过类实现彼此相关的数据抽象。的类方法通过类实现彼此相关的数据抽象。n可以认为方法使用的变量的重叠度越大,类的内聚度越高。但可以认为方法使用的变量的重叠度越大,类的内聚度越高。但是类内聚是在封装单元外是类内聚是在封装单
21、元外不可见不可见的属性。因此通过访问类内部来的属性。因此通过访问类内部来评估类内聚是错误的。第三方如何评价?评估类内聚是错误的。第三方如何评价?n从类的外部设计可以看到,在将从类的外部设计可以看到,在将方法分配给类时存在方法分配给类时存在的问题包的问题包括括混合实例、混合域、混合角色内聚。混合实例、混合域、混合角色内聚。其中混合实例危害最大,其中混合实例危害最大,混合角色危害最小。没有任何一个上述问题的类称为混合角色危害最小。没有任何一个上述问题的类称为完全内聚的类,完全内聚的类,是理想的内聚。是理想的内聚。方方法法类类私有变私有变量量2022-7-3030鲍玉斌鲍玉斌 东大信息学院软件所东大
22、信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第30页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计类内聚混合实例内聚类内聚混合实例内聚n混合实例内聚的类中拥有这样的组件(尤其是方法):混合实例内聚的类中拥有这样的组件(尤其是方法):这些组件中一些类的对象没有定义。例,这些组件中一些类的对象没有定义。例,n销售部的销售人员有委托销售人和非委托销售人。销售部的销售人员有委托销售人和非委托销售人。n设设Fred是委托销售人,是委托销售人,Mary是非委托销售人。是非委托销售人。n在销售部的应用中存在一个类在销售部的应用中存在一个
23、类SALESPERSON,变量变量fred和和mary指向的对象是它的两个实例。指向的对象是它的两个实例。n则,考察语句则,考察语句fred.issue_commission_pmt;/有意义有意义mary.issue_commission_pmt;/没有意义没有意义n解决方法在类解决方法在类SALESPERSON中设置一个变量中设置一个变量whether_commissioned:BOOL,且在方法且在方法issue_commission中包含一个中包含一个 if 语句防止为非委托对象执行语句防止为非委托对象执行打印¥打印¥0.00的支票的任务。可以,但是较糟糕的支票的任务。可以,但是较糟糕
24、2022-7-3031鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第31页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计类内聚混合实例内聚(续)类内聚混合实例内聚(续)n问题在于问题在于n类类SALESPERSON具有混合实例内聚。将委托对象和具有混合实例内聚。将委托对象和非委托对象同时作为一类。非委托对象同时作为一类。n解决:定义两个类解决:定义两个类COMM_SALESPERSON和和NONCOMM_SALESPERSON。给前者分配给前者分配commission方法,后者没有。方法
25、,后者没有。SALESPERSONCOMM_SALESPERSONCOMM_SALESPERSON c and b+c a and c+a bn一个对象必须遵循他的类的不变式一个对象必须遵循他的类的不变式n当他被实例化和初始化时;当他被实例化和初始化时;n任何公有的方法执行之后。任何公有的方法执行之后。TRIANGLEbac2022-7-3045鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第45页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计n一个类的不变式必须包含他的超类的不变式一个类
展开阅读全文