ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

哈工大软件构造复习3(6,7)

2022-06-13 19:33:53  阅读:657  来源: 互联网

标签:表示 ADT 复习 子类 多态 哈工大 类型 软件 重写


6 Abstract Data Type (ADT)

ADT:抽象数据类型

ADT的特性:表示泄漏、抽象函数AF、表示不变量RI

Creators:构造器 Producers:生产器 Observers:观察器 Mutators:变值器   不可变数据类型没有变值器 重点: String类型: creators: String constructors producers: concat , substring , toUpperCase observers: length , charAt mutators: none   List类型: creators: ArrayList andLinkedList constructors,Collections.singletonList producers:Collections.unmodifiableList observers: size , get mutators: add , remove , addAll ,Collections.sort   表示独立性:用户使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应影响外部规约和客户端。除非ADT的操作指明了具体的前置条件和后置条件,否则不能改变ADT的内部表

 

不变性:在程序运行中程序始终保持不变,例如immutability就是一个典型的”不变量“,在任何时候都表现为相同的值。ADT有责任来保持其不变性而非依赖于用户和其他模块。

不变量在任何时候都是true。

表示泄露:不仅影响不变性,也影响了表示独立性:无法在不影响客户端的情况下改变其内部表示

 

 避免泄露的方法:

(1)将public修改为private/ final

(2)返回时防御式拷贝

(3)返回时使用Collections.unmodifiableSet()

RI:表示不变性  AF:抽象方法

 

 

R:表示空间,包括实际实现时的值。

A:抽象空间,包括用户看到和使用的值。

ADT开发者关注表示空间R,而用户关注抽象空间A。

从R空间到A空间的映射是满射,但未必是单射,也未必是双射。

 

抽象函数:R和A之间映射关系的函数,即如何去解释R中的每一个值为A中的每一个值。 表示不变性RI:某个具体的“表示”是否是“合法的” 也可将RI看作:所有表示值的一个子集,包含了所有合法的表示值或者一个条件,描述了什么是“合法”的表示值   例子:

 

 

由题意,s的长度为偶数因此tvv和tuv被干掉了,AF的含义是是s[2i]->s[2i+1]之间的所有字母

因此2和3是正确的,{t,u,v}

7 Object-Oriented Programming (OOP)

静态/实例方法:

在类中使用static修饰的静态方法会随着类的定义而被分配和装载入内存中;而非静态方法属于对象的具体实例,只有在类的对象创建时在对象的内存中才有这个方法的代码段

编译器只为整个类创建了一个静态变量的副本,也就是只分配一个内存空间,虽然可能有多个实例,但这些实例共享该内存

Interface和Class: 定义和实现ADT 接口之间可以继承与扩展 一个类可以实现多个接口(从而具备了多个接口中的方法) 一个接口可以有多种实现类   重写: 严格继承:子类只能添加新方法,无法重写超类中的方法 如果一个java中方法不能被重写,必须要加上前缀final   对某些子类型来说,有特殊性,故重写父类型中的函数,实现自己的特殊要求 重写时,不应该改变方法的本意   多态: 类型:特殊多态(重载),参数化多态,子类型多态 重载: 多个方法具有同样的名字,但有不同的参数列表或返回值类型 优势: 方便用户调用,用户可用不同的参数列表,调用同样的函数 重载是一种静态多态,根据参数列表进行"最佳匹配",在build-time 编译过程进行静态类型检查,重写则是 在run-time进行dynamic checking 要点: 1)参数列表必须不同
2)相同/不同的返回值类型
3)相同/不同的public/private/protected
4)可以声明新的异常   重写和重载对比

 

重载参数发生了改变

 

泛型擦除:运行时泛型类型消除(如:List<String>运行时是不知道String的),所以,不能使用泛型数组

重写时,子类的规约要强于父类的规约(更弱的前置条件,更强的后置条件)
子类的可见性要强于父类(即父类如果是public,子类不能为private)
子类不能比父类抛出更多的异常   子类型多态:不同类型的对象可以统一的处理而无需区分  

标签:表示,ADT,复习,子类,多态,哈工大,类型,软件,重写
来源: https://www.cnblogs.com/hit-srl/p/16371598.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有