`
webdev2014
  • 浏览: 678159 次
文章分类
社区版块
存档分类
最新评论

第一章----对象导论

 
阅读更多
/*
* Thinking in java(中文第四版) 第一章 对象导论
* 具体章节信息如下:
* 1.1 抽象过程
* 1.2 每个对象都有一个接口
* 1.3 每个对象都提供服务
* 1.4 被隐藏的具体实现
* 1.5 复用具体实现
* 1.6 继承
* 1.7 伴随多态的可互换对象
* 1.8 单根继承结构
* 1.9 容器
* 1.10 对象的创建和生命期
* 1.11 异常处理
* 1.12 并发编程
* 1.13 java与internet
* 在我眼里,大多数书籍的导论或者前言都是在绪论中写道,而作为鼎鼎大名的Thinking in java
* 一书中,却用了整整第一章来作为导论来给我们介绍有关java的相关信息,而且不愧是给我们灌输思想
* 的书籍,一开始就长篇大论给我们讲起了对象的真正思想,我想很多人在第一次拿到这本书的时候,第一遍
* 都没有坚持下来读完吧,厚厚的书籍,晦涩但很深奥的编程思想,乏味却又循循善诱我们继续下去,而我也
* 不知道是第几次又抱起这本书,而如今又是春暖花开,正是学习最佳的时机,一年之计在于春嘛,我想在这样
* 的机会里坚持把这本书啃完,当然全然理解,我自知不可能,但是依旧也要读完,并且写出每一章的笔记,因为
* 我知道越是经典的书籍,越是书读常新。而用这些文字或者笔记,仅仅是我自己能否坚持读完这本书的一个
* 佐证吧。2014-3-29日
*
*
*
*
* 在书的开篇,引用了著名人类学家本杰明·沃尔夫的一句名言
* -我们之所以将自然分解,组织成各种概念,并按照其含义分类,主要是因为我们将整个口语
* 交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来,除非赞成这个协定中规定的有关语言
* 信息的组织和分类,否则我们就根本无法交谈.
--benjamin lee whorf
* 作为之所以抛出这样一句话,在后面的内容里口语看出是为了告诉我们计算机编程语言其实也是这种思想的延伸,
* 我们只有赞成并且遵守计算机编程的规范,我们(Coder)才能够更好的交流。而且作者开篇直接抛出本章具体
* 讲解的内容,原话是这样的:本章将会向读者介绍包括开发方法概述在内的OOP的基本概念。(背景性和补充性)
*
* 1.1 抽象过程
* 在这一小节里,如果要抽出重点的话,只有五句话是作者想告诉我们的
* 1.万物皆为对象
* 2.程序是对象的集合,他们是通过消息来告诉彼此所要做的事情
* 3.每个对象都有自己的由其他对象由其他对象所构成的存储
* 4.每个对象都会有其类型
* 5.某一特定类型的所有对象都口语接收到同样的消息
* 但是作者却用了抽象过程来让读者过渡,也许作者认为世间万物所有的实体都是对象,而抽象只是我们人类脑海里的
* 一种构想,我们不管做什么,想做什么,正在做什么,都是我们已经在脑海里有这个情景了(本能除外),这里也提到了
* 面向过程与面向对象的捎带的区别,如果一个人想要吃饭,如果是面向过程的思想是,先拿米来,再烧火,再煮饭..等
* 一系列的过程,而面向对象的思想是,我去饭店吃饭,只要打个电话给饭店,我想吃什么,至于你是怎么做的我不用去理会
* 我只在乎我吃到了饭而已。
* 而作者看来,如今所有的一切都是基于抽象而来,但是何为抽象呢?书中给出了例子,之所以会有java这门语言呢?
* 答案是java的设计者从自然(实体)抽象出来的一种与计算机交流的模型,我敢肯定,在设计java语言之初,它的设计
* 者们肯定经过了非常复杂的建模,从自然的各个角度来将自然中的种种因果关系能够以计算机代码的方式抽象出来,而抽离
* 的结果是我们能够与计算机交流(其实是指挥).也许在最开始,对象不叫对象,叫抽象,但是我们的思维是,抽象无法描述
* 一种事务,抽象一般用来描述过程,例如抽象过程,抽象化,听起来,这门都象在描述某个过程,因此用对象来描述事物更为
* 合适。人以类聚,物以群分。所谓的万物都是对象,这句话怎么读怎么通,但是偏偏就卡在了,究竟什么是对象.在书中到处
* 都在解释对象,我们有时候不必拘泥于编程世界去考量这句话,因为对象是从自然世界中抽象出来的,如果你乐意,随意怎么叫
* 都行,也许是设计者无意中叫出的一个名词,就象java这个名词的由来一样,而我们真正在意的是它从自然世界里抽象出来
* 后,究竟想表示自然世界的什么东西,如果在java的世界里,万物皆为对象,那么如果将抽象这个过程泛化后,是不是自然
* 世界里万物都是对象呢?或者这么说,自然世界就是由对象组成的呢?那么现在我们不去想对象这个词,我们只考虑这个问题,
* 我们的自然世界是由什么组成的?如果让你来回答这个问题,又该如何呢?我尝试了回答下,答案也许是下面几种,细菌?动物?
* 生物?细胞?东西?事物?物体?..我所能想到的,生物,非生物..但是有没有一个词能整合这些内容呢?就好比我们如今的聊天
* 对话中的'呵呵'一词呢,能够回答任何问题呢?也许美国人的字典里就有这样一个词--Object,作为一个中国人,我不太理解
* 这个词是不是上帝词汇,能表达出世界万物种种事物,我们默认是把吧。但是很遗憾,Object一词翻译到我们国家就成了对象
* 一词,因此我们真的不需要太纠结什么是对象,而去关心,这个真实的世界是由什么组成的,你觉的哪个词能描述的出来,那么也许有
* 有一天中国的程序员就改口叫那个词了,因此,所谓对象,就是这个问题的答案?我们的自然世界是由什么组成的?也许你明明知道,
* 也能体会,但是就是说出来的话,好吧,我们就叫它对象吧,OK,我承认了,万物皆为对象.
* 为什么会说,程序是对象的集合,他们是通过消息来告诉彼此所要做的事情呢?我想在任何一个能明白这个世界是由什么组成的问题的话
* 这句话就更好理解了,我们只要想一想,你跟身边的万物是怎么样交流的,我相信有单向的,也有双向的,也有无法交流的。至于下面这句话
* 每个对象都有自己的由其他对象由其他对象所构成的存储----这还用说么?我们都是炎黄子孙,我们身上流有同样的血液,如果这样还不能
* 理解的话,那么我们相信高中时候学习的食物链就应该差不多嫩理解了,能量一般是通过食物链才具有流向的.后面的话我就不去解释了,因为
* 太过于罗嗦
* 1.2每个对象都有一个接口
* 最起初的时候,这句话是最让我不解的,因为我在使用java的某些类的时候,它们明明没有接口嘛!后来尝试着去理解,也许是翻译的本意是
* 每个对象都应该有一个接口,这样才能更顺理成章了,按照作者的理解,所谓的接口只是确定对某一特定对象所能发出的请求(行为),我想法更通俗
* 点就是将某一类型对象共同所具有的功能抽象(泛化)出来,形成一种对该类型对象的功能描述的标准,再通俗一点就是我们中国人文别人吃饭了没?
* 有多中方法,比如东北方言:呛,北京方言:吃饭,天津方言:sai(3声),陕北方言:灾饭、泻饭、打噎噙、.....等等,这些都是表达了同一
*个意思,但是说法却这么多,因此国家就统一普通话用了'吃'这个词,而java中的接口也是对我们生活中的这些相同的目的但是不同的做法的一个具体
*抽象,它最终的目的只是帮助整个使用java语言的一种规范约束,以实现程序之间的更好交流,就跟普通话的是一个作用,真的存在普通话么?不存在,
*只是在北京方言和其他各地方言的基础上抽象出来的一种语言规范,目的是为了我们各族人们更好的交流而已.当然接口的作用不仅仅是这样简单
*但涉及到编程的时候,它还有其他更重要的作用,但这一章,作者只是想给我们灌输一些概念,因此我仅仅说到这里。
*1.3每个对象都提供服务
* 有时候我总感觉有些话翻译出来的总是跟自己的理解不吻合,如果让我理解的话,我会这么说,每个对象都拥有提供服务的能力,因为对象就好比我们
*生活中的产品,产品被生产出来后,最终是要为我们提供一些我们所必须的东西的,而对象也如此,我们在编程的时候创建一个对象,目的也是如此,我们需
*要这个对象为我们做某些事情(为我们提供服务),但是java的作者是站在各行各业的角度来开发这门语言的,而作为开发人员,我们只是生产针对某一行
*业的产品,因此,我们只是使用到了那些能够为我们带来服务的对象类型。
*1.4被隐藏的具体实现
* 有些时候,我们在理解编程思想这本书的时候,通过java语言和现实世界进行个方面的对比或者类比的话,我们能更加透彻的理解编写这本书的作者的
*思想有多么精辟,因为该书作者也是通过java语言和现实世界进行个方面的对比或者类比来给我们灌输这些思想.而我们为什么需要被隐藏的具体实现呢?
*其实稍微想想我们的周边的生活,比就是活生生的例子么?你问自己,你买水果,你知道水果是怎么种植的么?你玩游戏,你知道游戏是怎么创造出来的么?..
*而这些具体的实现都对你而言都被隐藏了,而java也有自己的一套规范来让我们程序员在生产产品的时候对某些具体的实现进行隐藏.
*1.5复用具体实现
* 所谓复用就是我们对某一些对象进行了重复的利用,这也是OOP语言的核心思想,类比我们的生活,复用也到处可见,我们的手机,它也算一个复用性极强
*的产品吧,至少我是这样的,我拿手机当闹钟使用,拿手机当游戏机使,拿手机当电脑上网使,甚至有些人拿手机当板砖使,。。。当然java语言里的复用具体
*实现不是我说的这么笼统,一般的复用只是功能模块的复用比如手机的卡槽,屏幕,主板...。
*1.6继承
* 继承是OOP语言的核心优点之一,目的是为了实现复用,java语言中使用最多的标准之一,如果翻看java的源码的话,我们就会被java语言设计所震撼
*因为,到处是可见的继承,这正好佐证了java语言的继承实现了大量的复用效果,那么什么继承呢?很简单,具有你继承的哪个对象的全部功能,就好像生物学里的
*遗传,只是这种遗传是100%的遗传,即继承的具有被继承的全部功能,与此同时,继承的却能够拥有被继承的所不具备的功能,因此,在这里我值需要理解继承就是
*遗传即可,至于更加深入的理解,我们可以随着作者慢慢的去了解。
*1.7伴随多态的可互换对象
* 这也许是第一章最难理解的了,我们先以一个生活中的例子来说说,如果一个工厂通过模具生产出一批一模一样的产品,你认为工厂这么样辨别它们的生产时间呢
*和产品质量呢?不好意思,我把这个问题抛给你了,有时候我们抛出问题的目的是想给读者一个去思考的提示,如果我来回答,我会觉得在每个产品生产出来之后便为每个
*产品加一个标签,标签上标注产品的生产日期和产品质量,这样我们就可以去识别了,而java的设计者们,在创造这们语言的时候也考虑到这个问题了,当我们创建某些
*相同的对象的时候,我们该如何去辨别呢?是序列化,但是这不是我们现在去要思考的,我们继续,我想说的是,当某一个对象里有多个相同的方法(名称相同)的时候,我
*们怎么去识别呢?更重要的是编译器怎么去识别呢?如果你是java编译器的的实现者,你会怎么做呢?这里便涉及到了前期绑定和后期绑定两个重量级的概念了.大概讲
*的是正是因为有了上面的继承和抽象(接口),才得以实现对象的可互换性,这些操作的具体实现,是由java的设计者在后台完成的,对于我们程序员来讲,是透明的,如果
*有兴趣可以去参考相关书籍,或者去sun的官网上查询.因为这只是第一章,我要做的只是介绍找一个简单的概念而已。而后面的几个介绍只是粗略的介绍了java语言的特
*色这里如果一致罗嗦下去,我想这本书也许就看不完了.
* */
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics