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 。

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

 

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

3.4 Object-Oriented Programming (OOP)面向对象的编程_第1张图片 

 

枚举:

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

3.4 Object-Oriented Programming (OOP)面向对象的编程_第2张图片 

 

3.4 Object-Oriented Programming (OOP)面向对象的编程_第3张图片 

 

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.4 Object-Oriented Programming (OOP)面向对象的编程_第4张图片 

不要搞混了重载和重写

3.4 Object-Oriented Programming (OOP)面向对象的编程_第5张图片 

 

 

 

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

类型变量。

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

泛型接口。

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

3.4 Object-Oriented Programming (OOP)面向对象的编程_第6张图片 

泛型接口,泛型实现类

 

泛型方法。

 

 

**

3.4 Object-Oriented Programming (OOP)面向对象的编程_第7张图片 

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

不能创造泛型数组

 

 

(4) Subtyping Polymorphism子类多态

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

 

 

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

3.4 Object-Oriented Programming (OOP)面向对象的编程_第8张图片 

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

 

类型转换

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

 

 

 

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

 

3.4 Object-Oriented Programming (OOP)面向对象的编程_第9张图片 

 

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

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

 

 

11 Designing good classes  设计好的类

 

设计immutable的类

3.4 Object-Oriented Programming (OOP)面向对象的编程_第10张图片 

12OOP的历史(略)

 

你可能感兴趣的:(课件理解)