Thinking in java 学习笔记--chp01

2016年9月25日。

1.1 抽象过程

将问题空间中的元素及其在解空间中的表示称为“对象”,这种思想的实质是:程序可以通过添加新类型的对象使自身适用于某个特定问题。每个对象看起来都像是一个微型的计算机,通过传递进来的(或者不传递)值进行计算,得出返回值(或者不得出即void),既具有状态,也具有操作,用户可以对这些对象进行操作。

面向对象语言的5个特征:

1)万物皆为对象。将对象看做一个可以存储数据、操作数据的变量。

2)程序是对象的集合,通过对象之间的互相发送消息告诉彼此应该做的事情。

3)每个对象都有自己的由其他对象所构成的存储。可以在程序中构建复杂的体系,同时将其复杂性隐藏在对象的简单性背后。

4)每个对象都拥有其类型。每个对象都是某个类(Class)的一个实例(instance),此时,类就是类型的意思,每个类区别于其他类的特性就是“可以发送什么消息给他”。

5)某一个特定类型的所有对象都可以接收同样的消息。子类类型的变量同样也具有父类类型的特征。

1.2 每个对象都有一个接口

类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型。

接口确定了对某一特定对象所能发出的请求。

1.3 每个对象都提供服务

当正在试图开发或者理解一个程序设计时,最好的方法之一就是将对象想象为“服务提供者”,程序本身向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。编程的目标就是去创建(当然,最好的还是在已有的代码库中寻找)能够提供理想的服务来解决问题的一系列对象。

将对象看作是服务的提供者还有一个好处就是提高对象的内聚性。高内聚是软件设计的基本质量要求之一:这意味着一个软件构件的各个方面组合的很好。避免将过多的功能塞入到一个对象中。

还有一个好处是提高代码的可阅读性,这样在将来的维护中,会使代码变得更加易于改动来符合未来所需要的设计。

1.4 被隐藏的具体实现

程序的开发人员分为类创建者和客户端程序员。
类创建者的目标是构建类,而客户端程序员的目标是收集各种用来快速实现应用开发的类。
将具体实现加以隐藏,客户端程序员将不能够访问到被隐藏的部分,也就避免了粗心的或者不知内情的客户端程序员所毁坏,可以减少程序中的bug。
访问控制的第一个存在原因:让客户端程序员无法触及他们所不应该触及的部分。
访问控制的第二个存在原因:允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。

java的三个关键字来设定类的边界:

1)public 。任何人可用

2)private。类内部可用。

3)protected。子类及基类可用。

4)default。包访问权限。

1.5 复用具体实现

最简单的复用某个类的方式就是直接创建该类的一个对象,此外也可以将那个对象放进一个新的类中。新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要实现的功能的方式组成,因为是在使用现有的类合成新的类,所以这种概念被称为组合(composition),如果组合是动态发生的,那么它通常被称为聚合(aggregation)
组合经常被视为“has-a”关系。

1.6 继承

当继承现有类型时,也就创造了新的类型,这个新的类型不仅包括现有类型的所有成员,更重要的是复制了所有基类的接口,也就是说,所有可以发送给基类对象的消息同时也可以发送给导出类对象。

有两个方法可以使基类与导出类产生差异,

1)直接在导出类中添加新方法。这些新方法并不是基类接口的一部分。这意味着基类不能直接满足你的所有需求,因此必须添加更多的方法。
2)在导出类中重写(overriding)基类方法,采用与基类完全一样的返回类型和输入类型来使得子类方法覆盖基类方法。
要想覆盖某个方法,可以直接在导出类中创建该方法的新定义即可。

1.7 伴随多态的可互换对象

在处理类型的层次结构时,经常想把一个对象不当作它所属的特定类型来对待,而是将其当作基类的对象来对待。这使得人们可以编写出不依赖于特定类型的代码,通过导出新的子类型而轻松扩展设计的能力是对改动进行封装的基本方式之一,这种能力可以极大地改善我们的设计,同时也降低软件维护的代价。
把讲导出类看作是它的基类的过程称为 向上转型(upcasting),正是因为多态才使得事情总是能够被正确处理。编译器和运行系统会处理相关的细节,你需要马上知道的只是事情会发生,更重要的是怎样通过它来设计。当向一个对象发送消息时,即使涉及向上转型,该对象也知道要执行什么样的正确行为。

1.8 单根继承结构

终极基类object类。
单根继承结构使垃圾回收器的实现变得容易得多,而垃圾回收器正是java相对于C++的重要改进之一。由于所有对象都保证其具有类型信息,因此不会因无法确定对象的类型而陷入僵局。这对于系统级操作(如异常处理)显得尤其重要,并且给编程带来了更大的灵活性。

1.9 容器

需要搞清楚 List、Map与Set的区别。参考:http://blog.csdn.net/speedme/article/details/22398395

1.10 对象的创建和生命期

java的垃圾回收器被设计用来处理内存释放问题,需要知道GC的垃圾回收机制到底是怎么样的。参考:http://jingyan.baidu.com/article/2fb0ba404b0d5200f2ec5f12.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值