软件构造复习总结(2_2)

        快要考试了,根据所给提纲和上课所学边复习边罗列一下重难点吧。学得不好,如有疏漏欢迎指正!
 

一、ADT操作的四种类型

        ADT:抽象数据类型,强调“作用于数据上的操作”,程序员和用户均无需关心数据如何具体存储,只需设计/使用操作即可。即ADT是由操作定义的,与内部如何实现无关。

四种类型:

(1)Creator:创建该类型的新对象,可作为构造函数来实现,静态实现的通常称为工厂方法

(2)Producer:从该类型的旧对象创建新对象

(3)Observer:获取抽象类型对象并返回不同类型的对象

(4)Mutator:改变对象,通常为void,此时必须被调用,有时返回boolean。(immutable一定不含)

Example: 

二、表示独立性

        ADT内部的变化不应影响外部spec和客户端

三、表示泄露

        ADT的实现可见、可被客户端修改

四、不变量、表示不变量RI

(1)不变量:程序的属性,每个抽象数据类型都应保有自己的不变量,这些不变量被构造函数创建后保持不变,其正确性不依赖于其他模块,由公共方法调用维护,方法执行期间可能暂时失效。

(2)表示不变量RI:RI将表示值映射为Boolean,当该值能被映射到AF中时为真

五、表示空间、抽象空间、AF

        开发者关注表示空间R、用户关注抽象空间A

        二者联系:

                (1)满射:所有A都有对应。

                (2)未必单射:A可以对应多R,但R不能对应多A。(可以,但最好单射)

                (3)未必双射:R无A对应。

       

         AF:抽象函数R --> A,即R在A中的解

六、以注释的形式撰写AF、RI

不同的内部表示,需要设计不同的AF和RI

即使是同样的R、同样的RI,也 可能有不同的AF,即“解释不同”

设计ADT:(1) 选择R和A;

                  (2) RI --- 合法的表示值;

                  (3) 如何解释合法的表示值 ---映射AF

做出具体的解释:每个rep value如何映射到abstract value

Example:

七、接口、抽象类、具体类

        接口:确定ADT归约

        类:实现ADT

注:

        (1)接口中的每个方法在所有类中都要实现

        (2)通过default方法,在接口中统一实现某些功能,无需在各个类中重复实现它

        (3)以增量式的为接口增加额外的功能而不破坏已实现的类

        抽象类:至少包含一个抽象方法的类,即在父类中未给出具体实现

        具体类:不包含抽象方法

八、继承、override

        严格继承:子类只能添加新的方法,无法重写父类中的方法

        override:完全同样的signature,调用哪个方法在运行时决定

        重写的时候不能改变原方法的本意。

九、多态、overload

        三种多态类型:特殊多态、参数化多态、子类/包含多态

        Example:

 

        overload:多个方法具有同样的名字,但有不同的参数列表或返回值类型

                意义:方便用户调用,用户可用不同的参数列表调用同样的函数

注:

        (1)参数列表必须不同

        (2)返回值类型可以不同

        (3)public等属性可以不同

        (4)异常可以不同

        (5)可以在同一个类内重载,也可以在不同子类中重载

对比:

        重载看类型,重写看对象

十、泛型

        泛型:数据类型和函数根据待指定的类型编写,在需要时作为参数提供的特定类型实例化

        四种使用方式:泛型类声明、泛型接口声明、泛型方法声明、泛型构造函数

   泛型类:声明了一个或多个类型变量的类,类型变量用<>括起

        通配符:通常用 * 或 ? 表示,如List<?> 或 List<? extends Animal>

                只能在使用泛型的时候出现,不能在定义中出现

        不能存在泛型数组

Example:

十一、等价性equals()和==

        ==:引用等价性,对于基本数据类型的判断

        equals:对象等价性,在自定义ADT时需要重写

Example:

十二、equals的自反、传递、对称

        传递常难以满足

        其他性质:不可改、不能与空作比较

十三、hashCode()

        (1)等价的对象必须有相同的hashCode

        (2)不相等的对象也可以映射为同样的hashCode,但性能会变差

        (3)重写equals就最好要重写hashCode

十四、不可变对象的引用等价性、对象等价性

        immutable类型对象在程序执行任何时间都相等,故只考虑引用/对象等价性

十五、可变对象的观察等价性、行为等价性

        观察等价性:在不改变状态的情况下,两个mutable对象是否看起来一致(一个点)

        行为等价性:调用任何对象的方法都展示出一样的结果(一条时间线)

        对于可变类型,实现行为等价性即可,无需重写equals、hashCode函数

Negative example:

        若某个mutable的对象包含在set集合类中,当其发生改变后,集合类的行为不确定。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值