第一章 对象入门

来源:互联网 发布:nginx sticky 配置 编辑:程序博客网 时间:2024/04/30 00:28
读书笔记,摘自《编程思想》,加上自己的一些理解。
第一章 对象入门
面向对象编程是一种进步。在系统开发中,对于管理人员,实现更快和更廉价的开发与维护过程;
对分析与设计人员,建模处理变得更加简单,生产清晰,易于维护的设计方案;对于程序员,对象建模显得高雅和浅显,易于理解。
1.1 抽象的进步
所有编程语言的最终目的都是提供一种抽象方法,能够更加灵活的处理问题。java做到面对问题解决问题,我们把问题中的元素抽象看做对象。面向对象的程序是:
(1)所有东西都是对象。对象保存着数据,可以进行对它进行操作。理论上是从要解决的问题本身上分析提出所有概念性的组件(名词),在程序中将其表达为一个对象。
(2)程序是一堆对象的组合。通过对象间消息传递,相互调用,完成一系列功能。
(3)每个对象都有自己的存储空间,也可容纳其他对象。通过封装现有对象,可以制作出新的对象。所以可以根据简单对象,在程序中达到任意高的复杂程度。
(4)每个对象都有一种类型。每个对象都属于一种类。类的存在就是为了更好的管理对象。
(5)同一类的所有对象能接收相同的消息。比如正方形和圆都属于几何图形,让几何图形发生变化,正方形和圆都能接收到相同指令。
1.2面向接口编程
某个对象要完成某个操作,必须借助某个工具,这个工具就是“接口”。比如对象小明,本身可以做到说话,吃饭跑步,但他想度过黄河,这个时候他本身做不到,需要工具船,这个船可以看做‘接口’。
一个类本身的方法更侧重于这个类的本质属性,接口更侧重于外界的工具。人本质也可以实现渡河,但是想飞天呢?这个时候需要在人中赋予太多太多的功能,会造成人这个类复杂混乱,而接口可以多实现,可以做任何事情。吃饭这个是本质,渡河过河是需要外界工具。接口的功能明确,只要实现这个接口就能拥有这个功能。
1.3实现的隐藏
访问修饰符。get和set。
1.4方案的重用
需要较多的经验和洞察力,才能设计出好的方案。重用性是程序设计的进步。
1.5继承的作用
对象的概念允许我们将各式各样数据和功能封装到一起,这样便可恰当表达‘问题空间’的概念,不用刻意尊重基础机器的表达方式。为了利用现成的数据类型,再根据实际情况进行添加和修改,继承就是针对这个目标而设计的。使用继承时,相当于创建一个新类。这个新类包含现有类型的所有成员,复制了基础类的接口,也就是向基础类发送的所有消息可原样发送给衍生类的对象。
1.5.1改善基础类
目标是,使用的函数接口未变,新版本具有不同的表现
1.5.2 等价与类似关系
圆是一种几何形状;几何形状不一定是圆
1.6 多态分析,继承才有多态
我们将衍生类的对象当作基础类的一个对象对待,这一点非常重要,因为这意味着我们只需要编写单一的代码,令其忽略类型的特定细节,只与基础类打交道。这样那些代码可与类型信息分开,更容易编写理解。若新添加一种新类型,我们不需要改变原代码。程序具有了扩展能力,具有扩展性。我们把衍生类当作基本类型处理的过程叫做上溯造型,“上”表明继承从上来的,“造型”是根据一个现成的模型创建。
1.6.1动态绑定
画圆和画三角形效果不同,但是调用几何类同一个draw()方法。实现多形性
动态绑定是自动进行的,将一条消息发送给对象时,对象会采取正确的行动。动态绑定是如何实现的呢?
1.6.2类要求抽象
当视图创建一个抽象类对象时,编译器就会阻止。
1.7对象的创建和存在时间
对象需要的数据位于哪里?对象存在的时间如何控制?
两种方法破坏对象 用程序化的方式决定何时破坏,或者垃圾回收特性,自动寻找那些不在使用的对象,并将其清除。
1.7.1 集合
事先无法知道对象要多少空间,除非进入运行期。
1.7.2单根结构,object
1.7.3下溯造型和运行期检查,因为下溯造型造成的错误,称为违例。在创建集合时添加集合元素类型。
1.7.4清除对象
每个对象要资源才能存在,存在内存中。如果不需要这些对象需要清除,释放资源。在java中,垃圾收集器在设计时考虑到内存释放问题。垃圾收集器知道一个对象在什么时候不再使用,然后会自动释放哪个对象占用的内存空间。
1.8 违例控制,解决错误
由于很难设计出一套完美的错误控制方案,许多语言干脆将问题简单的忽略掉,将其转嫁给库设计人员。对大多数错误控制方案来说,最主要的一个问题是它们严重依赖程序员的警觉性,而不是依赖语言本身的强制标准。
违例错误将错误控制方案内置到程序设计语言中,这里的违例属于一个特殊的对象,它会从产生错误的地方“扔”出来,随后这个违例会被设计用于控制特定类型错误的“违例控制器”捕获。
在java中,违例控制是从一开始就封装好的,所有必须使用它。如果没有自己写一些代码来正确地控制违例,就会得到一条编译期出错提示。这样可保证程序的连贯性,使错误控制变得更加容易。
违例控制并不属于一种面向对象的特性,尽管在面向对象的程序设计语言中,违例通常是用一个对象表示的。
1.9多线程
在一个独立运行的片段及叫做“线程”,利用它编程的概念叫做多线程处理。最开始,线程只用于分配单个处理器的处理时间的一种工具,但假如系统本身支持多个处理器,那么每个线程可分配给一个不同的处理器,真正进入并行运算状态。程序在逻辑意义上被分割为数个线程。
java的多线程机制已内建到语言中,这使一个可能复杂的问题变得简单。对多线程处理的支持是在对象这一级支持的,所以一个执行线程可表达为一个对象。java也提供了有限的资源锁定方案。它能锁定任何对象占用的内存,所以同一时间只能有一个线程使用特定的内存空间。为了达到目的,需要使用关键字synchronized。通常要求程序员创建一个对象,用它代表一把锁,所有线程在访问那个资源时都必须检查这把锁。
1.10永久性
在程序结束之后,对象也能保存,并保留全部信息,在某些情况下是一件非常有价值的事情。我们可以将对象保存到磁盘上,以后任何时间都可以取出。
1.11因特网
1.客户端和服务器
一般将数据集中保存在某个数据库中,根据请求将信息反馈给对方。存放信息的机器叫服务器,用户进行操作的系统叫客户端。
单个服务器需要同时向多个客户提供服务,保证客户的新数据不会发生冲突,不会丢失(数据库术语:事务处理)。性能的问题显得很重要,任何微小的延误都是不能忽视的。为了尽可能缓解潜伏的问题,程序员需要谨慎的分散任务的处理负担。一般可以考虑让客户机负担部分处理任务,有时可分派给服务器所在地的其他机器,那些机器叫作中间件(用于改进对系统的维护)。
1.12 分析和设计 如何写好程序
整个开发过程中,开始要分析与设计,需要什么对象?接口是什么?先想好一个计划,做到心中有数,会减少后续开发的很多问题。
要做到什么?
怎么做到?
开始实现
校订优化
没有计划的50%以上的项目都会失败。

分析设计是一个程序成功与否的关键,作为一个转行1年新人,我觉得这个对我来说很重要。原来在小公司项目开发根本没有系统理清这些,么有目的只有照葫芦画瓢,当项目经理第一次问我做增删改查时要多少时间,一头懵逼。第一次读的时候觉得这些没用就忽略了,现在读到这一章突然清楚了很多,如何做好一个项目,什么时候该做什么。这真是一本好书啊。因此单独下一篇--设计分析


编程更像一种艺术,不能只是作为技术活来看待。全面的思考、周密的准备、良好的构造不仅使程序更易于构建与调试,也使其更易理解和维护,而这正是系统成功的必要条件。作为真正的程序员,这并非可有可无的一种素质。所有的付出最终都会得到回报。