书签 分享 收藏 举报 版权申诉 / 105
上传文档赚钱

类型[计算机软件及应用]数据抽象与面向对象的程序设计课件(PPT 105页).pptx

  • 上传人(卖家):三亚风情
  • 文档编号:3468843
  • 上传时间:2022-09-02
  • 格式:PPTX
  • 页数:105
  • 大小:451.52KB
  • 【下载声明】
    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一个类的不变式必须包含他的超类的不变式一个类

    26、的不变式必须包含他的超类的不变式n例如,例如,在类在类ISOSCELES-TRIANGLEa=b or b=c or c=an类类 RIGHT-ANGLED-TRIANGLEa*a+b*b=c*c or.n但是两个子类都继承了但是两个子类都继承了a+b c and b+c a and c+a bTRIANGLEISOSCELES-TRIANGLERIGHT-ANGLED-TRIANGLE不变式被继承不变式被继承2022-7-3046鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第46页,共105页。Chap9数据抽象与

    27、面向对象程序设计数据抽象与面向对象程序设计多继承多继承n一个类要从它的所有的超类继承不变式,并且一个类要从它的所有的超类继承不变式,并且“and”在一起在一起TRIANGLEISOSCELES-TRIANGLERIGHT-ANGLED-TRIANGLERIGHT-ISOSCELES-TRIANGLE2022-7-3047鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第47页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计D.前置和后置条件前置和后置条件n每个方法都有一个前置和后置条件每个方法

    28、都有一个前置和后置条件n前置条件是这个方法执行必须具备的条件前置条件是这个方法执行必须具备的条件n如果前置条件得以满足,方法执行后,后置条件如果前置条件得以满足,方法执行后,后置条件成立成立n例如:例如:STACK:popn前置条件前置条件:not emptyn后置条件后置条件:#elements=old#elements-1 and not fulln前置条件和后置条件形成一个合约(前置条件和后置条件形成一个合约(contract)n完整的情形是:完整的情形是:Class invariant and method preconditionMethod executesClass invari

    29、ant and method postcondition2022-7-3048鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第48页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计ExamplenScale_horiz是类是类Rectangle的一个方法,的一个方法,缩放长方形的水平宽度缩放长方形的水平宽度nInv:w1=w2 and h1=h2nPre_Cond.:max_allowed_width=w1*scale_factornPost_Cond.:w1=old w1*scale_fa

    30、ctorRectanglescale_horizRectangle1(scale_factor2022-7-3049鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第49页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计3.OO设计原则设计原则-类和子类的属性类和子类的属性A.类状态空间和行为类状态空间和行为B.子类的状态空间和行为子类的状态空间和行为C.类不变式和状态空间类不变式和状态空间D.方法的前提条件和后置条件方法的前提条件和后置条件E.类型一致的原则类型一致的原则F.作为子类型的子类

    31、作为子类型的子类G.闭合行为原则闭合行为原则n小结小结2022-7-3050鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第50页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计E.The principle of conformancen类型一致性原则类型一致性原则n来自于抽象数据类型原理,它建立了对象适应性来自于抽象数据类型原理,它建立了对象适应性 如果如果S是是T的一个真正的子类型,则的一个真正的子类型,则S必须与必须与T保持一致。保持一致。类型一致性原则类型一致性原则:如果:如果S是

    32、是T的一个子类型,即任何需要类型的一个子类型,即任何需要类型T对对象出现,而且在任何存取方法执行时都需要保持正确性的场合,象出现,而且在任何存取方法执行时都需要保持正确性的场合,都可以使用类型都可以使用类型S的对象,则的对象,则S就同就同T是一致的。是一致的。例如,例如,circle是是Ellipse的一个子类的一个子类2022-7-3051鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第51页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计n例如:例如:n任何需要任何需要RECTANGLE

    33、 类的对象作为参数的方法,使类的对象作为参数的方法,使用用SQUARE 类的对象替代是受欢迎的类的对象替代是受欢迎的n任何一个任何一个 square对象也是一个对象也是一个rectangle-a very regular one!nCode in some-methodsome-method(rectangle1:RECTANGLE;);.rectangle-perim:=rectangle1.perimeter;.some-object:SOME-CLASSsome-method(square1;)rectangle1:RECTANGLE/perimeterSQUARERECTANGLE20

    34、22-7-3052鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第52页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计nWhats the difference between these two?nThe result of this is a rotated square1nThe result of this is a stretched square1!some-object:SOME-CLASSsome-method(square1;)rectangle1:RECTANGLEro

    35、tate(rotation-angle;)some-object:SOME-CLASSsome-method(square1;)rectangle1:RECTANGLEstretch-horiz(stretch-factor;)SQUARERECTANGLE2022-7-3053鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第53页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计类型一致原则类型一致原则n类型一致原则对于创建类型一致原则对于创建可靠和健壮可靠和健壮的层次非常重要的层次非常重要

    36、n最好将类作为类型的实现,它是一个类的抽象或外在的视图最好将类作为类型的实现,它是一个类的抽象或外在的视图n尽管类型代表了类的外部设计,但是子类型没有必要同尽管类型代表了类的外部设计,但是子类型没有必要同子类相同子类相同n子类不总是子类型子类不总是子类型n从句法上说,任何一个类都可以从另一个类继承过来从句法上说,任何一个类都可以从另一个类继承过来n子类应该遵循类型一致性原则子类应该遵循类型一致性原则n一个好的软件工程设计,子类的设计应该服从子类型的设计一个好的软件工程设计,子类的设计应该服从子类型的设计(subclassing should follow subtyping)2022-7-30

    37、54鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第54页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计F.作为子类型的子类作为子类型的子类n一个合理的一个合理的OOOO设计中,设计中,类类/子类继承层次子类继承层次应当与类型应当与类型/子类型层次一致子类型层次一致。因此,应。因此,应当把每个子类设计成每个父类的子类型,当把每个子类设计成每个父类的子类型,且应当遵循类型一致原则。且应当遵循类型一致原则。n如何确认一个子类是真正的、忠实的合乎如何确认一个子类是真正的、忠实的合乎规则的子类型?

    38、即子类的类型和父类的类规则的子类型?即子类的类型和父类的类型保持一致所要做的工作是:型保持一致所要做的工作是:n从从类不变式、方法的前置和后置条件、状态类不变式、方法的前置和后置条件、状态空间和行为空间和行为等方面等方面加以约束加以约束2022-7-3055鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第55页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计作为子类型的子类作为子类型的子类n为了确认子类的类型一致,需要满足:为了确认子类的类型一致,需要满足:(1)保证子类的不变式至少与父类的

    39、不变式一样)保证子类的不变式至少与父类的不变式一样强。即强。即Inv.Of Child Inv.Of Parent.n例如,例如,Rectangle有有w1=w2 and h1=h2;而而Square有有w1=w2 and h1=h2 and w1=h1.PC0123456789101112curr-weightstate-space of AUTOMOBILEstate-space of ROAD-VEHICLE2022-7-3056鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第56页,共105页。作为子类型的子类

    40、作为子类型的子类为了确认子类的类型一致,需要满足:为了确认子类的类型一致,需要满足:(2)应该保证下面对方法的三个约束:)应该保证下面对方法的三个约束:n每个父类的方法都应该在子类中有名字以及签名和它相同的相关方法;每个父类的方法都应该在子类中有名字以及签名和它相同的相关方法;nC:m的前置条件不强于的前置条件不强于P:m的的。这称为。这称为“逆变性逆变性(Contravariance)”。因。因为子类的方法的前提条件的作用与类为子类的方法的前提条件的作用与类Inv的作用方向相反。这样满足父的作用方向相反。这样满足父类的输入才能满足子类的条件。类的输入才能满足子类的条件。n特别地,传给特别地,

    41、传给 C:m的参数必须与的参数必须与P:m的相同,或者是它的超类的相同,或者是它的超类nC:m方法的后置条件不弱于方法的后置条件不弱于P:m的的。这称为。这称为“协变性协变性(Covariance)”。因为子类的方法的后置条件的作用与类因为子类的方法的后置条件的作用与类Inv的作用方向相同。的作用方向相同。n特别地特别地,C:m的返回参数必须与的返回参数必须与P:m相同,或者是它的子类型。相同,或者是它的子类型。2022-7-3057鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第57页,共105页。Chap9数据抽象

    42、与面向对象程序设计数据抽象与面向对象程序设计Contravariance and covariancenP:m(in-args,out-args)being invokednC:m(in-args,out-args)being invokedinvokedmethod P:minvokingmethodinvokingmethodactual input argumentsformal input argumentsformal output argumentsactual output argumentsinvokedmethod C:minvokingmethodinvokingmetho

    43、dactual input argumentsformal input argumentsformal output argumentsactual output arguments2022-7-3058鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第58页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计n举例:举例:nMANAGER是是EMPLOYEE的子类的子类n方法方法 calc-bonus(perf-eval;bonus-pct)在类在类EMPLOYEE和和类类MANAGER中都定义

    44、中都定义n因此,在因此,在MANAGER中中perf-eval应该遵循应该遵循 contravariance,n且,在且,在MANAGER中中bonus-pct 应遵循应遵循 covarianceEMPLOYEE/calc-bonus(perf-eval;bonus-pct)MANAGER/calc-bonus(perf-eval;bonus-pct)2022-7-3059鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第59页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计nContrava

    45、riancen方法方法MANAGER:calc-bonus(perf-eval;bonus-pct)中输入参数中输入参数perf-eval的可能范的可能范围是:围是:0123456789101112perf-evallegal rangesillegal rangesrange of perf-eval defined in EMPLOYEE:calc-bonusExample2022-7-3060鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第60页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象

    46、程序设计nCovariancenPossible ranges for output argument bonus-pct in MANAGER:calc-bonus(perf-eval;bonus-pct)0123456789101112bonus-pctlegal rangesillegal rangesrange of bonus-pct defined in EMPLOYEE:calc-bonusExample2022-7-3061鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 All Rights Reserved 第61页,共105页。Chap9数

    47、据抽象与面向对象程序设计数据抽象与面向对象程序设计The principle of type conformancen如何使子类成为子类型,对设计合理的类层次十分重如何使子类成为子类型,对设计合理的类层次十分重要要n使子类使子类C成为类成为类P的真正子类型,必须满足下面的的真正子类型,必须满足下面的6个约束:个约束:n头两条适用于整个类头两条适用于整个类n 后四条使用于单个方法后四条使用于单个方法1.C的状态空间必须同的状态空间必须同P有相同的维度有相同的维度n但是但是C可以从可以从P的状态空间扩展维度的状态空间扩展维度2022-7-3062鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所

    48、程序设计方法学程序设计方法学 All Rights Reserved 第62页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计2.In the dimensions that C and P share,the state-space of C must either be equal to or lie within the state-space of P在在C和和P共有的维上,共有的维上,C:状态空间状态空间P:状态空间状态空间nAnother way to say this is,The class invariant of C must be equal

    49、to or stronger than that of P换句话说:换句话说:C:Inv P:Invn对每个对每个C用用C:m 覆盖的覆盖的P的方法的方法P:m,满足:,满足:3.C:m must have the same name as P:m4.C:ms formal signature must list its arguments in the same order as P:ms formal signatureThe principle of type conformance2022-7-3063鲍玉斌鲍玉斌 东大信息学院软件所东大信息学院软件所 程序设计方法学程序设计方法学 A

    50、ll Rights Reserved 第63页,共105页。Chap9数据抽象与面向对象程序设计数据抽象与面向对象程序设计The principle of type conformance5 The precondition of C:m must be equal to or weaker than that of P:m P:m的的PreCond C:m的的PreCondn特别地,特别地,C:m的每个形式化输入参数必须是相的每个形式化输入参数必须是相应的应的P:m的超类型或同样的类型的超类型或同样的类型nThis is the principle of contravariance这是这是

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:[计算机软件及应用]数据抽象与面向对象的程序设计课件(PPT 105页).pptx
    链接地址:https://www.163wenku.com/p-3468843.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库