读书笔记《Thinking in Java》-第一章-07/10/13

Posted on 2007-10-13 21:23 Raylong 阅读(1261) 评论(4)  编辑  收藏 所属分类: 读书笔记
读书笔记《Thinking in Java》-第一章-07/10/13

1、所有编程语言都提供抽象机制。可以认为,人们所能解决的问题的复杂性直接取决于抽象的类型和质量。……汇编、C等所做的抽象仍要求在解决问题时要基于计算机的结构,而不是基于所要解决的问题的结构来考量。程序员必须建立起在机器模型和实际解决问题的模型之间的关联。建立这种映射是费力的,而且这不属于编程语言所固有的功能。
(早期的程序员都是很强的……)

2、面向对象方式使得程序员不再受限于任何特定类型的问题。这种思想的实质是:程序可以通过添加新类型的对象,使得自身适用于某个特定问题。因此,在阅读描述解决方案的代码的同时,也是在阅读问题的表述。所以OOP允许根据问题来描述问题。每个对象看起来像一台微型计算计---他有状态,也有操作……
(创建一个学生管理程序,首先最重要的类是Student,他可以有名字、学号、院系、班级等属性,并且可以计算每个学生的综合素质评分、打印各科成绩等等。一旦这些都描述好了,你就可以创建学生Student实例,对学生执行操作了。这就是OOP吧。)

3、面向对象的五个基本特征:
A、万物皆对象。(Java中的原始数据类型就不是对象,但是这是出于对效率的权衡。再者说了,每个原始数据类型都有相应的包装器类型,这就把原始类型对象化了。)
B、程序是对象的集合,它们通过发送消息来告知彼此所要做的。(通过“.”操作符。)
C、每个对象都有自己由其他对象所构成的存储。(楼对象是由钢筋、水泥、砖头等等这些对象构成。)
D、每个对象都有其类型。(可以通过反射机制实现动态的类型检查。)
E、某一特定类型的所有对象都可以接收同样的消息。(传说中的多态了,通过父类的引用操作子类。)

4、面向对象程序设计的挑战之一就是,在问题空间的元素和解空间的对象之间创建一对一的映射。建立类,创建对象,然后操纵它们,这就是OOP的全部了。
(问题描述出来了,也就解决了。)

5、每个对象都有一个接口,也就是都只能满足某些要求,这些要求就是对象的接口定义的。
(听说有的java架构师只给出接口,然后程序员就开工了……没亲眼见到,不知是不是这样的。)

6、当试图开发或理解一个程序设计时,最好的方法是将对象想象为“服务提供者”,程序本身向用户提供服务,它通过调用其他对象提供的服务来实现这一目的。你可以创建,也可以从现成的代码库中寻找能够提供理想服务的对象。
(Java有一个几乎无所不包的类库,这个库还在不断地增大、改进。Java水平的高低指标之一就是你能否熟练地使用类库,快速地查找,并且正确地运用。这种能力和时间成正比的。运用类库能提高开发效率和代码的质量,)

7、在良好的面向对象设计中,每个对象都可以很好地完成一项任务,但它并不试图做更多的事。如此做的好处之一就是使对象在别处复用成为可能。
(该干嘛就干嘛,有助于提高类的内聚性。一个无所不能的类有,且只有一个,那就是God类。)

8、(再次强调对象是服务提供者)将对象作为服务提供者是一件伟大的简化工具,它不仅在设计过程中非常有用,而且在他人试图理解你的代码或者重用某个对象时,它会使调整对象以适应其设计的过程变得简单得多。

9、隐藏实现的概念再怎么强调也不过分。访问控制的第一存在原因就是让客户端程序员无法触及它们不应该触及的部分。第二个原因就是,允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。
(无论哪家的电器的厂家,都不会让电路裸露在外面。用户需要的是一个遥控器和说明书就足够了。Java库一直在更新升级,但是由于良好的设计隐藏了实现,旧有的代码无需重新编译就能获得更高的性能!)

10、事实证明,复用性并不容易达到我们所希望的那种程度,产生一个可复用的类需要丰富的经验和敏锐的洞察力。代码复用是OOP所提供的最了不起的优点之一。最简单的复用就是直接使用一个类的对象。使用现有的类合成新的类,被称为组合。组合带来极大的灵活性。新类的成员对象通常被声明为private,使得新类的客户端程序员不能访问它们。
(我想建立一个个人的Java代码库,把一些库中没有的常用的功能加进其中,复用。)

11、继承在OOP中如此重要,总被高度地强调,于是程序员新手就会有这样的印象:处处使用继承。这会导致难以使用并过分复杂的设计。实际上,建立新类时,应优先考虑组合,因为他更加简单灵活。一旦有了经验就会看出必须使用继承的场合了。

12、继承---接口的复用。当父类发生变化时,子类就会受到牵连。这就是继承的不灵活的地方。
(房屋的根基动摇了,上层建筑自然要不稳了。)

13、以同样的术语将解决方案换成问题是大有裨益的,因为不需要在问题描述和解决方案描述之间建立许多中间模型。可以直接从真实世界中对系统的描述过度到用代码对系统进行描述。(下面这段很有意思)事实上,对使用面向对象设计的人们来说,困难之一是从开始到结束过于简单。对于训练有素、善于寻找复杂的解决方案的头脑来说,可能会在一开始被这种简单性吓倒。
(实际上,像我这种直接学Java的人来说,学C/C++是不可想象的……学中医的搞西医相对简单,学西医的搞中医就不那么轻松了。)

14、有两种方式可以导致基类和子类的不同。第一,有时基类的方法并不能需求,那么在可以子类中添加新的方法。但是,应该仔细考虑是否在基类也添加这些额外的方法。这种设计的发现与迭代过程在面向对象程序设计中会经常发生。第二,改变现有的基类的方法的行为,这被称为覆盖。

15、继承应该只覆盖基类的方法吗?如果这样做了,子类和基类就具有完全相同的接口。这被称为“纯粹替代”。这是一种处理继承的理想的方式。此种关系可称之为“is a”关系。如果子类添加了新的方法,那么他和基类的关系是“is like a”关系。

Feedback

# re: 读书笔记《Thinking in Java》-第一章-07/10/13  回复  更多评论   

2007-10-14 10:37 by tomlove
学习JAVA中,向你看齐

# re: 读书笔记《Thinking in Java》-第一章-07/10/13  回复  更多评论   

2007-10-14 15:03 by Raylong
@tomlove
大家一起学习吧,虽然不能共同富裕,但是可以共同进步啊!

# re: 读书笔记《Thinking in Java》-第一章-07/10/13  回复  更多评论   

2007-10-15 17:37 by tomlove
@Raylong
呵呵 ,现在JAVA学的一知半解,Java编程思想看了一半,看不下去了。看了 你的文章,又让我找到动力~~

# re: 读书笔记《Thinking in Java》-第一章-07/10/13  回复  更多评论   

2007-10-15 17:48 by Raylong
@tomlove
《Thinking in Java》的确很经典!不像别的书那么肤浅,讲语法不讲原理,不会带着你去思考。

只有注册用户登录后才能发表评论。


网站导航: