文档章节

面向对象的一点思考

叶大侠
 叶大侠
发布于 2014/03/02 12:16
字数 1289
阅读 131
收藏 8

什么是面向对象?也许你也被面试官曾经这么问过。一直以来,也许你和我一样都不曾纠结与这个问题的答案,这和我们写好程序关系可能不大。我也不清楚为什么面试官会这么问,也许题库上有这么一道题。对于自己没办法回答的问题,我会有拿去考考别人的习惯,后面也有问了好几个学习Java或者C++的朋友,都是有点含糊其辞的回答了关于面向对象语言本身的一些特性,似乎并不是和问题对的上。

很多时候,我很希望要是认识作者就好了,这样,就只需要在平时聊天的时候问他:"嘿,你是怎么想的?"。但现实总是不尽人意的,很多答案我们可能只能自己去猜了。问题上有个非常关键的词:对象。很快,我在google的搜索框中找到了对它的解释:

对象【客体】(英语:Object):指可感知或可想像到的任何事物,既包括客观存在并可观察到的事物(如树木、房屋,抽象的如物价、自由),也包括想像的事物(如神话人物)。

原来这是个哲学概念。对哲学虽然没有什么研究,但是在高中时候被灌输的那点马克思主义的东西,还是可以理解的。有客体就会有主体,主体是实践活动和认识活动的承担着,客体(对象)是主体实践活动和认识活动指向的对象。想想我们人之初,是怎么认识‘鸭’这个物种的?


在见过了各种‘鸭’之后,在我们脑袋中的对‘鸭’的特征和行为便形成了我们对鸭的概念。为什么科学家们会想到用人认识世界的这种方法套用到计算机的身上呢?这让我想起了计算机革命的终极理想: 让机器像人一样。中学时候,计算机的记忆就是那台小小的卡西欧,是用来计算那些cos,sin什么的。对于那种带CRT屏,用个箱子装好,带了个win98的玩意,我尊称它为:电脑。让我们再回顾一下冯诺依曼体系结构,其实整个计算体系其实就是对人的抽象。

  

输入设备就是对我们眼睛耳朵等的模拟; 存储器就是我们的记忆细胞,控制器和运算器就是我们的大脑,输出就是经过大脑处理之后我们对外界的反应。既然计算机就是对人的抽象,那么对于语言设计者来说,是否可以设计一门让机器像人一样理解的语言呢?这样的话,那对于人来说,便可以根据自己的思维去要求计算机达到自己想要的要求了。说到这里,答案也就差不多揭晓了。我们可以通过客体【对象】来认识世界,我们可以通过对象的属性和行为去了解这个对象,同样的,如果可以通过计算机来描述对象的属性和行为,那么,计算机就可以抽象出现实世界。回到面向对象语言诞生之初,在查阅历史的时候有这么一段话:

对象作为编程实体最早是于1960年代由Simula 67语言引入思维。Simula这一语言是奥利-约翰·达尔和克利斯登·奈加特在挪威奥斯陆计算机中心为模拟环境而设计的。据说,他们是为了模拟船只而设计的这种语言,并且对不同船只间属性的相互影响感兴趣。他们将不同的船只归纳为不同的类,而每一个对象,基于它的类,可以定义它自己的属性和行为。 [1]

这里提出了类的概念,对象就是类的一个实例。类具有属性和行为,这和人类认识世界的方法是不吻而合的。这里还有一个关键的问题还没有回答,用面向对象的思想去指导人们编程,是否可以完成它既定的目标: 在软硬件环境逐渐复杂的情况下,让软件得到良好的维护? 这个问题的答案早就在多年后的今天已经得到了证明,在面向大型系统的构建时,面向对象语言的可重复性正充分展示着它独有的魅力。

1、http://zh.wikipedia.org/wiki/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%9A%84%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1#.E5.8E.86.E5.8F.B2

© 著作权归作者所有

共有 人打赏支持
叶大侠

叶大侠

粉丝 59
博文 44
码字总数 67312
作品 5
广州
程序员
私信 提问
不要用面向对象编程分散新手程序员的注意力

来源:Ackalrix博客【http://www.ackarlix.com】 编者按:原文作者James Hague是一位修复性程序员(recovering programmer),从上世纪80年代起开始设计视频游戏,属于发烧友级别,用汇编语言...

Ackarlix
2011/03/30
293
1
C++11新特性(14)-将sizeof用于类成员

sizeof运算符 sizeof运算符返回表达式或者类型所占内存空间的字节数。它返回一个size_t类型的常量表达式。 假设有下面的结构体: struct Point3d{ int x; int y; int z; }; 可以这样进行初始...

面向对象思考
2018/06/11
0
0
驾驭Makefile (准完整版)

最近工作很忙,但这不是为什么一个多星期没有更新博客的原因。相反,最近一直在写这篇文章。现在终于让它与大家见面了!这是一篇长达60多页的文章(见附件),希望与你渴望学习Makefile的热情...

李云
2009/08/25
0
0
记一次团队前端技术更新

之前用的技术 团队之前采用的是前后端统一的开发方式。 为什么会用这种开发方式呢?前端为什么采用Extjs我曾就这个问题询问了我的主管,得到了如下回复: 当时团队都是后端技术为主 没有专门...

单调先生
2017/12/07
0
0
durcframework/FDUI

欢迎使用FDUI 更新进展 优化JS加载,修复IE下JS加载问题. 新版FDUI发布啦 先睹为快 30多种主题随意切换. 如果您有好的意见和建议可以在上方的Issues中留言. 项目介绍 什么是FDUI? FDUI,是一个...

durcframework
2015/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 没时间 没头发 但有钱

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @开源中国总经办主任 :分享齐一的单曲《这个年纪》 《这个年纪》- 齐一 手机党少年们想听歌,请使劲儿戳(这里) @肿肿卷 :我真的可以睡一天...

小小编辑
36分钟前
11
4
Django进阶 1.1 ORM基础—ORM 1.2.1 增删改查之查询 1.2.2 删改增 (1) 1.2.3 删改增 (2)

ORM基础 ORM是Django操作数据库的API,Django的作者将sql语句封装在里面供我们使用。 我们前面还提到过Django提供一个模拟数据库的工具,sqlite,供我们学习测试使用。 如果我们想使用mysql...

隐匿的蚂蚁
今天
3
0
Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
3
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部