本章介绍面向对象的基本概念和原则
1.1抽象
我的理解:隐去复杂的,无用的属性,留下程序所需要的
1.2每个对象都有接口
问题:接口和实现的概念,为什么引入接口机制(需要看具体章节)
1.3对象都提供服务
1.问题分解(decompose)——自顶向下设计原则:考虑需要什么服务,再考虑需要的服务依赖什么服务,直到明确所需的对象存在或足够简单的编码实现
优点:使设计容易,高内聚性(fit together)
2.OOP设计原则之一:使对象良好的完成一项任务,不要做太多的任务(多设计几个对象共同完成)
优点:易于复用,易于阅读
1.4 隐藏具体实现
1.分离类创建者(API提供者)和类使用者(客户端程序员)
优点:1.容易改变内部实现而不影响外部使用(易变性)
2.减少客户端程序Bug(安全性)
2.访问控制(access control):只提供服务,拒绝内部访问,优点同上
3.Java使用3个关键词来设定访问控制
public,private:只有类内部可以使用,protected:类内部,同一package和子孙类内部可以使用
4.默认访问权限:不知道关键字,包内可访问,包外拒绝(实际相当于protected?)
1.5实现的复用Reuisng(实际讲的是组合)
1.组合/聚合:类内使用别的类的对象,”has-a“关系
2.灵活性:类内对象一般为private,可以随意、动态的改变
3.OOP应该首先考虑组合,再考虑继承,以免设计过于复杂(相关书籍《设计模式》,框架与设计模式的概念等)
1.6继承
1.继承:以现有的类为基础,复制,增加,和改变
2.类可以描述特征和行为,类之间还存在关系
3.子类继承父类所有的特征、行为(包括不可操作的private类型)和接口,所有父类的消息都可以作用于子类,”is-a“关系
4.子类可有有新的特征和行为,更重要的:子类可以重写/覆盖(overriding)父类的方法
1.6.1”是一个”与“像是一个”关系 Is a,is lika a
is-a:子类没有新的方法——替代原则
is-like-a:子类添加新的方法——不纯粹的替代
我的理解:is-a用于使用不同的方法实现父类的接口,is-lika-a适用于父类较抽象,而子类较具体,需要添加新的特征和行为
1.7 多态
1.子类调用父类方法,编译器在编译时间不确定执行哪一段代码,对象会去执行恰当的代码
2.非oop,前期绑定,编译器产生函数代码的绝对入口地址
oop:后期绑定,编译器知道函数存在,执行参数及返回值坚持,但不明确具体代码,运行时间才知道执行代码。java默认为动态绑定,详细见多态章节
3.向上转型(upcasting)把子类对象传给需要父类对象的方法,安全,符合逻辑,多态机制在运行时间自动决定执行代码,使程序设计更简单和更易扩展
1.8单根继承结构
所有的类都继承单根父类Object
1.9 容器
一种特殊的对象,包含其他对象的引用,可以轻松动态扩展。(实质包含内部不同的数据结构实现)
1.9.1泛型
1.10对象的生命周期
创建和销毁对象
java提供动态创建对象(在heap中)和垃圾回收机制,比才c++更安全,编码更容易,代价是一定的效率和灵活性。
1.11异常处理
异常是一个对象,在出做事被异常处理器获取
java强迫使用异常机制,使编码容易和可靠
1.12并行编程
java多线程,并行和同步,资源共享等概念(具体章节详解)
1.13java与互联网:略
1.14总结
OOP的好处:代码和设计更容易理解和复用,更容易维护等等