CSDN博客

img gnicky

永久对象,有永久么?

发表于2005/1/3 22:17:00  1308人阅读

    今天看书,面向对象,发现永久对象,想起在课堂上老师好像提过,只是有些对老师的面向对象知识有些不屑一顾,往往不听。
    永久对象persistent object,在面向对象的思想中相当重要,只是目前的研究和当年70、80年代的研究不可同日而语,原因很简单,出现了很多的支持序列化(serializable)对象的OOPL(面向对象程序设计语言,如java,.net等,php是不支持序列化的)。
    出现永久对象的思想,和软件业出现面向对象的思潮是同样的,引用他们的话就是返璞归真,从软件业的众多“面向”回归到面向对象,对象是现实生活中的基本单元,以对象的角度思考问题,符合人类理性思维的方法与过程,能够有效地缩小问题域,解决域描述的语言鸿沟。
    当我们以对象以及对象之间的联系,消息等关联来表征问题域的时候,我们的目标是责任域(也就是软件期望的功能域)。对象可以通过类来实例化,也可以使用纯粹的虚类,我们把对象划分为主动对象,被动对象;把服务(方法)划分为主动服务,被动服务;把消息划分为同步消息,异步消息等等。我们的目标就是设置规范,尽量统一地用软件语言描述现实世界。
    举一个简单的例子,当对象没有一个方法(服务)是主动发生的,那么这个对象就是被动对象,它的行为由外界决定,它需要保持状态,随时响应外界的消息。
    这涉及两个方面的问题,一,对象的生命周期OLC,二,对象的储存。目前能够做到完全的面向对象的OOPL毕竟还不多,即使OOPL能够做到,我们的程序设计分析人员,设计人员,开发人员实现的过程中难免引入过程化的思想,这就好比我们写的程序总有一些我们称为主线的控制逻辑,通过这条总线来创造对象,然后由这些对象组成系统,一个动态的世界,每一个主体就是那些对象,对象有植物(无生命的,被动对象)、动物(有生命的,主动对象)、命令(来自控制总线),这就好比人类的社区。
    我们设计的系统在我们启动的那一刻起,也许很多对象就开始了生命,但是随着程序的结束,它们也结束了,从程序的加载,它们开始初始化,然后最终析构,如同人的生命一般。
    但是我们是主动对象,我们的状态是复杂的,而且要强行设置我们的状态是非常困难的。这个问题在我描述的系统中也会发生。某些对象要求得到保存,并且是无损失的保存,这个对象的生存周期是很长的,甚至是超过系统主线程的,这些对象我们就希望它们是永久对象。
    也许很多人会说,那么也很容易啊,把这个对象的众多特征保存起来,使用强大的关系数据库,在系统需要使用的时候,利用这些数据动态创建对象,这样看起来也就一个很好的PO的解决方法。这里面涉及到对对象类的理解,需要保存的基本数据,以及构造对象到上次消灭的时间的状态需要消耗的时间。
    程序设计的前辈们为我们引入了很好的概念,序列化,其实从认识论的观点来看,我们就是把内存中的东西完全地保存在第二存储媒介上,同时保存的这些数据能够使得对象建立。
    这里面需要注意的就是继承等复杂的OO概念,其实目前的序列化接口或者基类,我想采用的方法就是捕捉内存中对象的所有特性(静态特征,动态特征,保护性,私有性),然后将这些特性和它们相对应的值保存,在创建的时候呢,通过读取类名称,建立对象,根据对应的特征写回值,因此说呢,只要能够通过内存捕捉特定对象的元数据meta data,建立永久对象的存储关键特征和参数就不难了。
    大家有没有兴趣和我一起来看看,我们通过java序列化之后写到文本中的对象是个什么样子呢?
    其实我也很期待,也许根本就不是我们能够读懂的,也许就是一堆0101010。我想既然序列化的基本方法是二进制,或者SOAP,也许就可以倒着翻译过来。
    也希望对这个有见解的大虾们,给与留言提示!

 

   

0 0

相关博文

我的热门文章

img
取 消
img