面向对象到底是什么

深夜小茶会上,突然蹦出一个想法:面向对象到底是什么? 问题一经提出,全场安静,都是久经码场的Coder,竟然没有好好想过到底什么样才算是面向对象。

到底什么是对象

到底什么是对象呢?维基百科上这样写到:

在计算机科学中,对象(英语:object),是一个存储器地址,其中拥有值,这个地址可能有标识符指向此处。对象可以是一个变量,一个数据结构,或是一个函数。是面向对象(Object Oriented)中的术语,既表示客观世界问题空间(Namespace)中的某个具体的事物,又表示软件系统解空间中的基本元素

这句话说表示客观世界问题空间中某个具体的事物的基本元素我们称之为对象。那么我们是否可以理解为一个人就可以抽象为一个对象,一辆汽车也可以抽象为一个对象,世界万物皆对象。那么对象是有生命的吗?什么叫对象的生命?就拿人作为例子来讲,人有手脚嘴鼻眼,人可以自我完成很多行为,比如抓痒、说话、眨眼、呼吸…,正常人的情况下不需要借助外力就可完成这些行为,因为人是有生命的,相反如果没有生命的话,则任何事情都需要第三方的协助。那么我们创建的对象如果是没有生命的,那么就可以理解为仅仅就是一堆空架子,任何事情都需要借助别的对象来完成,这就违背了常规自然法则。

所以,我们所谓的对象,应该是具有生命力的一组元素的集合,也就是一棵树,由树根带动整棵树的生命力,树干、树叶、果实都依赖于树根提供养分,所以一棵树的所有元素聚合在一起就组成了树的对象实体,我们可以通过树根找到这棵树的所有元素,所以对于整个对象实体来说,根就成了这些聚合元素的聚合根,其他的元素就都成了对象实体的值对象。

对象包括了什么

依然先来看下

在软件系统中,对象具有唯一的标识符,对象包括属性(Properties)和方法(Methods),属性就是需要记忆的信息,方法就是对象能够提供的服务。在面向对象(Object Oriented)的软件中,对象(Object)是某一个类(Class)的实例(Instance)。

所有的对象都包括了属性和方法(行为),我们还从People开始看:属性包括了肤色、胳膊、腿、体重、年龄等,那么方法就有了获取和简单设置这些属性的方法,也就是我们最常见的setter/getter方法。从整个项目代码的层面俯视People类,发现这是一个完全独立于任何模块的类,可以单独进行单测和迁移。这个People类应该就是大多数Java程序员最常见到的一种,

对象怎么定义
对象的含义是什么
对象里面有什么
对象外面又有什么
什么对象是独立的
什么对象又是只能被聚合的
对象的状态是什么
对象的行为是什么
对象的行为方式又是什么
面向对象编程到底是面向对象架构还是面向对象语言