《Thinking in JAVA》读书笔记_第一章_1.1

来源:互联网 发布:常见面试几种算法 编辑:程序博客网 时间:2024/05/22 09:30

第一章 对象导论

 

1.1抽象过程

阅读这部分的时候,我就一直在思考一个问题:“什么才是抽象?”

在百度百科里,给抽象的定义是这样的:抽象是指对于一个过程或者一件制品的某些细节有目的的隐藏,以便把其他方面、细节或者结构表达得更加清楚。(信息隐藏)。

这部分对开是就说了这样的一句话“所有编程语言都提供抽象机制”。而就编程语言本身来说,他也是对汇编语言的抽象。通过更为符合人的思考方式,用特定的关键词来代替被隐藏起来的汇编语言的执行过程。而汇编语言,则是在一定程度上对底层机器的轻微抽象。

与面向过程的语言相比,OOP的抽象思想则在某种程度上有不同。面向过程的语言所表现出来的更多的是对与计算机的结构来考虑的。我们对某一问题进行分析,建立模型。所需要考虑的就是怎么让能够让计算机来执行这一部分。

而对于OOP语言,我们则是在模型上再进行一部分的抽象。在《TIJ》中有这样的一段表述:“我们将问题空间中的元素极其在解空间中的表示称为‘对象’。”而这种思想的实质是:“程序可以通过添加新类型的对象使自身适用于某个特定问题”。在OOP语言中,我们需要做的则是将一个问题分成若干个元素,然后将其抽象成若干个对象。对于没个对象,会有自身的属性和他对于自身属性可以表现出来的行为。例如,我们对于某个超市进行管理。没个商品就可以看作是一个对象。他拥有的属性可能会有出售价格、购入价格、保质期等等,而其相对于自身属性的操作,则会有修改出售价格,修改购入价格等。而一个超市,就会拥有若干个商品这样的对象。虽然在对象对自身的属性执行一些行为的时候,回不可避免的讲抽象的侧重点转换到面向计算机结构。但是在对于类似商店这类包含了若干个对象的对象来说,其中对于某些小对象的行为,则很好的通过抽象隐藏起来其中比较机械的过程。而向我展示出来的则是一个更为“人性化”的一面。

在《TIJ》中也说到了OOP语言五个基本特性:

1.万物皆对象。我觉得这也是我在编程时所需要时刻记得的一点。我们要对一个问题进行细致的划分,将其中拥有相同特性的部分抽象出来,作为一个对象。然后赋予他们属性和对自身属性进行操作的行为。这应该也是面向对象的基础。

2.程序是对象的集合,他们通过发送消息来告知彼此要做的。就如同我们之前所说的,我们将一个大问题进行划分,然后抽象成了若干个对象。而一个程序去实现,我么需要的不仅仅使这几个对象。更为重要的使我们需要讲这些对象之间通过某些行为进行关联。就如同小明让小强帮他买一块橡皮一样。小明这个对象提供给了小强这个对象执行“帮XX买橡皮”的必要的参数:小明,买橡皮的钱。然后小强就回去执行买橡皮这个行为,小明是不会在意小强是怎么去买橡皮的,因为这与他无关,他需要做的就是等待小强这个对象返还给他一个橡皮。在程序编写时大概也是这个样子,一个对象告诉另一个对象他的请求,并给予执行这个请求所必需的参数,这样被请求的对象才回知道自己需要去做什麽,然后返还或者不返还给请求对象什么东西。

3.每个对象都有自己的由其他对象所构成的存储。最开始的时候对这句话很不理解。不过写了这么久的JAVA也算是可以理解他所要表述的意思。就如同我们在最开始所举出来的商店的例子,一个商店一定会包含若干个商品。当然,可能还会有别的东西。但是这并不妨碍我们去理解,因为万物皆对象。我们也可以将其通过某些特性将其抽象成为一个对象。这样,这个商店就是由若干个商品对象和若干个其他的对象所组成的。这部分并不难理解,当写了一段时间OOP语言后都会理解。

4.每个对象都拥有其类型。这可能比较难以表达,不过我还是会尽力说的更为明白一些。通过生活中的一些事情来举例子吧。警察局,消防队,医院。这些我们都可以看作是一个类型。而具体的某家警察局,消防队或者医院我们就可以看成是对这个类型的一个实现,也就是我们所说的对象。不同的警察局的实现都可以接收报案这样的请求。而对报案这个行为进行相应的则是具体的某家警察局,也就是警察局的一个实现(对象)。而并非警察局这个类型。类之间最主要的区分就是“可以发送什么样的消息给他”。这就如同你要看病就要去医院,家里起火就要打电话给消防队一样。它用来描述自身的属性,和它可以执行的行为,才是两个对象的本质区别。而不是警察局,消防队这样的名字的区别。

5.某以特定类型的所有对象都可以接受同样的消息。参考上一个例子,所有的警察局都可以接收一样的请求。当然,可能会有这种情况。我这里的环境比较好,我的警察局人数比较多,为了方便民众,我们添加了很多的服务。但是,这并不妨碍他作为一个警察局来执行一个警察局本来就可以执行的行为。这意味着,我们可以在一个类型上给他填加新的行为,但是并不妨碍他执行作为原本类型的行为。这种可代替性就是OOP一个比较强大的概念。

 

 

在这一段最后,《TIJ》说了一个Booch对对象提出的提出的一个更加简洁的描述:对象具有状态,行为和标识。对于状态,我觉得就是对这个对象的描述,行为则是这个对象可以执行的方法,所可以接受的请求也有这部分区分。而对于表示,在《TIJ》中也给了解释,我觉得比较好理解的时候也就是一个对象在被声明是所被分配的空间。毕竟同一类型的对象是拥有相同的状态和行为的。

0 0
原创粉丝点击