上周在一个公众号里看见了这本书竟然出版了,瞬间惊喜。
干 Java 的怎么都得有本圣经,所以,买它!
工作之余换个脑子,看个几页,在此权作记录。
–每天进步一点点
第一章 对象的概念
1.抽象
所有编程语言都提供抽象机制。从某种程度上来说,问题的复杂度直接取决于抽象的类型和质量。
我们将问题空间中的元素以及它们在解决方案空间的表示称作“对象”。
面向对象程序设计方法:
-
万物皆对象
。从要解决的问题身上抽象出概念性的组件,然后在程序中将其表示为一个对象。 - 程序是一组对象,通过消息传递来告知彼此该做什么。
- 每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。
- 每个对象都有一种类型。一个类最重要的特征就是“能将什么消息发给它”
- 同一类所有对象都能接收相同的消息。
Grady Booch提供了对对象更简洁的描述:
一个对象具有自己的状态
、
行为和标识
。这意味着对象有自己的内部数据(提供状态)、方法(产生行为),并彼此区分(每个对象在内存中都有唯一的地址)。
—套用在Java上,我的理解是:
首先将要解决的问题抽象成一个个类,类中定义了变量(状态)、方法(行为)。
不同的类可以组合成新的类。类 new 出对象,对象之间通过调用方法传递信息。
同一个类(或继承同一个父类的不同子类) new 出的对象,具有相同的方法。
—PS:总感觉描述的不顺畅,还是理解不到位,表达不出来
2.接口
我们向对象发出的请求是通过它的“接口”定义的,对象的“类型”或“类”则规定了它的接口形式。
3.服务提供
程序为用户提供服务,并且它能通过调用其他对象提供的服务来实现这一点。
软件设计的基本原则是
高内聚
:每个组件的内部作用明确,功能紧密相关。在良好的面向对象设计中,每个功能单一且高效。这样的程序设计可以提高我们代码的复用性,同时也方便别人阅读和理解我们的代码。只有让人知道你提供什么服务,别才能更好地将其应用到其他模块或程序中。
—PS:高内聚低耦合。一类几千行,隔天泪茫茫
4.封装
应用程序员调用研发程序员构建的基础工具类来做快速开发。研发程序员开发一个工具类,该工具类仅向应用程序员公开必要的内容,并隐藏内部实现的细节。这样可以有效地避免该工具类被错误的使用和更改,从而减少程序出错的可能。
—PS:去兰州拉面吃饭,没必要跑到后厨,指导厨子切牛肉的刀法
因此,使用访问控制的原因有以下两点:
- 让应用程序员不要触摸他们不应该触摸的部分。
-
使类库的创建者(研发程序员)在不影响后者使用的情况下完善更新工具库。
—PS:点餐吃饭就好,不用管饭是怎么做出来的
控制权限的修饰符:
public(公开):任何人都可以访问和使用该元素
private(私有):除了类本身和类内部的方法,外界无法直接访问该元素。
protected(受保护):子类可以访问
default(默认):如果你不使用前面的三者,默认就是 default 访问权限。 default 被称为 包访问,因为该权限下的资源可以被同一包(库组件)中其他类的成员访问。
5.复用
代码和设计方案的复用性是面向对象程序设计的优点之一。我们可以通过重复使用某个类的对象来达到这种复用性。同时,我们也可以将一个类的对象作为另一个类的成员变量使用。
-
组合
:经常用来表示“拥有关系”。 -
聚合
:动态的组合
6.继承
“继承”给面向对象编程带来极大的便利。
在创建了一个类之后,即使另一个新类与其具有相似的功能,你还是得重新创建一个新类。但我 们若能利用现成的数据类型,对其进行“克隆”,再根据情况进行添加和修改,情况就显得理想多了。“继承”正是针对这个目标而设计的。
继承应该只覆盖基类的方法,基类和派生类就是相同的类型了,因为它们具有相同的接口。这叫作”纯粹替代”,也经常被称作”替代原则”。我们经常把这种基类和派生类的关系称为是一个(is-a)关系。
有时你在派生类添加了新的接口元素,从而扩展接口。虽然新类型仍然可以替代基类,但是这种替代 不完美,原因在于基类无法访问新添加的方法。这种关系称为像是一个(is-like-a)关系。
7.多态
我们在处理类的层次结构时,通常把一个对象看成是它所属的基类,而不是把它当成具体类。通过这 种方式,我们可以编写出不局限于特定类型的代码。
把子类当成其基类来处理的过程叫做“
向上转型
”,用于给程序解耦.
发送消息给对象时,如果程序不知道接收的具体类型是什么,但最终执行是正确的,这就是对象的“多态性”(Polymorphism)。面向对象的程序设计语言是通过“
动态绑定
”的方式来实现对象的多态性的。 编译器和运行时系统会负责对所有细节的控制;我们只需知道要做什么,以及如何利用多态性来更好地设计程序。
—PS:开发一个需求进行排期的时候,这个功能写着一个开发人力就可以了,不用指定张三开发。
8.单继承结构
- Java的单继承结构有很多好处
- 对于完全面向对象编程,我们必须要构建自己的层次结构,以提供与其他OOP语言同样的便利。
- 另外,单继承的机构似的垃圾收集器的实现更为容易。
9.集合
选择集合的两个原因:
- 集合可以提供不同类型的接口和外部行为。
- 不同的集合对某些操作有不同的效率。
—List/Map/Set/Queue/Tree/Stack/Heap,总有一款适合你
10.异常
异常时一个从出错点抛出后能被特定类型的异常处理程序捕获的一个对象。它不会干扰程序的正常运行,仅当程序出错的时候才被执行。