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的历史(略)