如果你要把一只猫卖给一个计算机专家,千万不要说它有多聪明多可爱,而要说,这是一只面向对象的猫。这是程序员对程序员的揶揄。

面向对象渗透到软件的各个领域,既然找不到银弹,这颗铜子弹成了我们对抗人狼的最佳武器。

在这样的世界里,你有没有想过,什么是面向对象呢?

如果你习惯性地说:继承、封装和多态,那么请你继续读完这篇随笔吧,它会带你认识一个真实的OO

我想提及面向对象之前,应该先搞明白什么是对象。《面向对象分析与设计》(Grandy Booch)中提到,对象是一个朴素的概念,约一岁以后,人会培养出一种对象概念的能力。从人类的认知角度来说,对象应是以下之一

  • 可触摸或可见的东西
  • 可被理性理解的东西
  • 可进行想像或施加动作的东西

在英文中Object是一个应用广泛的词,它的出现早于程序语言出现之前,我想用中文中一个最适合的词来翻译,应该是"东西"而非"对象",当然有点太口语化了。Grandy Booch接下来还提到,现实生活中的对象不是软件开发中唯一感兴趣的对象,另一些重要的对象是设计过程的产物。最后的总结是:对象具有状态、行为、和标识。

对象具有状态、行为、和标识这三点是非常重要的,这是面向对象大师Grandy Booch对朴素对象概念的非常精确的概括。

《面向对象编程导论》(Ian Graham)中对面向对象有这样描述:一些作者已经强调了面向对象程序设计和面向数值程序设计的区别。MacLenna(1982)指出,值(例如数字17)是应用式的和只读的,他们总是抽象的。对象(例如实例)在一定范围内存在,可以被创造、撤销、共享和更新。数值是引用透明的,引用它的一切事情将使用同样的数值。

从这一段我们可以看出,与"对象"相对的并非"过程",而是"值"。值和对象最显著的区别正是Booch总结的3点,状态、行为、和标识。举一个例子,3是一个值,苹果是一个对象。苹果具有状态,它可能已经烂了,或者还没熟;苹果也有行为,它可以被削皮,可以被咬一口,也可以变烂;标识保证了,苹果是唯一的,你无法在世界上找到任何一个其它苹果,使得它跟这个苹果是“同一个苹果”。而对值来说并非如此,3就是3,是没有状态的;3也是不可改变的,你只能由3得到一个新的值4,却没法把任何一个3变成4;值是不需要标识的,世上所有3都是相同的,没有任何区别。

在这种朴素地认识下,我想可以分析一下C++对象模型的设计:用内存中连续的一段存储一个对象的状态,这样可以将它们的地址作为标识,将对象分类并将他们的行为以成员函数的形式体现

(未完待续)

面向对象闲话(一)——什么是对象相关推荐

  1. javascript”面向对象编程”- 1万物皆对象

    javascript几乎成了如今web开发人员必学必会的一门语言,但很多人却只停在了一些表单验证等基础操作层面上,在面向对象语言大行其道的当下,我们需要去学习javascript的面向对象的知识,以便 ...

  2. python面向对象编程从零开始_Python面向对象编程从零开始,从没对象到有对象

    原标题:Python面向对象编程从零开始,从没对象到有对象 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智 ...

  3. java面向对象数组_Java面向对象的构造器与数组对象

    Java开发离不开面相对象,那么面向对象如何来的?什么又是数组对象?今天小编就来与大家共同学习一下Java的面向对象的构造器与数组对象. 构造器:用于创建对象时执行初始化.当创建一个对象时eg:new ...

  4. Python快速入门(八)面向对象1:类、对象和封装

    Python快速入门(八)面向对象1:类.对象和封装 1.类和对象 1)类的定义 2)对象的定义 3)类和对象的关系 4)类的设计 2.第一个面向对象案列 代码1 代码2 3.设置对象属性 4.ini ...

  5. Java_面向对象基础(类、对象、方法和构造函数)

    Java的面向对象基础(类.对象.方法和构造函数) 面向对象的基本概念 面向对象的设计思想 什么是类 什么是对象 类的定义 设计面向对象的例子 步骤一:设计动物这个类 步骤二:创建具体的动物 步骤三: ...

  6. day16 初识面向对象编程(类与对象、构造函数与对象,类与类)

    目录 一.面向对象和面向过程的区别 二.类与对象的概念 三.构造函数和对象的关系 三.类与类的关系:组合 四.类与类的关系:依赖 一.面向对象和面向过程的区别 面向过程:强调过程步骤 面向对象:强调对 ...

  7. 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)

    文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...

  8. Perl面向对象(3):解构——对象销毁

    本系列: Perl面向对象(1):从代码复用开始 Perl面向对象(2):对象 Perl面向对象(3):解构--对象销毁 第3篇依赖于第2篇,第2篇依赖于1篇. perl中使用引用计数的方式管理内存, ...

  9. 面向对象的程序设计1 理解对象—— JS学习笔记2015-7-4(第75天)

    面向对象的程序设计一-- 理解对象 转载于:https://www.cnblogs.com/zhangxg/p/4621520.html

  10. 子对象是什么java_面向对象编程(什么是对象)——java

    一.什么是面向对象,什么是面向过 二.引入对象和类的概念 对象:是具体事物 如:小明 汽车 类: 是对对象的抽象(抽象 抽出象的部分) Person 先有具体的对象,然后抽象各个对象之间的部分,归纳出 ...

最新文章

  1. sl中几个简单变量的获取
  2. 线性代数:第二章 矩阵及其运算:逆矩阵、分块矩阵
  3. 上项线体表位置_实用人体体表解剖:头颈部(高清大图版)
  4. 接入amazon avs_每日新闻综述:亚马逊将互联网接入推向全球的宏伟计划
  5. mini2440_x35 ubuntu下使用dnw进行传送文件
  6. 哨兵2号波段_Redis 哨兵使用以及在 Laravel 中的配置
  7. 2.5 不匹配数据划分的偏差和方差
  8. IBM大中华区总架构师:话说程序员的职业生涯
  9. Docker与容器化-03-使用Dockerfile创建镜像
  10. 婚恋职场人格-张晓文-武汉理工大学-中国MOOC-亲密关系测试题参考答案
  11. php怎么用origin打开,[转载]origin 使用技巧 (4)
  12. 图论(七)哥尼斯堡七桥问题
  13. markdown、html转义特殊字符代码大全
  14. 知识付费网站源码可开分站一键更新后台数据
  15. 基于opencvsharp的景深融合
  16. Practical Full Resolution Learned Lossless Image Compression
  17. Python求多元函数的极小值
  18. VS2017生成项目报 找不到资产文件“xxxx\obj\project.assets.json
  19. 第一章 初识OpenHarmony
  20. 08_NandFlash驱动

热门文章

  1. Julia: 关于Array排序函数sortslices
  2. 克里斯坦森:管理水平高的公司往往离崩塌不远
  3. 基金教父约翰博格的创业史
  4. (转)比特币算法——SHA256算法介绍
  5. 云智能资深专家崮德:谈谈我对华为HarmonyOS 2.0的看法
  6. EasyStack郭长波连任OpenStack基金会独立董事
  7. 【滤波器】基于matlab平方根升余弦滤波器【含Matlab源码 994期】
  8. 【语音编辑】基于matlab语音编辑【含Matlab源码 539期】
  9. sql server2008如何修改mac地址_QCC304x/QCC514x:修改蓝牙MAC地址及名称
  10. java 线程condition_(七)java多线程之Condition