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

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

1.Criteria of Object-Orientation 面向对象的标准

2. object, class, attribute, method, interface, and enumerations  OOP的基本概念

3.OOP的一些特点:

Encapsulation and information hiding 封装与信息隐藏

Inheritance and overriding 继承与重写

Polymorphism, subtyping and overloading 多态、子类型、重载

*Static and Dynamic dispatch 静态与动态分派

4. Some important Object methods in Java    java中的一些重要的类的方法

5. Designing good classes  设计好的类

6. History of OOP    OOP的历史

 

 

1 Criteria of Object-Orientation面向对象的标准

1)面向语言应该有声明,异常处理,依赖工具

2)静态检查:定义很多类型和兼容性规则,保证运行时的安全

3) Genericity (泛型) 用泛型作为参数,可以复用

4) Inheritance (继承):类之间可以继承

5)Polymorphism (多态):运行时类与多种可能的类型连接起来

6) Dynamic dispatch/binding (动态分派/绑定):运行要什么就绑定什么

 

2Basic concepts: object, class,attribute, and method一些基本概念

Object:包含状态(states)和行为(behaviors)

States:类中的数据(属性)

Behavior:类中的动作(方法)

 

Static vs. instance variables/methods of a class类中的静态与非静态值和方法

前者不需要实例调用 后者需要实例调用

Class variable 类成员变量  class methods 类方法

instance methods 实例方法  instance variables 实例成员变量

 

 

3 Interface and Enumerations接口和列举

 

接口:

– Interface 和 Class: 定义和实现 ADT

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

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

 

---一个接口可以有多种实现

 

 

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

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

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

 

PS:接口中不能有构造器;不能使用接口的实现类

 

对于new +对象

打破了抽象边界,接口定义中没有包含 constructor ,也无法保证所有实现类

中都包含了同样名字的 constructor 。

– 故而,客户端需要知道该接口的某个具体实现类的名字

 

可以在接口中定义静态工厂方法返回具体的子类型。

 

 

枚举:

有时候一个类型要一些很小的有限的不变的值,这时就利用枚举

 

 

 

 

4 Encapsulation and information hiding封装与信息隐藏

 

使用接口类型声明变量

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

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

 

Private关键字 只能在定义的类中使用

Protected关键字 只能在定义类的子类中使用

Public关键字 哪都能用

 

5 Inheritance and Overriding 继承与重写

 

(1) Overriding

 

(严格继承:子类只能添加新方法,无法重写超类中的方法, 通过给方法添加final关键字实现) 

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

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

 

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

 

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

**重现时构造方法第一条必须先调用父类的构造方法

 

 

(2) Abstract Class抽象类

 

抽象方法,抽象类,接口。

Concrete class->Abstract Class->Interface

 

 

6 Polymorphism, subtyping and overloading多态、子类型、重载

 

(1) Three Types of Polymorphism 三种类型的多态

1. Ad hoc polymorphism (特殊多态)--function overloading ( 功能重载 )

2.Parametric polymorphism ( 参数化多态 )--generics泛类,泛类编程

3. Subtyping(子类型多态、包含多态)

 

(2) Ad hoc polymorphism and Overloading 特殊多态和重载

 

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

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

 

Overloading 是一种静态多态

根据参数列表进行最佳匹配;需要静态类型检查,编译阶段决定具体执行哪个方法

与之相反overridden methods 是在运行时动态检测

 

重载规则:

1.一定要有不同的参数列表 (这点是判断的最重要的)

2.可以有相同或不同的 返回值

3.可以有不同的修饰符public/private/protected

4.可以宣称新的异常

5.可以在同一个类重载,也可以在子类重载。

Ex:

 

不要搞混了重载和重写

 

 

 

 

(3) Parametric polymorphism and Generic programming 参数化多态和泛型

类型变量。

泛型类:其定义中包含了类型变量

泛型接口。

泛型接口,非泛型的实现类

 

泛型接口,泛型实现类

 

泛型方法。

 

 

**

 

泛型类是在编译阶段的,不能实例化

不能创造泛型数组

 

 

(4) Subtyping Polymorphism子类多态

B是A的子类意味着每个B都是A都满足A的spec,子类不能弱化超类型的规约。

 

 

Instanceof    操作符,检查一个类是不是和给定类相同

 

建议尽量避免instanceof()方法,也别在父类里使用来检查子类的类型

 

类型转换

可以转化更明确的子类型,但是如果类型不兼容会得到 ClassCaseException

 

 

 

10 Some important Object methods in Java   Java中一些重要的类的方法

 

 

 

总是重写toString方法,除非一定不会用

Equals和hashcode 需要的时候重写,总是重写两个

 

 

11 Designing good classes  设计好的类

 

设计immutable的类

 

12OOP的历史(略)

 

猜你喜欢

转载自blog.csdn.net/qq_42766619/article/details/91344738