人类历史在进化的过程中不断的发明工具来帮助自己快速。方便的得到生活的必需品,减轻自己的工作量和劳动强度。同样人类发明了计算机来帮助自己快速的得到想要的结果。但同时计算机有别于其他的机械。因为它可以做一部分只有人脑才能完成的工作。所以人们赋予它一个更好听的名字“电脑”。我们可以把电脑看做是人脑延伸的工具。
    理解面向对象,首先要理解两个概念:类型和抽象。
①什么是类型?就是说你要把具体的事物抽象化。
②那什么是抽象呢?这么说吧,我们看到一个东西给它起了个名字叫“三角形”,然后我们又发现一个东西又给它起个名字叫“圆形”,后来我们发现的很多这样的东西,他们都共同的特征,但是还各有各的不同。我们就给它们起了一个通用的名字叫“几何图形”。后来我们又有了“三维立体图形”。我们又把它们归纳了一下它们的共性,就有了新的名词叫“图形”。
    从这里可以看出我们认识事物并且给它们起名字的概念的范围都是从小到大,从少到多的。所以我们就可以给任何的事物分文别类。以便于去认识这个世界。
    说到这里我们就可以说:“我们是把“三角形”和“圆形”抽象化成了“几何图形”。以后我们看到“三角形”就可以这样说“它是一个几何图形,也是一个图形”。这就是抽象了。
 
    编程语言的产生是始于对机器的模仿。最早我们用的机器指令是CPU直接可以识别并执行的指令。它的表现形式是二进制编码。机器指令由:操作码和操作数组成。
操作码:指出该指令要完成的操作。
操作数:指出参与运算的对象,以及运算的结果所存放的位置等。
    它是CPU直接识别的唯一一种语言,也就是说CPU能直接执行机器语言描述的程序。但是它有很多的缺点:不易读 出错率高 难以维护 也不能直观的反映计算机解决问题的基本思路。好处:效率高。
    后来人们选用一些能反映机器指令功能的单词或者词组来代表机器指令,把CPU内部的各种资源符号化,使用符号来引用具体的物理资源。于是汇编语言就诞生了。接着后来人们为了减轻工作又出现了许多所谓“命令式”语言如:BASIC   C等都是汇编语言的抽象。这些语言都是对汇编语言的抽象。但是它们做的主要抽象仍然要求再解决问题时候要基于计算机的结构,而不是基于要解决问题的结构来考虑的。程序员必须建立再机器模型和世界待解决问题的模型之间的关联。
机器模型:位于“解空间”内,这是你对问题建模的地方,例如计算机。
问题模型:位于“问题空间”内,这是问题存在的地方,例如一项业务。
 
    而现在我们讲问题空间中的元素及其在解决空间中的表示称为“对象”。这种思想的实质是:程序员可以通过添加新类型的对象使自身使用于某个特定问题。因此,当你在阅读描述解决方案的代码的同时,也是在阅读问题的表述。OOP可以根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题。
    用计算机编写程序就是为了解决问题。而问题的复杂程度直接取决于抽象的类型和质量。当我们引入”对象“的概念的后,一切就变的简单起来。Java正是对C的继续抽象。它让我们不用再去关注机器运行的每一个细节问题,去告诉机器你第一步要做什么,第二步要做什么。过程完全有电脑去安排。只要我们把问题的本质形象的表述出来。告诉它你要先解决什么问题,然后在解决什么问题就可以了。它就会按照我们生活中的逻辑行为去干活了。所以说“面向对象”更贴近生活,更人性化。