网构软件自主构件模型的设计与实现

点赞:8874 浏览:34035 近期更新时间:2024-04-04 作者:网友分享原创网站原创

[摘 要]在传统构件模型的基础上借鉴软件自主性研究领域中对于实体的自主性的规约和支持手段,提出自主构件的概念用来刻画网构软件的实体元素,建立了自主构件模型,探讨了改进现有构件框架,从而为自主构件提供支撑的可行方案.

[关 键 词]自主构件环境感知器规则引擎

1.引言

现有的构件模型在刻画组成网构软件的实体元素时,存在以下不足:

第一,网构软件的实体元素是独立开发和交付并且分布在整个网络上,它们的运行是由所在的网络节点提供本地支持和控制.同一系统中的不同构件可能分属于不同的所有者,因此现有模型缺乏对构件独立性的刻画.

第二,这些模型对于系统有这样的检测设,系统在运行阶段和组装阶段的结构是一致的,构件与构件、构件与环境之间的依赖关系从系统组装部署阶段一直到运行过程中始终是稳定的,因此现有模型缺乏对构件的主动性的支持.

针对上述存在的问题,借鉴软件自主性研究领域中对于实体的自主性的刻画和支持手段,有必要构建一种新的用于刻画Inter上自主构件的统一的计算模型.

2.自主构件模型研究与设计

构件模型是构件的本质特征以及构件之间关系的抽象描述.自主构件模型则要关注自主构件的本质特征及自主构件之间的关系.

2.1自主构件的模型

定义自主构件的规约包括如下内容:

自主构件应该声明它向外部提供什么怎么写作,对“做什么”进行语义描述.

自主构件发布它所提供的怎么写作时,应该说明使用其怎么写作的方法,也即关于客户该如何请求自主构件的怎么写作的约定.该约定是构件与客户传递各种交互消息的依据,是对怎么写作功能的语法描述.

2.2自主构件模型的语义表达

在定义自主构件模型的时候,希望根据模型能够推导出构件的行为和属性.可以从以下几个方面来讨论自主构件模型的语义表达:

自主构件何时开始去实现目标?

自主构件何时承诺提供怎么写作?

自主构件的目标是否能够实现?自主构件如何实现它的目标?

构件是否能够成功的提供怎么写作?构件如何提供怎么写作?

2.3自主构件模型的设计

自主构件的内部结构主要包括知识层、行为层、环境感知层.

知识层主要用来对自主构件的目标、怎么写作及所处的环境进行建模,行为层则主要关注如何实现自主构件的目标及向外提供怎么写作,而环境感知层则用来感知环境中传递的各种怎么写作请求信息.

环境感知层用于获取环境信息感知环境变化.这一层的实现体主要是环境感应器.自主构件之间的通信消息是携带环境信息的一种重要载体,因此环境感应器通过解析怎么写作请求,来获取环境信息,并把捕获到的信息传递给行为层,一方面用来修改知识库,另一方面,作为推理器和规划器的输入使自主构件产生行为动作.

网构软件自主构件模型的设计与实现参考属性评定
有关论文范文主题研究: 关于构件的论文范文检索 大学生适用: 研究生论文、学年论文
相关参考文献下载数量: 33 写作解决问题: 学术论文怎么写
毕业论文开题报告: 文献综述、论文前言 职称论文适用: 技师论文、中级职称
所属大学生专业类别: 学术论文怎么写 论文题目推荐度: 优质选题

3.自主构件基本功能模块的实现

自主构件主要功能模块主要包括环境感知器、规则引擎、规划图等.

3.1环境感知器的实现

环境感知器负责感知环境的状态、获取和解析环境中的怎么写作请求,然后将所捕获到的信息传递给行为层,一方面用来修改知识库,另一方面,被规则引擎RuleEngine用来触发相关的规则.

下面是类Sensor的主要成员变量和方法说明的实现:

publicInterfaceSensor{

/*接收消息的*/

protectedact.ac.util.SynchronizedQueueinbox,

/*负责发送消息的*/

protectedact.ac.util.SynchronizedQueueoutbox,

/*用于保存与本Sensor所属的自主构件发生通信的其他自主构件的地址信息*/

protectedAddressBookaddressbook等于newAddressBook(),

/*消息接收线程,消息接收完毕后,将从消息中解析出的信息添加到知识库中*/

protectedServerserver,

/*消息发送线程,postMan从outbox中逐条取出消息,与消息接收者建立socket

连接把消息发送出去*/

protectedPostManpostMan,

/*把要发送的消息msg投到发送里,当needReply为true时,返回会话标识*/

publicStringsend(Performativemsg,booleanneedReply),}

3.2规则引擎的实现

规则引擎是一个复杂的规则解释器,目前已有很多开源的非商业用途的规则引擎,其中Jess[Jess]是适用于Ja平台的一个轻量级规则引擎,使用Rete算法处理规则匹配,而且支持后向推导,工作记忆查询,以及对Ja对象的直接操作和推理等功能.

类RuleEngine的主要成员变量和方法的实现如下所示:

publicInterfaceRuleEngineextendsThread{

/*Jess规则引擎对象*/

protectedRetejessEngine,

/*用于保存规则中的动作函数*/

protectedHashtableactionsTable,

/*用于保存从通信层传入的ACL消息,

RuleEngine将按序根据规则处理msgQueue中的消息*/

protectedSynchronizedQueuemsgQueue,

/*在构造函数中初始化Jess规则引擎的事实库,导入规则文件fileName.clp,

并启动Jess规则引擎*/

publicRuleEngine(ACContextcontext,StringfileName),

/*向msgQueue添加ACL消息*/

publicvoidnewMsg(Performativemsg),

/*action封装了用户自定义的动作函数,addAction把action加到actionsTable中*/

publicvoidaddAction(ACActionaction),

/*把自主构件提供怎么写作的能力转换成事实写入事实库中*/

publicvoidaddACServices(HashtableserviceTable),}

3.3规划引擎的实现

规划是自主构件行为的一个动作序列,规划执行引擎负责执行这样的动作序列.

PlanEngine的主要成员变量和方法的实现如下所示:

publicInterfacePlanEngineextendsThread{

/*规划执行引擎中的任务队列*/

protectedSynchronizedQueuequeue,

/*向任务队列queue中添加任务,即动作结点*/

publicsynchronizedvoidadd(Nodenode),

/*依次执行任务队列queue中的任务*/

publicvoidrun(),

/*执行实现怎么写作Service的规划,input是第一个动作的输入参数*/

publicvoidplan(Stringservice,Objectinput),}

3.4规划图的实现

自主构件提供的每一个怎么写作对应着一个任务规划,怎么写作的实现通过规划的执行来完成.由于采取离线方式来制定规划,因此需要用一个类来记录规划,这便是规划图类.

类PlanGraph的主要成员变量和方法的实现如下所示:

publicInterfacePlanGraph{

/*用于记录该图的拓扑结构.二维数组的组成为:

{{节点名,点的第一条边名,第一条边终点名,第二条边名,第二条边终点名......}

{第二个节点名.....}......}*/

protectedString[][]structure,


/*图的起始节点名*/

protectedStringstartNodeName,

/*执行这个规划,把规划图中的起始结点放入规划引擎的执行队列,

input是起始结点的输入参数*/

publicvoidrunGrpah(Objectinput,GraphEngineengine),}

3.5自主构件的实现

自主构件是环境感知器、规则引擎、规划引擎、知识信息等的合成.

类AutonomousComponent的主要成员变量的实现如下所示:

publicInterfaceAutonomousComponent{

/*环境感知器*/

protectedSensorsensor,

/*规则引擎*/

protectedRuleEngineruleEngine,

/*规划引擎*/

protectedPlanEngineplanEngine,

/*其他自主构件的信息*/

protectedVectoracquaintances,

/*怎么写作及怎么写作所对应的规划图*/

protectedHashtableserviceTable,

/*规则文件*/

protectedStringruleFile,}

由此,证明了自主构件模型的可行性.