面向对象之对象世界

面向对象就是是以对象的观点出发,思考软件世界中的对象和对象之间关系。 对象是面向对象世界的原子 对象在对象世界中的位置就好像物质世界中的分子、原子一样。对象

面向对象就是是以对象的观点出发,思考软件世界中的对象和对象之间关系。

对象是面向对象世界的原子

对象在对象世界中的位置就好像物质世界中的分子、原子一样。对象是面向对象世界的基本单位。
前面的文章提高到对象,现实生活中的对象。

image

面向对象方法体系

对象世界是一个立体的世界,在实施面向对象方法的时候的可以用系统的方法来考虑对象。

  • 对象之间(从左到右)
  • 对象层次(从上到下或从下到上)
  • 对象状态(从前到后)

image

这样全方法一体的方法体系来解决对象与对象之间的关系,对象状态属性,对象层次来建立对象模型。

对象世界之动态与静态

对象世界和和我们的现实世界都是动态的,也就是在程序运行的过程中会产生对象,对象改变状态以及销毁对象。这些对象的生命周期和现实世界的事物的生命周期基本一致。同时对象世界和我们的现实世界不同,是可以静止的。静止的状态我们可以从两个角度来理解一个是程序保存了状态处于非运行的状态。另外一种角度就是我们在定义对象世界的时候对对象的定义。

 

对象实例与对象类型

我们捕捉到的对象可能是对象实例也可能是对象类型。对象实例是由具体的生命周期的,而且对象实例之间的状态或者属性可能不同。比如放在家里的电视机这个“电视机”是一个对象实例,指的是实实在在的事物。或者比如计算器上的数字键1这些都是对象的实例。

 

在软件对象世界中,对象实例有一个实例化的过程。当然这个实例化的过程有可能很简单,有很可能很复杂。从计算机的角度来讲就是分配一块物理内存的过程。所以比较底层的语言比如C是通过函数malloc以及free来分配内存的。而比较高级的语言如C++,C#,JAVA等都是使用new关键字来实现的。另外对于非常复杂的对象实例化过程,就需要把这个实例化的过程封装起来,这些方法导致产生了很多针对创建对象过程的设计模式。

 

上面的对象实例是针对对象世界的动态性来阐述的。同时对象世界也有静态性。静态性是之对象的分类。

 

对象类型是对事物的分类。也就是对对象实例的归类,目的是区分把对象的属性或者行为。熟话说“物以类聚”也是这个意思。将对象实例归类的成为对象类型的过程可以称之为“抽象”。

前面提到的电视机对象是一个对象实例,但是电视机也有电视机对象类型。我们可以根据电视机这个关注对象的某些属性来区分电视机。比如可以按照屏幕来区分,有液晶的,有普通的。也可以按照功能来区分比如黑白电视,彩色电视。对象实例是这些分类的结合体。这里的黑白电视机还是一种对象类型,不是具体的对象实例。

image

 

对象层次

在对象世界的静态定义过程中,形成了对象的层次结构,比如上面的电视机与黑白电视机就是一种一般与具体的关系,存在一定的层次关系。

当然这种关系不单单之父子关系。而往往对象层次是指对象的抽象层次不同。

image

 

面向对象世界不同的世界观

对于对象世界来讲同样存在不同的观点和看法。这些不同的观点和看法导致编程语言的本质和特性都有所不同。

 

观点一:对象实例的属性和行为是从类型获得(静态定义的),运行时行为不会发生改变

这个观点是典型的面向对象的观点。对象实例是从对象实例而来,因此对象实例的属性和行为都是从对象类型获得的,在对象世界的运行时,对象的动态性会改变对象实例的状态。这是很多基于类型的编程语言的基石。声明了一个类Class之后,对象实例的行为是从类型定义中获得的。随着软件的运行对象的状态改变。

 

观点二:对象无类型,对象的属性和行为都是可以改变的。

这种观点符合事物发展的规律,比如人作为一个对象,其属性比如年龄,身高等属性都是随着运行过程的进行而改变,同时一些行为也是在人生当中不断获得的。比如说编程能力,这些能力不是先天获得的,而是随着事物的发展而逐步通过学习机制来获得的。支持这种思想的编程语言如流行的JavaScript。对象实例可以在运行过程中获得某种能力,而另外一种对象实例又具备另外一种能力。

 

 

上面讲的是面向对象之对象世界,接下来的会继续阐述面向对象方法。

您可能有感兴趣的文章
什么是面向对象?

JavaScript面向对象详解

面试

面向对象编程思想 OOP

面向对象基础篇