《计算机科学导论》读书笔记(一):浅析面向过程与面向对象编程

Posted by Lxxyx on 2016-02-05

《计算机科学导论》的来源

仍记得那是15年的5月底,面临着毕业的学长学姐看着自己大学四年的诸多书籍,纷纷在校内开始了摆摊生活。当时才大一的我,看着一长条的书摊,仿佛看到了宝藏。才逛了一会儿,我心满意足的抱着好几本书回寝室了。其中就包括这两天看到入迷的《计算机科学导论》。

当初买下它的时候,只是模糊的觉得,自己可能会用到。既然又是书,所以就爽快的买了下来。反正也才5元(逃)。回去一翻开,更是惊喜,书如全新的一般,连名字都没有。然后……放在书柜上,就束之高阁了。直到寒假回家时,顺手把它带回了家。

就是下图的这本书。

计算机科学导论

结果昨天下午看了一眼,便一发不可收拾,一口气读到深夜两点。读完之后,感觉之前所有零散的知识点被串成了一串,有种拨云见月的感觉。之前很多无法理解的概念,也都迎刃而解了。

看来无论是学习社会科学或计算机科学,都如杨绛先生所说的那句话一样:

“你的问题主要在于读书不多而想得太多。”

或者又如《荀子》一书中劝学篇所言:

“吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。”

总而言之,万分庆幸自己回家时候带了这本《计算机专业导论》,让我领略到计算机科学的万千精彩。

关于面向过程与面向对象的疑惑

第一次学编程时,学习的是C语言。在刚开始学的时候,就知道C语言是一门面向过程的编程语言,除此之外还有面向对象的编程语言。当时的我,并没有想这么多。只是慢慢的看视频然后学习。

面向过程与面向对象是学编程过程中不可避免的问题。果然,这个问题在15年3月份,我学习Java后开始出现了。

当时在图书馆借阅了李刚老师的《疯狂Java 第二版》,在学习到面向对象部分,彻底晕头转向了。究竟什么是面向对象,什么又是面向过程?为什么说面向对象是一种良好编程方法?封装、继承、多态到底是什么?(这应该算自己第一次尝到计算机基础不牢的苦果,只是当时没有意识到)。

在15年6月学前端,到现在已有大半年。期间也看过诸如《JavaScript面向对象编程》等书,也去谷歌过相关文档。但总感觉似懂非懂。

还好,我碰见了《计算机专业导论》这本书,一本让我有“拨云见月”之感的书。

面向过程

在这儿,我们先介绍面向过程。
在面向过程的程序中,我们把程序看成是 操纵被动对象的活动主体。其中,被动对象本身不能开始一个动作,但能从活动主体(程序)接收动作。
被动对象的数据储存在内存中,程序为了操纵它们,会发布动作。称之过程

例如打印一个文件,文件就是被动对象。同时为了能被打印,文件会存储在内存中。而程序为了打印文件,会调用一个print过程,print过程中包含了计算机打印所需的步骤。

在过程式模式中,对象(文件)和过程(打印)是完全分开的实体。对象(文件)是能接收print动作的实体。而过程print是被编写的一个独立的实体,程序只是触发它。

看到上面这一大串,是不是有点晕了?简单来说,面向过程模式的程序由三部分组成:

  1. 对象创建部分
  2. 一组过程调用
  3. 每个过程的一组代码

结合上面的例子,这样就比较好理解了。

面向对象

面向对象模式与面向过程模式区别在于:面向对象模式处理活动对象,而非被动对象。如日常生活中的洗衣机,汽车等。 在这些对象上执行的动作都包含在这些对象中,对象只需要接收合适的外部刺激即可。

还是拿打印文件做例子,在面向对象模式中的文件能把所有被文件执行的过程(面向对象中成为方法)(打印,复制粘贴等)打包在一起。在这种模式下,程序只需要向文件发出打印或者复制的请求,文件就会被打印或复制。而这些方法,也被从这些对象继承的其它对象共享。
比较面向过程与面向对象,可以看出面向过程编程中的过程是独立的实体,但面向对象模式中的方法是属于对象的。

面向对象的核心要点,在于类。因为相同类型的对象需要一组方法,为了创建这些方法,C++或者Java都选择使用成为类的单元。

继承性

在面向对象模式中,作为本质,一个对象能从另外一个对象继承。这个概念称为继承性。例如,当一个几何形状类被定义后,我们就可以定义矩形类。矩形是拥有额外特性的几何形状。

多态性

面向对象的多态性是指我们可以定义一些具有相同名字操作的方法,但这些操作在不同类中会产生不同结果。
例如我们给几何图形类定义一个算面积的方法,同时定义圆形类和方形类继承几何图形类。那么同样是算面积,圆形类的结果和方形类的结果会不一样。因为两者计算公式不一样。
这就是多态。

感想

本以为只是简单的描述一下自己对面向过程和面向对象的理解。结果写的时候却是磕磕绊绊。看来和老师说的一样,自己学的好和教别人教的好是两回事。还是得努力去加强这一方面。

接下来可能会写好几篇《计算机专业导论》的读书笔记,因为解决了我颇多难点,所以算是值得一写。至于看的速度,我觉得算是较快的,因为计算机系统组成,计算机网络,算法等章节,我在之前就有过专门学习。只是没有一本书把知识点给串起来而已。

前端路漫漫,且行且歌~