[软件构造] 7 OOP

[软件构造] 7 OOP

目标:将ADT的接口从实现分离出来,使用 Java 接口类型来强制这种分离。
用接口定义ADT,写实现接口的类。
用OOP/接口/类 实现ADT

大纲:

OOP的基本概念:object, class, attribute, method, interface, enumeration

OOP的显著特性:

Encapsulation and information hiding 封装与信息隐藏
Inheritance and overriding 继承与重写
Polymorphism, subtyping and overloading 多态、子类型、重载
*Static and Dynamic dispatch 静态与动态分派 (没讲)

Java里的一些重要的对象方法

设计好的类

OOP的历史

Summary

1 Basic concepts: object, class, attribute, and method

类成员变量、方法 vs 实例成员变量、方法:
类:用类名.方法名调用方法。
实例:从类的一个实例引用方法和变量。
使用类方法、类变量不用创建对象。

2 Interface

Interface和Class: 定义和实现ADT
接口:
class实现,在 class的实现部分要声明这个接口,并且提供这个接口的所有的方法。

  • a list of method signatures, but no method bodies.
  • 接口之间可以继承与扩展
  • 一个类可以实现多个接口(从而具备了多个接口中的方法)
  • 一个接口可以有多种实现类

接口:确定ADT规约
类:实现ADT
也可以不需要接口直接使用类作为ADT,这个类中既有ADT定义也有ADT实现
实际中更倾向于使用接口来定义变量:

– Use interface types for variables and parameters unless you know one implementation will suffice.
– Supports change of implementation;
– Prevents dependence on implementation details

改变了一下记笔记的策略,碰到了没记住的、重要的东西再记下来。

接口不能有 constructor。必须直接调用某个具体类中的 constructor
接口的实现要满足接口的规约。
接口定义中没有包含constructor,也无法保证所有实现类中都包含了同样名字的constructor。故客户端需要知道该接口的某个具体实现类的名字

使用静态工厂方法:

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

3 Inheritance and Overriding

方法默认可重写。
严格继承:子类只能添加新方法,无法重写超类中的方法。
设置方法不能重写:用 final标识。

重写的函数:signature相同。 The same name, same parameters or signature, and same return type.
实际执行时调用哪个方法,运行时决定。对象类型是parent class | subclass,调用的方法会执行对应的class中的方法。

父类型函数实现体为空,则在每个子类中均需要重写。

可在子类重写的函数实现体中调用super()复用父类型中的函数。

可在一个constructor中调用同一个类中的另一个constructor或者调用superclass中的constructor, 但是这两种情况调用的别的地方的constructor必须在此constructor的第一行

posted @ 2022-06-11 10:57  Matrix_250  阅读(109)  评论(0编辑  收藏  举报