软件构造 Object-Oriented Programming (OOP) 面向对象的编程

用OOP/接口/类实现ADT

一、OOP的基本概念

  • 封装与信息隐藏
  • 继承与重写
  • 多态、子类型、重载
  • 静态与动态分派

接口中只有方法的定义,没有实现;接口之间可以继承与扩展;一个类可以实现多个接口,具备了多个接口中的方法,一个接口也可以有多种实现类。

接口的目的是确定ADT规约,接口定义中没有包含constructor,也无法保证所有实现 类中都包含了同样名字的constructor。而类的作用是实实在在地实现ADT,也可以不需要接口直接使用类作为ADT,既有ADT定义也有ADT实现

接口中的每个方法在所有类中都要实现,通过default方法,可以在接口中统一实现某些功能,无需在各个类中重复实现它。default 方法的典型使用方式:以增量式的为接口增加额外的功能而不破坏已实现的类

 

二、继承与重写

严格的继承要求子类只能添加新方法,无法重写超类中的方法。实际执行时调用哪个方法,运行时决定。

重写的情况:父类型中的被重写函数体不为空:意味着对其大多数子类型来说,该方法是可以被直接复用的;对某些子类型来说,有特殊性,故重写父类型中的函数,实现自己的特殊要求;如果父类型中的某个函数实现体为空, 意味着其所有子类型都需要这个功能, 但各有差异,没有共性,在每个子类中均需要重写;如果某些操作是所有子类型都共有, 但彼此有差别,可以在父类型中设计抽象方法,在各子类型中重写;所有子类型完全相同的操作, 放在父类型中实现,子类型中无需重写。

重写之后,利用super()复用了父类型中函数的功能,并对其进行了扩展。重写的时候,尽量不要改变原方法的本意

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

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

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

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

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

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

签名不同时则为重载

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

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

三、泛型编程

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

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

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

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

 

posted @ 2022-05-22 01:03  DDDaily  阅读(26)  评论(0编辑  收藏  举报