前言
程序设计其实是对复杂性的管理:待解决问题的复杂性,以及用来解决该问题的工具的复杂性。
Java为程序员减少复杂度,减少开发健壮代码所需的时间以及困难。并着手解决各种复杂任务,例如(多线程和网络编程)
不要把java简单的看成一些特征的集合,有些特征在孤立状态下没有任何意义。只有在考虑到设计,而不仅仅是编码的时候,才能完整运用java各个部分。按这种方式理解java,必须理解在语言和编程中经常碰到的问题。每一章的特征集,都是基于java在解决特定问题时的方式。需要在头脑中创建一个模型,以加强对java的学习,碰到问题反馈到大脑中的模型推到出答案
第一章 对象导论
我们之所以将自然界分解,组织成各个概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来,除非赞成这个协定中规定的有关语言信息的组织和分类,否则我们根本无法交流
计算机革命源于机器,因此,编程语言的产生也始于对机器的模仿
计算机并非只是机器那么简单,计算机是头脑延伸的工具(头脑的自行车),同时还是一种不同类型的表达媒体。因此,这种工具看起来越来越不像机器,而更像我们头脑的一部分,以及一种如写作、绘画、雕刻、动画、电影等一样的表达形式。面向对象程序设计(OOP)
便是一种以计算机作为表达媒体的大趋势的组成部分
所有编程语言都提供抽象机制。可以认为,人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。所谓的“类型”是指所抽象的是什么?
汇编语言是对底层机器的轻微抽象,接着出现的许多所谓的“命令式语言”(C语言)都是对汇编语言的抽象。这些语言在汇编语言的基础上做了很大改进,但是它们所做的主要抽象仍要求在解决问题时要基于计算机的结构,而不是要基于所要解决的问题的结构来考虑。程序员必须建立起在机器模型(位于“解空间”内,这是你对问题建模的地方,例如计算机)和实际待解决问题的模型(位于“问题空间”内,这是问题存在的地方,例如某一项业务)直接的关联。建立这种映射是费力的。而且这不属于语言所固有的功能,这使得程序难以编写,并且维护代价高昂,同时也产生了作为副作用的整个“编程方法”行业。
另一种对机器建模的方式就是只针对待解决问题建模。(受限于特定领域)
面向对象方式通过向程序员提供标识问题空间的元素的工具更进一步。这种表示方式非常通用,是的程序员不受限于特定类型问题。我们将问题空间的元素及其在解空间中的表示称为对象。(你还需要一些无法类比为问题空间元素的对象)。这种思想的实质就是:程序可以添加新类型的对象使自身适用于摸个特定的问题。因此,当你在阅读描述解决方案的代码时,也是在阅读问题的描述,而不是根据运行解决方案的计算机来描述问题。但是它仍然与计算机有联系:每个对象看起来都有点像一台微型计算机–它具有状态,还具有操作,用户可以要求对象执行这些操作。如果要对现实世界中的对象做类比,那么说它们都具有特性和行为视乎不错。
面向对象语言五个基本特征
1. 万物皆对象
2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的
3. 每个对象都具有自己的由其他对象所构成的存储
4. 每个对象都拥有其类型
5. 某一特定类型的所有对象都可以接受同样的消息
对象具有状态、行为和标识。每个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生的行为),并且每个对象都可以唯一的区别其他对象,每个对象在内存中都有唯一的地址
类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际就是一个数据类型。程序员通过定义类来适应问题,而不再被迫只能使用现有的用来表示机器中的存储单元的数据类型。
面向对象放个并不是仅局限于构建仿真程序。无论你是否赞成一下观点,即任何程序都是你所设计的系统的一种仿真
面向对象程序设计的挑战之一,就是问题空间的元素和解空间的对象之间创建一对一的关系
试图开发或者理解一个程序时,最好的方法之一就是将对象想象成“服务提供者”。程序本身将向用户提供服务,它将通过调用其他对象提供的服务实现这一目的。你的目标就是去创建(或者最好是在现有代码库中寻找)能够提供理想的服务来解决问题的一系类对象
对象看成服务提供者,有助于提高对象的内聚性,每个对象都可以很好地完成一项任务,它不试图做更多的事
将对象看成服务提供者,是一项伟大的简化工具,不仅在设计工程中非常有用,当别人理解你的代码或者重用某个对象时,如果看出这个对象所能提供的服务价值,它会使调整对象以适应其设计的过程变得简单得多。
程序开发人员可以按照角色分为类创建者(那些创建新数据类型的程序员)和客户端程序员(那些在其应用中使用数据类型的类消费者)
一个类的复用具体实现,最简单的复用某个类的方式就是直接使用该类创建一个对象,此外也可以将那个类的一个对象置于某个新的类中(组合、聚合)。另一种复用方式是利用继承
实际上在创建新类时,应该优先考虑组合,更加灵活,设计更加清晰
类型不仅仅是描述作用于一个对象集合上的约束条件,同时还有与其他类型之间的关系
两种方法可以使基类与导出类产生差异,一种是添加新方法,一种是覆盖(overriding)基类方法的行为
处理类的层次结构时,经常把一个对象不当作它所属的特定类型对待,而是将其当作基类的对象对待。这使得可以编写出不依赖特定类型的代码(多态)
面向对象采取后期绑定的方式
Java1.5增加参数化类型,泛型机制
过程型语言(数据定义和函数调用)
第二章 一切都是对象
在java中所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象
Java的方法决定了一个对象能够接收什么样的信息
方法名和参数列表(它们合起来被称为“方法签名”)唯一地标识出某一个方法
调用方法的行为通常被称为发送消息给对象。
面向对象的程序设计通常简单地归纳为“向对象发送消息”
程序似乎只是一系列带有方法的对象组合,这些方法以其他对象为参数,并发送消息给其他对象
通常来说,当创建类是,就是在描述那个类的对象的外观和行为
static方法常常拿来做“牧羊人”的角色,负责看护与其隶属同一类型的实例群
转载请注明:学时网 » java编程思想-读书摘要(一)