面向对象之对象世界- Richard 时间@脚印- 博客园

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

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

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

面向对象方法体系

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

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

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

对象世界之动态与静态

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

 

对象实例与对象类型

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

 

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

 

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

 

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

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

 

对象层次

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

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

 

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

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

 

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

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

 

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

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

 

 

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


对象的不同观点:
等同的概念不同,比如
a = 1; b = 1;
a == b ???

或者
a = 1; a = 2;
新的a == 旧的a ???

面向对象的对象,是一种变量,本质来说就是根据地址来确定相同的对象。(也就是容器观)

面向对象有多级抽象:
具体事物 --〉对象 --〉类

往往{dy}级抽象容易被忽略的。
{dy}级抽象是抽象状态。简单来说就是属性。
比如红色-〉绿色这种状态的变更,在{dy}级抽象已经能够解决。

第二级抽象抽象的是行为接口。
比如人和马都有动物的行为接口。可以在动物这个层次来统一编程。

一般来说,面向对象经常讨论单一对象来编程,但大量同类对象的编程很常见。因此我觉得对群组这个概念也应该把握。

我把这个看作是第三种抽象层次。






诺贝尔
我所指对象是一种对象观的方法。你讲的编程中的对象或者说是变量只是对象观的一个视图。用MVC的观点来讲,View就是你现在的变量,它有一定的表现。而Model便是对象观中的对象。

还有你的那些值对象与引用对象都是具体的对象实例,只不过你是站在了编程的角度来理解对象。至于站在什么角度去看问题,看对象是什么没有优劣,只不过看问题的角度不同,应用的地方也不一样。

我所阐述的对象实例是可以改变状态的,比如你的值对象a=1,b=1,这都都是对象实例,a=1,a=2这里体现的是对象的状态改变。

a=new house()这里的a也是对象实例,只不过这个对象实例是一个引用指针。引用指针本身有名称(a),也指向堆中的内容(对象实例属性)。

郑重声明:资讯 【面向对象之对象世界- Richard 时间@脚印- 博客园】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——