永久对象,有永久么?

原创 2005年01月03日 22:17:00

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

 

   

版权声明:本文为博主原创文章,未经博主允许不得转载。

java基础--properties(永久存储文件)

1、工程名称->右键->New->File->filenam.properties(以.properties后缀的文件)即可 2、写入、读取properties文件中数据 ...
  • qq_39640220
  • qq_39640220
  • 2017年08月21日 11:20
  • 89

微信永久二维码

微信永久二维码生成
  • chen782079048
  • chen782079048
  • 2017年06月13日 15:34
  • 767

【Python】数据持久存储:pickel

python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件...
  • ljffdream
  • ljffdream
  • 2015年04月10日 09:42
  • 823

那些年我们遇到的:Office2016永久激活

【前言】        不久前小编遇到了一个问题,Office的验证过期了,开始并没有在意,因为还可以正常使用。可是前两天Office的Word不能编辑了,于是乎度娘了一些办法,大多是一些软件例如Km...
  • l_mloveforever
  • l_mloveforever
  • 2017年04月09日 14:34
  • 10753

mount永久挂载一目录

我linux centos 6.3 用mount挂载一目录,后重启下挂载就没了,如何开机自动挂载? wo445136779 11级  分类: 编程开发  被浏览243次  2013.09...
  • hzdxw
  • hzdxw
  • 2016年06月13日 16:28
  • 2606

pycharm永久激活

PyCharm 的激活方式: 直接打开pycharm,选License server激活,输入:http://idea.imsxm.com...
  • qq_15783243
  • qq_15783243
  • 2017年09月21日 22:06
  • 2990

Ubuntu Linux 永久挂载(mount)分区

一般情况下,我们想挂载一个分区的办法就是用mount命令,如我想把/dev/sda3挂载到/media/aborn/data下使用以下命令即可 sudo mount /dev/sda3 /media...
  • loveaborn
  • loveaborn
  • 2014年04月19日 13:43
  • 4405

自定义UDTF和hive自定义函数的永久注册

package myUDF; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date;...
  • weixin_37519367
  • weixin_37519367
  • 2017年06月16日 17:56
  • 1299

Linux 设置永久ip地址的方法

Centos 6.5 查看 /etc/sysconfig/network-scripts/ 找到对应的网卡配置文件 如果没有,可以创建一个 形如: ifcfg-Auto_devicename ...
  • norsd
  • norsd
  • 2017年06月06日 21:34
  • 813

永久关闭linux防火墙

1.首先查看防火墙状态: ? 1 service iptables status 2. 永久性生效,重启后不会复原 开启: ? 1 ...
  • IRhythm
  • IRhythm
  • 2016年04月25日 15:03
  • 7317
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:永久对象,有永久么?
举报原因:
原因补充:

(最多只允许输入30个字)