TIJ 复习笔记
第一章主要介绍编程方法和OOP的一些基本概念,主要围绕着对象来讲。
正如书中所说,本章节完全不涉及代码,如果没有接触过相关的概念,建议学习一下;急于求成可以跳过本章,但是你又会回过头来,复习这些知识。
仔细梳理一下,不算多的概念,让思路更清晰。
- 抽象
- 接口
- 封装
- 组合
- 继承
- 多态
- 单根继承
- 异常处理
- 对象创建和生命周期
- 容器
- 并发
抽象机制(abstract)
编程语言或多或少都有抽象机制,比如汇编对机器语言进行抽象,C又对汇编进行抽象,其他语言进一步抽象。往往这种抽象是对于机器进行建模,来解答实际问题,程序员需要建立机器对于实际问题的映射。换一种方式,如果直接对问题进行抽象建模,就可以更容易的得到解。
JAVA 作为一种OOP的语言,可以将问题中的元素抽象成对象,快速的解决问题。
根据大师的定义,OOP的编程方法,万物皆为对象。
那么对象的定义:
每一个**对象**是类(Class)的特定实例(instance)
--TIJ
"object" refers to a particular instance of a class
---维基百科
对象具有状态、行为和标识。状态就是对象具有的内部数据,行为是包含方法,标识具体来说就是在内存中的地址,用于区分不同的对象。
-TIJ
Object is a software bundle of state and behavior
--Oracle官方教程
综上,对象既是数据和方法的组合,又是class的实例。
对象都有接口(interface)
类又可以称为对象的类型(type)。
类描述了具有相同特性(state)和行为(behavior)的对象的集合,所以一个类实际上是一种数据类型。--TIJ
因为类是一种数据类型 (实例化:是类创建对象的过程。实例是对象的具体发生,存在于程序运行时)
Instance is a concrete occurrence of any object, existing usually during the runtime of a computer program.
-- 维基百科
A class is a blueprint or prototype from which objects are created.
-- Oracle官方教程
综上, 类既是对象的集合,又是一种数据类型。
接口
接口描述了某一特定对象所能处理的请求。程序中需要代码来满足这些请求,这些代码与隐藏的数据一起构成了实现。
An interface is a contract between a class and the outside world. When a class implements an interface, it promises to provide the behavior published by that interface.
--Oracle官方教程
因为接口是类与外部世界的合约(规范)。
隐藏具体实现(encapsulation)
程序开发者分为,类创建者和客户端程序员(使用类)。客户端程序员在使用类的过程中需要访问控制,这有两方面原因,一方面类的创建者可以修改具体的实现,在不修改接口的前提下,不对造成影响,另一方面,使用者无法访问到类的内部数据,造成任何破坏。
java中可以通过private,project,public进行类的访问控制。
复用具体实现(composition)
复用类的最简单的方式,直接使用类的一个对象。
一个类中直接包含另外一个类的对象,又称为组合(composition)。
例如,汽车包含引擎,是一种has-a的关系。
继承(inherit)
Inheritance provides a powerful and natural mechanism for organizing and structuring your software。
顾名思义,以几何形状为例,shape是一个类,包含方法(draw/erase等),当需要创建一个新的类,三角形(triangle)或者正方形(square)时,就可以继承shape,创造的新类型,不仅包括shape的所有成员也复制了shape的所有方法。
java中是extends
多态
典型:
shape有一个接口 计算面积。
三角形和正方形分别override(覆盖)实现了这个方法。
当另外有一个程序例如
public void foo(Shape s){
System.out.println(s.getArea());
}
public static void main(String[] args){
Triangle t = new Triangle();
xxxxxxxx
xxxxxxxx
foo(t);
}
由于继承关系,t 的类型也是Shape, 当foo传参时,t会向上转型,
当foo内调用,相应的方法getArea时,这个时候java是后期绑定,调用相应的部分的代码,即按照三角形计算方面的方式执行。
单根
java中所有的对象都继承于同一个根,Object对象。
这样可以实现一些共有的特定,例如垃圾回收等。
对象的生命周期
对象有创建就有销毁,java提供了垃圾回收的机制,对象的生命周期可以等到很好的管理,而不用显示的释放。
异常处理
异常处理不属于oop的范畴,但是也是语言非常重要的一部分,异常本身也是一个对象。
并发
java 本身支持并发
容器
java提供了很多类库,其中一些提供容器的结构,来存放对象。
参考
Think in Java
Oralce官网教程