成。)
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、有两种方式可以导