HIT软件构造OOP学习笔记

Object-Oriented Programming (OOP) 面向对象的编程

用OOP/接口/类实现ADT

OOP的基本概念

封装与信息隐藏

继承与重写

多态、子类型、重载

静态与动态分派

– Interface和Class: 定义和实现ADT

– 接口中只有方法的定义,没有实现

– 接口之间可以继承与扩展

– 一个类可以实现多个接口(从而具备了多个接口中的方法)

– 一个接口可以有多种实现类

接口:确定ADT规约;类:实现ADT

也可以不需要接口直接使用类作为ADT,既 有ADT定义也有ADT实现

实际中更倾向于使用接口来定义变量

– 打破了抽象边界,接口定义中没有包含constructor,也无法保证所有实现 类中都包含了同样名字的constructor。 – 故而,客户端需要知道该接口的某个具体实现类的名字

接口中的每个 方法在所有类中都要实现,缺点是会导致部分方法的重复实现

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

default 方法的典 型使用方式:以增量式的为接口增加额外的功能而不破坏已实现的类

使用接口类型声明变量

客户端仅使用接口中定义的 方法

客户端代码无法直接访问属性

客户端仍然可以访问其他的非接口成员

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

 重写 的函数:完全同样的signature

实际执行时调用哪个方法,运行时决定。

父类型中的被重写函数体不为空:意 味着对其大多数子类型来说,该方法 是可以被直接复用的。

对某些子类型来说,有特殊性,故重 写父类型中的函数,实现自己的特殊 要求

如果父类型中的某个函数实现体为空, 意味着其所有子类型都需要这个功能, 但各有差异,没有共性,在每个子类中 均需要重写。

重写之后,利用super()复用了父类 型中函数的功能,并对其进行了扩展

重写的时候,不要改变原方法的本意

抽象类不能实例化(不能用new 生成对象)

继承某个抽象类的子类在实例化时,所有父类中的 抽象方法必须已经实现

如果某些操作是所有子类型都共有, 但彼此有差别,可以在父类型中设计 抽象方法,在各子类型中重写

所有子类型完全相同的操作, 放在父类型中实现,子类型中 无需重写。
有些子类型有而其他子类型无 的操作,不要在父类型中定义 和实现,而应在特定子类型中 实现。

一个方法可以有多个同名的实现(方法重载)

一个类型名字可以代表多个类型(泛型编程)

一个变量名字可以代表多个类的实例(子类型)

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

重写时父类和子类中的方法具有相同的签名

签名不同时则为重载

 子类重载了父类的 方法后,子类仍然继承了被重载的方法

参数多态性是指方法针对多种类型时具有同样的行为 (这里的多种类型应具有通用结构),此时可使用统一的类型变量表达多种 类型

 在运行时根据具体指定类型确定具 体类型(编译成class文件时,会用指定类型替换类型变量“擦除”)

泛型编程是一种编程风格,其中数据类型和函数是根据待 指定的类型编写的,随后在需要时根据参数提供的特定类型进行实例 化。

泛型编程围绕“从具体进行抽象”的思想,将采用不同数据表示的 算法进行抽象,得到泛型化的算法,可以得到复用性、通用性更强 的软件。

使用泛型变量的三种形式 :泛型类、泛型接口和泛型方法

类中如果 声明了一个或多个泛型变量,则为泛型类

注: 泛型类/接口,是在实例化类的时候指明泛型的具体类型 泛型方法,是在调用方法的时候指明泛型的具体类型

静态方法 不能使用所在泛型类定义的泛型变量

 如果静态方法要使用泛型的话,必须将静态方法也定义成泛型方 法 。

 子类型的规约不能弱化超类型的规约。

子类型多态:不同类型的对象可以统一的处理而无需区分

▪ 价值:方便client调用,client可用不同的参数列表,调用同样的函数

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值