drools规则引擎详细设计说明书

drools规则引擎详细设计说明书

ID:13243094

大小:9.73 MB

页数:423页

时间:2018-07-21

上传者:U-3868
drools规则引擎详细设计说明书_第1页
drools规则引擎详细设计说明书_第2页
drools规则引擎详细设计说明书_第3页
drools规则引擎详细设计说明书_第4页
drools规则引擎详细设计说明书_第5页
资源描述:

《drools规则引擎详细设计说明书》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

XXX系统概要设计说明书规则引擎系统详细设计说明书北京思特奇信息技术股份有限公司第2页共835页 目录1综合描述41.1系统目标41.2系统概述41.2.1系统功能特点41.2.2系统功能与详细设计模块的映射关系51.3运行环境61.3.1网络拓朴图61.3.2硬件运行环境61.3.3软件运行环境61.3.4系统余量设计71.4程序结构说明71.4.1程序分布图及程序种类说明71.4.2程序系统结构图及功能说明81.5源程序及编译链接组装说明122系统详细设计132.1算法子系统132.1.1RuleBase创建模块132.1.2WorkingMemory构建模块612.1.3Alpha网络事实处理模块812.1.4Beta网络事实处理模块1382.1.5规则执行模块1972.2规则编译子系统3012.2.1词法分析子模块3012.2.2语法分析子模块3032.2.3初始化Dialect信息子模块3432.2.4创建新的Package子模块355第423页共423页 2.2.5添加规则信息子模块4262.2.6存储错误信息子模块436第423页共423页 1系统详细设计1.1算法子系统参照《规则引擎第二阶段概要设计说明书》中RETE算法部分的数据流图和系统体系结构,其中数据流图如下所示:RETE算法子系统分为:RuleBase创建模块,WorkingMemory构建模块,Alpha网络事实处理模块,Beta网络事实模块和规则执行模块,现分别对各个模块所包含的类进行描述。1.1.1RuleBase创建模块第423页共423页 该模块负责构建一个RuleBase,该RuleBase能够在加入规则的调用后将规则编辑成一个RETE网络保存在RuleBase中。其中建网起始构件类如图3.1所示,建网起始构件为建网过程提供必要的准备如将规则包中的每一条规则分别加入到网络,在加入网络的过程中对规则进行拆分等。图3.1建网起始构件类建网的过程构件类如图3.2所示,建网过程构件类分析每一个处理过后的规则的内部结构向网络中加入各个节点。第423页共423页 图3.2建网过程构件类图建网功能支持类如图3.3所示,提供建网过程中上下文保存信息,节点ID的自动生成,规则的查分等。图3.3建网过程中功能支持类第423页共423页 1.1.1.1ReteooBuilder1.1.1.1.1程序特征描述构造RETE网络的主要类,负责对每一条规则进行一个总体的构造,调用具体的构造类的实例(ReteooRuleBuilder的实例)构造一个规则对应的网络,将每一个规则加入网络后形成的叶子节点(TerminalNode)与该规则相对应加入到Map容器中。1.1.1.1.2程序功能性能描述自身构造,加入规则1.1.1.1.3输入/输出项自身构造:TReteooBuilder(TInternalRuleBase*ruleBase);功能:构造一个TReteooBuilder,在这个过程中负责构造一个TIdGenerator的实例为RETE网络中的节点生成一个唯一的ID号;构造一个TReteooRuleBuilder的实例,负责将一条规则加入到网络具体的功能。入口参数:TInternalRuleBase*ruleBase//规则库,为前面构造的规则库的引用返回结果:无主要流程:1.构造一个TIdGenerator的实例2.构造一个TReteooRuleBuilder的实例加入规则:第423页共423页 voidaddRule(TRule*rule);功能:利用ReteooRuleBuilder的实例向网络中加入一条规则,将该规则加入网络后形成的叶子节点(TerminalNode)与该规则加入到Map容器中。入口参数:TRule*rule//规则对象返回结果:无主要流程:1.利用ReteooRuleBuilder的实例向网络中加入一条规则2.该规则加入网络后形成的叶子节点(TerminalNode)与该规则加入到Map容器中1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被ReteooRuleBase调用加入规则;调用ReteooRuleBuilder的实例加入规则1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图加入规则的流程图:第423页共423页 1.1.1.1.1测试要点自身构造:查看能否成功的构造ReteooBuilder;加入规则:能否成功调用ReteooRuleBuilder的实例。1.1.1.2ReteooRuleBuilder1.1.1.2.1程序特征描述TReteooRuleBuilder负责将一条规则加入RETE网络中去,其中包括调用网络构建的功能类对规则进行拆分转化,调用网络构件类对网络进行构建。1.1.1.2.2程序功能性能描述自身构造,加入规则,加入子规则(拆分过后的规则)1.1.1.2.3输入/输出项自身构造:TReteooRuleBuilder();功能:提供对TReteooRuleBuilder的构造,在这个过程中实例化TBuildUtils类,并在该utils中加入TGroupElementBuilder、TPatternBuilder、TEvalBuilder,这些Builder分别提供对规则由外及内的分析和构造网络节点入口参数:第423页共423页 无返回结果:无主要流程:1.将实例化TBuildUtils类,产生一个utils对象2.在该utils中加入TGroupElementBuilder、TPatternBuilder、TEvalBuilder的对象加入规则:vector*addRule(TRule*rule,TInternalRuleBase*rulebase,TIdGenerator*idGenerator)功能:加入规则,在此过程中调用加入网络构建的功能类对规则进行拆分转化,然后调用加入子规则的过程将拆分后的规则加入网络入口参数:TRule*rule//规则对象TInternalRuleBase*rulebase//规则库对象的实例TIdGenerator*idGenerator//节点ID产生器的实例返回结果:vector*指向容器的指针,该容器中存放了加入规则后新生成的规则终止节点。(对应于OR类型的规则,可能拆分成几个子规则,则相应的会返回几个规则终止节点,所以需要一个容器进行保存)主要流程:1.将加入规则的动作加入到日志2.利用规则构建功能类中的TLogicTransformer类的transform方法将规则进行拆分(是指将OR类型的规则,拆分成几个子规则)3.对每一个子规则调用加入子规则的过程4.将得到的规则终止节点加入到返回的容器中加入子规则:TRuleTerminalNode*addSubRule(TBuildContext*context,TGroupElement*subrule,第423页共423页 TRule*rule);功能:加入子规则,得到子规则中各个部分相应的构建器,加入子规则到网络,并得到相应的规则终止节点。入口参数:TBuildContext*context//构造上下文TGroupElement*subrule//子规则对象TRule*rule//规则对象返回结果:TRuleTerminalNode*返回该规则所对应的规则终止节点的指针主要流程:1.利用utils对象对规则进行分析,调用相应的构造类2.利用现有的Builder讲规则加入网络3.得到网络的终止节点并返回1.1.1.1.1数据结构说明//构建功能类的实例,它能够识别规则的内部结构,返回规则的类型AND或者是OR,存放现有Builder的实例TBuildUtils*utils;1.1.1.1.2接口定义被TReteooBuilder调用,提供加入规则形成网络的功能,调用规则相应Builder来构建网络1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图加入规则的流程图:第423页共423页 1.1.1.1.1测试要点自身构造:查看能否成功实例化TBuildUtils加入规则:能否完成规则拆分的过程,并对每一个规则调用加入子规则的过程;加入子规则:能否利用相应的Builder加入子规则,产生规则终止节点。1.1.1.2GroupElementBuilder1.1.1.2.1程序特征描述此类是RETE算法中规则编辑部分的一个重要类。规则编辑描述规则库中的规则如何生成一个有效的具有分辨力的网络即RETE网络。此类就是根据约束条件在RETE网络中增加相应的节点。第423页共423页 1.1.1.1.1程序功能性能描述构建网络,构造相应的GroupElement元素的Pattern。1.1.1.1.2输入/输出项构建网络:Voidbuild(TBuildContext*context,TBuildUtils*utils,TRuleConditionElement*rce)功能:把GroupElement中的元素构造成相应的Pattern。入口参数:TBuildContext*context//上下文信息TBuildUtils*utils//被构建RETE网络的唯一入口TRuleConditionElement*rce//约束条件返回结果:无主要流程:1.先把参数中的约束条件转换成GroupElement类型2.通过getType()方法得到GroupElement的类型3.如果迭代器等于空,则程序结束4.否则根据GroupElement的类型调用不同类型的构造器构造一个Pattern,第423页共423页 1.1.1.1.1数据结构说明无第423页共423页 1.1.1.1.1接口定义被RuleBaseFactory调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点网络构建,能否成功添加相应的节点1.1.1.2AndBuilder1.1.1.2.1程序特征描述处理AND逻辑,根据约束条件增加相应的节点。1.1.1.2.2程序功能性能描述构建网络,增加相应类型的节点1.1.1.2.3输入/输出项构建网络:Voidbuild(TBuildContext*context,TBuildUtils*utils,TRuleConditionElement*rce)功能:构建网络。第423页共423页 入口参数:TBuildContext*context//上下文信息TBuildUtils*utils//被构建RETE网络的唯一入口TRuleConditionElement*rce//约束条件返回结果:无主要流程:1.GroupElementge=(GroupElement)rce2.循环把GroupElement的孩子全部都加到RETE网络中去3.根据child的类型获取相应的构造器,构造相应的Pattern4.再根据约束条件来判断加入LeftInputAdapterNode还是JoinNode节点第423页共423页 1.1.1.1.1数据结构说明无第423页共423页 1.1.1.1.1接口定义被GroupElementBuilder调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点能否成功添加节点。1.1.1.2PatternBuilder1.1.1.2.1程序特征描述负责对pattern的分析,用于在建网过程中负责将Patern添加到rete网络中。Pattern对应的节点有AlphaNode和ObjectTypeNode。1.1.1.2.2程序功能性能描述分析构建Pattern,向Rete网络中添加Patern,向rete网络中加入ObjectTypeNode,向rete网络中加入AlphaNode,分析构建约束,判断是否需要leftactivation,判断对象类型是否在以前出现过1.1.1.2.3输入/输出项分析构建Pattern:voidbuild(TBuildContext*context,第423页共423页 TBuildUtils*utils,TRuleConditionElement*rce);功能:负责对Pattern也就是rce的分析,用于构建Rete网络。入口参数:TBuildContext*context,//建网上下文信息TBuildUtils*utils,//建网单元TRuleConditionElement*rce//保存的pattern信息返回结果:无主要流程:1.this->attachPattern(context,utils,pattern);向Rete网络中添加Patern:voidattachPattern(TBuildContext*context,TBuildUtils*utils,TPattern*pattern);功能:通过对Pattern信息进行解析,在Rete网络中添加必要的AlphaNode。入口参数:TBuildContext*context,//建网上下文信息TBuildUtils*utils,//建网单元TPattern*pattern);//用于建网的pattern信息返回结果:无主要流程:1.调用createConstraints方法,填写alphaConstraints和betaConstraints2.将betaConstraints存进建网上下文信息context中3.如果pattern->getSource()==NULL,调用attachAlphaNodes方法添加一个AlphaNode节点4.否则将alphaConstraints也存进建网上下文信息context中5.对Pattern的source进行分析建网第423页共423页 向rete网络中加入ObjectTypeNode:staticTObjectTypeNode*attachObjectTypeNode(TBuildContext*context,TObjectType*objectType);功能:通过对Pattern信息进行解析,在Rete网络中添加必要的AlphaNode。入口参数:TBuildContext*context,//建网上下文信息TObjectType*objectType//对象类型返回结果:对象类类型节点指针主要流程:1.利用上下文信息创建出一个对象类型节点2.调用节点的attach方法将该节点添加到网络中3.返回这个对象;类型节点指针向rete网络中加入AlphaNode:voidattachAlphaNodes(TBuildContext*context,TBuildUtils*utils,TPattern*pattern,list*alphaConstraints);功能:通过对Pattern信息进行解析,在Rete网络中添加必要的AlphaNode。入口参数:TBuildContext*context,//建网上下文信息TBuildUtils*utils,//建网单元TPattern*pattern//用于建网的pattern信息list*alphaConstraints//待建alpha节点的约束信息返回结果:无第423页共423页 主要流程:1.调用utils->attachNode()方法添加一个ObjectTypeNode节点2.对于每个alphaConstraints,调用utils->attachNode()方法添加一个AlphaNode节点分析构建约束:voidcreateConstraints(TBuildContext*context,TBuildUtils*utils,TPattern*pattern,list*alphaConstraints,list*betaConstraints);功能:通过对Pattern信息进行解析,在Rete网络中添加必要的AlphaNode。入口参数:TBuildContext*context,//建网上下文信息TBuildUtils*utils,//建网单元TPattern*pattern//用于建网的pattern信息list*alphaConstraints,//用于保存分析出的alpha约束list*betaConstraints//用于保存分析出的beta约束返回结果:无主要流程:1.从pattern中取出constraints约束信息2.调用checkRemoveIdentities对当前pattern进行一个校验(是否分析过同类型的)3.对constraints进行逐项分析,如果当前项是TDeclaration类型,跳过4.否则如果当前项的约束类型是ALPHA,添加到alphaConstraints中5.否则如果当前项的约束类型是BETA,添加到betaConstraints中6.否则抛出异常信息第423页共423页 判断是否需要leftactivation:boolrequiresLeftActivation(TBuildUtils*utils,TRuleConditionElement*rce);功能:通过对Pattern信息进行解析,在Rete网络中添加必要的AlphaNode。入口参数:TBuildUtils*utils,//建网单元TRuleConditionElement*rce//用于建网的pattern信息返回结果:Pattern信息含有source返回真否则返回假主要流程:1.返回((TPattern*)rce)->getSource()!=NULL;判断对象类型是否在以前出现过voidcheckRemoveIdentities(TBuildContext*context,TPattern*pattern,list*betaConstraints);功能:通过对Pattern信息进行解析,在Rete网络中添加必要的AlphaNode。入口参数:TBuildContext*context,//建网上下文信息TPattern*pattern//用于建网的pattern信息list*betaConstraints//用于保存返回的信息返回结果:无主要流程:第423页共423页 1.如果RuleBase的RemoveIdentities有效,并且Pattern中储存的ObjectType是TClassObjectType类型2.获取建网上下文信息context中的ObjectType列表3.对列表中元素逐项进行分析,如果Pattern保存的ObjectType是以前pattern的ObjectType的父类在BetaConstraints中添加一个TInstanceNotEqualsConstraint对像做标识。4.最后将pattern也存进建网上下文信息context中,表示这种类型的pattern已经分析过1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被ReteooRuleBase调用加入规则;调用ReteooRuleBuilder的实例加入规则1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点分析构建Pattern,向Rete网络中添加Patern,向rete网络中加入AlphaNode,分析构建约束第423页共423页 //这几个主要是看能否正确创建对应的对象类型节点和alpha节点向rete网络中加入ObjectTypeNode//如果插入的事实不在rete网络中出现的话,能否正确添加一个对象类型节点1.1.1.1AndOrTransformation1.1.1.1.1程序特征描述在规则中有AND和OR嵌套的,将嵌入在规则内层的OR逻辑提出到最外层。1.1.1.1.2程序功能性能描述将嵌入在规则内层的OR逻辑提出到最外层1.1.1.1.3输入/输出项提取OR逻辑到最外层:voidTAndOrTransformation::transform(TGroupElement*parent)功能:提取OR逻辑到最外层。入口参数:TGroupElement*parent//GroupElement类型的规则元素返回结果:无主要流程:1.遍历parent中的children列表,计算其嵌套的第一层复杂元素的children列表总元素数,并将其列表展开加入局部列表中orsList2.parent中的children列表中的简单元素则加入到另一个局部列表others中3.将parent的类型设置为or类型4.清除parent的children列表第423页共423页 1.将orsList列表中的元素再做展开,按顺序添加到一个and类型的TGroupElement的children列表中2.同样将others列表中的元素按照他们在parent的children列表中出现的次序加入到同样的and类型的TGroupElement的children列表中3.将该and类型的TGroupElement加入到parent的children列表中4.直至处理完所有的orsList列表中的元素5.调用parent的pack方法,去除冗余的元素1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被GroupElementBuilder调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否成功添加节点。第423页共423页 1.1.1.1BuildContext1.1.1.1.1程序特征描述管理上下文信息1.1.1.1.2程序功能性能描述自身构造,获取或设置上下文中的参数1.1.1.1.3输入/输出项自身构造:TBuildContext(TInternalRuleBase*rulebase,TIdGenerator*idGenerator)功能:自身构造。入口参数:TInternalRuleBase*rulebase//规则库TIdGenerator*idGenerator//每个节点的唯一标识返回结果:无主要流程:1.初始化上下文中的参数1.1.1.1.4数据结构说明无1.1.1.1.5接口定义无第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点上下文中的参数能否初始化成功,以及能否对这些参数进行get或set操作1.1.1.2BuildUtils1.1.1.2.1程序特征描述整个构建RETE网络的一个入口。1.1.1.2.2程序功能性能描述向RETE网络中添加节点1.1.1.2.3输入/输出项添加节点:TBaseNode*attachNode(TBuildContext*context,TBaseNode*candidate)功能:向RETE网络中添加节点。入口参数:TBuildContext*context//上下文信息TBaseNode*candidate//待添加的候选节点返回结果:第423页共423页 无主要流程:1.判断待插入的节点是否已经在RETE网络中,如果已经有了,则把待插入的候选节点删除,程序结束2.如果没有,再判断该节点是否可以共享,如果可以共享,再确定应该加入的节点的类型3.如果出现节点重复,则收回为其分配的id,并且删除带插入的候选节点4.如果待插入的节点是一个新的节点,则把该节点加入到RETE网络中。第423页共423页 1.1.1.1.1数据结构说明无第423页共423页 1.1.1.1.1接口定义被RetooRuleBuilder调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点能否成功添加节点。1.1.1.2EvalBuilder1.1.1.2.1程序特征描述处理Eval逻辑,根据约束条件增加相应的节点。1.1.1.2.2程序功能性能描述添加一个Eval类型的节点1.1.1.2.3输入/输出项添加节点:voidbuild(TBuildContext*context,TBuildUtils*utils,TRuleConditionElement*rce)功能:第423页共423页 添加一个Eval类型的节点。入口参数:TBuildContext*context//上下文信息TBuildUtils*utils//被构建的RETE网络的唯一入口TRuleConditionElement*rce//约束条件返回结果:无主要流程:1.在RETE网络中添加一个Eval类型的节点1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被ReteooRuleBuilder调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否成功添加Eval节点。第423页共423页 1.1.1.1ExistBuilder1.1.1.1.1程序特征描述处理Existl逻辑,根据约束条件增加相应的节点。1.1.1.1.2程序功能性能描述添加一个Exist类型的节点1.1.1.1.3输入/输出项添加节点:voidbuild(TBuildContext*context,TBuildUtils*utils,TRuleConditionElement*rce)功能:添加一个Exist类型的节点。入口参数:TBuildContext*context//上下文信息TBuildUtils*utils//被构建的RETE网络的唯一入口TRuleConditionElement*rce//约束条件返回结果:无主要流程:1.先把TruleConditionElement转换成GroupElement,然后取出GroupElement元素的孩子2.根据孩子的类型获取相应的构造器3.如果上下文中的tuplesource属性不为空,且objectsource为空,则添加一个RightInputAdapter类型的节点4.再添加一个Exist类型的节点第423页共423页 1.1.1.1.1数据结构说明无第423页共423页 1.1.1.1.1接口定义被GroupElementBuilder调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点能否成功添加Exist节点。1.1.1.2ExistOrTransformation1.1.1.2.1程序特征描述在规则中有Exist和OR嵌套的,将嵌入在规则内层的OR逻辑提出到最外层。1.1.1.2.2程序功能性能描述将嵌入在规则内层的OR逻辑提出到最外层1.1.1.2.3输入/输出项提取OR逻辑到最外层:voidtransform(TGroupElement*parent)功能:提取OR逻辑到最外层。入口参数:第423页共423页 TGroupElement*parent//GroupElement类型的规则元素返回结果:无主要流程:1.取出parent的children列表中的唯一一个元素por2.将parent设置为or类型3.将parent的children列表清空4.将por的每个元素加入到一个Exists类型的TGroupElement的children列表中5.将该Exists类型的TGroupElement加入到parent的children列表中6.调用parent->pack()去除parent中的冗余1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被GroupElementBuilder调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否成功添加节点。第423页共423页 1.1.1.1IdGenerator1.1.1.1.1程序特征描述管理RETE网络中节点的id值。1.1.1.1.2程序功能性能描述给一个新的RETE网络节点赋值或者收回一个已经被取消了的节点的id值。1.1.1.1.3输入/输出项赋值:intTIdGenerator::getNextId()功能:给一个新节点的id赋值。入口参数:无返回结果:Int类型的一个数主要流程:1.returnthis->nextId++收回id值:voidTIdGenerator::releaseLastId()功能:当释放一个节点的时候,把其id值收回。入口参数:无返回结果:无主要流程:第423页共423页 this->nextId--1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被ReteooBuilder调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否成功地给新的节点赋值和收回已经被释放了的节点的id值。1.1.1.2InitialFactImpl1.1.1.2.1程序特征描述初始化事实。1.1.1.2.2程序功能性能描述初始化事实第423页共423页 1.1.1.1.1输入/输出项初始化事实::TInitialFact*getInstance()功能:初始化一个事实。入口参数:无返回结果:TInitialFact*//一个指向事实的指针主要流程:returnTInitialFactImpl::INSTANCE;1.1.1.1.2数据结构说明无1.1.1.1.3接口定义无1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图见输入输出中的流程介绍1.1.1.1.6测试要点能否成功初始化事实,返回一个指向事实的指针。第423页共423页 1.1.1.1LogicTransformer1.1.1.1.1程序特征描述处理逻辑,用于移除逻辑中的冗余。1.1.1.1.2程序功能性能描述初始化,进行逻辑转化,处理元素,处理树,响应or转化1.1.1.1.3输入/输出项初始化:voidinitialize();功能:初始化,将所有的逻辑转化处理单元加入列表中。入口参数:无返回结果:无主要流程:addTransformationPair("NOT",newTNotOrTransformation());addTransformationPair("EXISTS",newTExistOrTransformation());addTransformationPair("AND",newTAndOrTransformation());进行逻辑转化vector*transform(TGroupElement*ad);功能:将ad中的冗余进行移除。入口参数:第423页共423页 TGroupElement*ad//TGroupElement元素返回结果:保存ad的children去除冗余后的vector列表主要流程:1.对ad进行clone,保存为cloned2.调用processTree对cloned进行处理3.调用cloned->pack();对cloned进行去冗余4.如果cloned是and类型直接把cloned加入到vector列表ands中5.否则如果cloned是or类型,将cloned的children列表进行展开6.如果当前项是GroupElement元素,并且是and类型将其直接加入到列表ands中7.否则new一个and类型的GroupElement,把当前项加入到该GroupElement的children列表8.再加入到列表ands中9.否则如果cloned既不是and也不是or类型,将其包装成and类型的GroupElement,再加入到列表ands中10.对ands中的所有元素调用fixClonedDeclarations方法确定声明11.返回ands处理元素voidprocessElement(TDeclarationScopeResolver*resolver,stack*contextStack,TRuleConditionElement*element);功能:对规则条件进行递归处理,更新声明对象入口参数:TDeclarationScopeResolver*resolver,//声明处理单元stack*contextStack,//上下文信息栈TRuleConditionElement*element//待处理的元素返回结果:无主要流程:1.如果elememt是TPattern类型,a)取出其中的嵌套元素,存到列表temp中b)对temp中的每个元素递归调用processElement进行处理c)对elememt中的Constraints列表的每个元素第423页共423页 a)调用getRequiredDeclarations方法获取需要的声明列表decb)对dec中的每个元素调用resolver->getDeclaration获取对应的声明resolvedc)如果resolved不为空,并且resolved不是dec中的当前元素d)调用constraint的replaceDeclaration方法进行替换2.否则如果elememt是TEvalCondition类型a)调用getRequiredDeclarations方法获取需要的声明列表decb)对dec中的每个元素调用resolver->getDeclaration获取对应的声明resolvedc)如果resolved不为空,并且resolved不是dec中的当前元素d)调用constraint的replaceDeclaration方法进行替换3.否则a)将该元素加入到contextStack栈中b)取出其中的嵌套元素,存到列表temp中c)对temp中的每个元素递归调用processElement进行处理d)弹出contextStack栈的栈顶元素处理树voidprocessTree(TGroupElement*ce);功能:遍历逻辑树,进行处理,将Or节点往上提,并去除冗余。入口参数:TGroupElement*ce//待处理的逻辑返回结果:无主要流程:1.标记下该ce没有or类型子节点,调用pack去除ce的冗余2.取出ce的children列表3.对于children列表中的每个元素4.如果它是TGroupElement类型,递归调用processTree进行处理5.如果处理后的child还是or类型或是and类型并且和父节点类型一样,调用child的pack(ce)进行处理6.否则,如果child是or类型,标记下该ce有or类型子节点7.调用applyOrTransformation继续进行对ce的响应处理响应or转化voidapplyOrTransformation(TGroupElement*parent);第423页共423页 功能:响应对or类型的TGroupElement元素的处理。入口参数:TGroupElement*parent//待处理的TGroupElement元素返回结果:无主要流程:1.在TLogicTransformer的处理单元列表中查找与parent对应类型的处理单元2.调用该处理单元的transform方法对parent进行处理1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被GroupElementBuilder调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否正确对TGroupElement元素进行分析处理。第423页共423页 1.1.1.1NotBuilder1.1.1.1.1程序特征描述处理Not逻辑,根据约束条件增加相应的节点。1.1.1.1.2程序功能性能描述添加一个Not类型的节点1.1.1.1.3输入/输出项添加节点:voidbuild(TBuildContext*context,TBuildUtils*utils,TRuleConditionElement*rce)功能:添加一个Not类型的节点。入口参数:TBuildContext*context//上下文信息TBuildUtils*utils//被构建的RETE网络的唯一入口TRuleConditionElement*rce//约束条件返回结果:无主要流程:1.先把TRuleConditionElement转换成GroupElement,然后取出GroupElement元素的孩子2.根据孩子的类型获取相应的构造器3.如果上下文中的tuplesource属性不为空,且objectsource为空,则添加一个RightInputAdapter类型的节点4.再添加一个Not类型的节点第423页共423页 1.1.1.1.1数据结构说明无第423页共423页 1.1.1.1.1接口定义被GroupElementBuilder调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点能否成功添加Not节点。1.1.1.2NotOrTransformation1.1.1.2.1程序特征描述在规则中有Not和OR嵌套的,将嵌入在规则内层的OR逻辑提出到最外层。1.1.1.2.2程序功能性能描述将嵌入在规则内层的OR逻辑提出到最外层1.1.1.2.3输入/输出项提取OR逻辑到最外层:voidtransform(TGroupElement*parent)功能:提取OR逻辑到最外层。入口参数:第423页共423页 TGroupElement*parent//GroupElement类型的规则元素返回结果:无主要流程:1.取出parent的children列表中的唯一一个元素por2.将parent设置为and类型3.将parent的children列表清空4.将por的每个元素加入到一个not类型的TGroupElement的children列表中5.将该not类型的TGroupElement加入到parent的children列表中6.调用parent->pack()去除parent中的冗余1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被GroupElementBuilder调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否成功添加节点。第423页共423页 1.1.1.1OrBuilder1.1.1.1.1程序特征描述处理OR逻辑,根据约束条件增加相应的节点,但是还未实现。1.1.1.1.2程序功能性能描述无1.1.1.1.3输入/输出项无1.1.1.1.4数据结构说明无1.1.1.1.5接口定义无1.1.1.1.6算法无1.1.1.1.7程序逻辑流程图无1.1.1.1.8测试要点无。第423页共423页 1.1.1.1PatternSource1.1.1.1.1程序特征描述模式资源,主要封装Pattern,EvalCondition两种类型的资源,从而对外提供统一的接口。1.1.1.1.2程序功能性能描述自身构造函数1.1.1.1.3输入/输出项自身构造函数:TPatternSource()功能:一个空实现。入口参数:无返回结果:无主要流程:无1.1.1.1.4数据结构说明无1.1.1.1.5接口定义无第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点无。1.1.1.2RuleRemovalContext1.1.1.2.1程序特征描述管理上下文信息。1.1.1.2.2程序功能性能描述记录在RETE网络中哪些节点被访问过,以及判断该节点是否被访问过。1.1.1.2.3输入/输出项记录被访问的节点:voidTRuleRemovalContext::visitTupleSource(TTupleSource*node)功能:记录一个被访问过的节点。入口参数:TTupleSource*node//被访问的节点返回结果:无第423页共423页 主要流程:this->visitedNodes->insert(make_pair(node->getId(),node))记录被访问的节点:BoolTRuleRemovalContext::alreadyVisited(TTupleSource*node)功能:判断一个节点是否被访问过。。入口参数:TTupleSource*node//被访问的节点返回结果:一个bool值主要流程:Returnthis->visitedNodes->find(node->getId())!=this->visitedNodes->end()1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被ReteooBuilder调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍第423页共423页 1.1.1.1.1测试要点能否记录已经被访问过的节点以及判断该节点是否被访问过。1.1.1.2RuleSequenceComparator1.1.1.2.1程序特征描述对RETE网络中节点优先级的比较。1.1.1.2.2程序功能性能描述比较两个节点之间的优先级大小1.1.1.2.3输入/输出项优先级的比较:boolTRuleSequenceComparator::compare(TObject*o1,TObject*o2)功能:两个节点之间优先级的比较。入口参数:Object*o1//带比较的节点Object*o2//带比较的节点返回结果:一个bool值主要流程:1.先根据salience中的value值来进行比较2.再根据节点的id值来进行比较第423页共423页 1.1.1.1.1数据结构说明无1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否成功比较两个节点之间的优先级大小。1.1.2WorkingMemory构建模块WorkingMemory构建模块负责构建有状态的工作区内存(StatefulSession),用于保存所有加入的事实,并提供插入事实、删除和更新事实的入口函数,激活加入到议程中的规则引起规则的执行。其中WorkingMemory的继承层次如图3.4所示,AbstractWorkingMemory是一个抽象类,提供了大部分主要的功能。第423页共423页 图3.4WorkingMemory的继承层次事实句柄工厂类如图3.5所示,用于将插入到规则引擎的对象,转换为规则引擎内部的事实FactHande的形式。图3.5事实句柄工厂类第423页共423页 1.1.1.1AbstractWorkingMemory1.1.1.1.1程序特征描述AbstractWorkingMemory抽象类负责维护所有与事实(工作内存)相关的动作与状态,为所有插入事实提供了一个存储的场所,并为所有的与工作内存变更(插入、删除和更新)相关的动作提供入口级的原语,调用相应的方法完成各个动作。1.1.1.1.2程序功能性能描述自身构造,插入事实,删除事实,更新事实,得到节点内存,触发规则执行1.1.1.1.3输入/输出项自身构造:TAbstractWorkingMemory(intid,TInternalRuleBase*ruleBase,TAbstractFactHandleFactory*handleFactory);功能:提供对TAbstractWorkingMemory的构造,在这个过程中根据规则库的配置文件设置工作内存的相关属性,初始化保存事实的容器,初始化保存节点内存的容器。入口参数:intid//工作内存的唯一标识IDTInternalRuleBase*ruleBase//指向规则库的指针TAbstractFactHandleFactory*handleFactory//指向事实句柄工厂类的指针,该指针在后面的RuleBase初始化返回结果:无主要流程:1.根据规则库的配置文件设置工作内存的相关属性2.初始化保存事实的容器3.初始化保存节点内存的容器第423页共423页 插入事实:TDefaultFactHandle*insert(TObject*object,booldynamic,boollogical,TRule*rule,TActivation*activation);功能:插入事实,做好事实插入到RETE网络前的准备工作,包括检查事实是否已经在工作内存中,已经新建一个传递上下文对象,用于保存传递过程中消息等。入口参数:TObject*object//插入的对象booldynamic//布尔值,表示是否为动态插入事实(所谓的动态是指在规则执行中插入事实)boollogical//布尔值,表示是否逻辑插入事实,逻辑插入事实的功能将在后续迭代中加入,目前版本不支持此项功能TRule*rule//规则对象TActivation*activation//该事实所属某个激活规则的元组返回结果:TDefaultFactHandle*事实句柄的指针,插入对象封装成事实句柄后的返回主要流程:1.查看工作内存中是否包含该对象,如果包含则返回,否则转到22.将该插入的对象利用事实句柄工厂类将其转化成对应的事实句柄,放入到工作内存中去3.新建一个传递上下文对象,用于保存事实在RETE网络中传递相关的信息4.调用ReteooWorkingMemory的doInsert()方法开始从网络的根节点插入事实5.释放相关资源,程序返回删除事实:voidretract(TDefaultFactHandle*factHandle,boolremoveLogical,boolupdateEqualsMap,TRule*rule,TActivation*activation);第423页共423页 功能:删除事实,删除在工作内存中的事实句柄,此操作导致工作内存改变,从而有可能引起激活新的规则放入议程或者从议程中删除某些激活的规则。入口参数:TDefaultFactHandle*factHandle//需要删除的事实句柄指针boolremoveLogical//布尔变量,是否为逻辑删除boolupdateEqualsMap//布尔变量,是否需要更新工作内存中的euqalsMap容器TRule*rule//规则对象TActivation*activation//该事实所属某个激活规则的元组(议程元素AgendaItem)返回结果:无主要流程:1.查看工作内存中是否包含该事实句柄,若不包含则返回,否则转22.构造删除事实的上下文对象,用于保存删除过程中的信息3.调用ReteooWorkingMemory的doRetract()方法开始从网络的根节点插入事实4.从工作内存中删除该事实句柄5.释放相关资源,程序返回更新事实:voidupdate(TDefaultFactHandle*factHandle,TObject*object,TRule*rule,TActivation*activation);功能:更新事实,该过程包含了两个步骤,首先要从工作内存中删除该原事实句柄,然后根据更新的对象来更新原事实句柄,将更新后的事实句柄插入到网络中去入口参数:TDefaultFactHandle*factHandle//需要更新的事实句柄指针TObject*object//需要更新的对象指针TRule*rule//规则对象TActivation*activation//该事实所属某个激活规则的元组(议程元素AgendaItem)第423页共423页 返回结果:无主要流程:1.查看工作内存中是否包含该事实句柄,若不包含则返回,否则转22.构造更新事实的上下文对象,用于保存更新过程中的信息3.调用ReteooWorkingMemory的doRetract()方法开始从网络的根节点插入原事实句柄4.根据更新的对象来更新原事实句柄5.调用ReteooWorkingMemory的doInsert()方法开始从网络的根节点插入更新后的事实6.释放相关资源,程序返回得到节点内存:TObject*getNodeMemory(TNodeMemory*node);功能:得到节点内存,分别调用相应的节点的创建节点内存方法来获得对应节点的内存,以节点ID作为节点内存唯一的标识入口参数:TNodeMemory*node//网络节点返回结果:节点内存对象的指针主要流程:1.查看节点内存容器中是否包含该节点所对应的内存,若包含则返回该节点内存,否则转22.调用相应节点的createMemory()方法创建对应的节点内存3.将新创建的节点内存放入将节点内存容器中去,程序返回触发规则执行:voidfireAllRules();功能:第423页共423页 触发规则执行,依次取出议程中的规则进行执行入口参数:无返回结果:无主要流程:1.设置相应的控制变量值2.调用agenda指针所指向对象(TDefautAgenda的实例,将在规则执行节介绍)的fireNextItem()方法依次取出议程组中议程元素进行执行,其中议程元素中包含了对激活规则的引用1.1.1.1.1数据结构说明//节点内存容器,以节点的ID为键,节点内存为值std::map*nodeMemories//插入事实容器,以插入事实对象为键,对应的事实句柄为值std::map*assertMap;//议程指针,指向议程的实例,具体将在规则执行节介绍TDefaultAgenda*agenda;1.1.1.1.2接口定义被规则引擎的初始程序调用,开始进行引起规则引擎工作内存改变的一系列动作;调用规则执行模块相关的类完成规则的执行。1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图插入事实流程图:第423页共423页 1.1.1.1.1测试要点自身构造:检查是否能够完成各种初始化操作插入事实:能否将插入的事实封装成事实句柄插入到网络的节点中删除事实:能否从网络的节点中删除相应的事实句柄更新事实:能否根据更新后的对象更新事实句柄,并触发由此导致的一系列改变得到节点内存:能否调用各自节点创建工作内存加入到容器中触发规则执行:能否触发规则的执行,产生相应的输出第423页共423页 1.1.1.1ReteooWorkingMemory1.1.1.1.1程序特征描述TReteooWorkingMemory提供初始化议程,插入事实和删除事实最基本(更小粒度)的操作。1.1.1.1.2程序功能性能描述自身构造,插入事实,删除事实1.1.1.1.3输入/输出项自身构造:TReteooWorkingMemory(intid,TInternalRuleBase*ruleBase);功能:提供自身的构造,在这个过程中初始化指向议程的指针入口参数:intid//工作内存唯一标识IDTInternalRuleBase*ruleBase//指向规则库的指针返回结果:无主要流程:1.调用父类的构造函数2.初始化指向议程的指针插入事实:voiddoInsert(TDefaultFactHandle*handle,TObject*object,TPropagationContext*propagationContext);功能:第423页共423页 调用规则库RuleBase的插入事实assertObject()的操作,从网络的根节点rete开始插入事实句柄入口参数:TDefaultFactHandle*handle//指向事实句柄的指针TObject*object//指向插入对象的指针TPropagationContext*propagationContext//指向传递上下文的指针,该值在AbstractWorkingMemory的insert操作中初始化返回结果:无主要流程:1.调用规则库RuleBase的插入事实assertObject()的操作,从网络的根节点rete开始插入事实句柄删除事实:voiddoRetract(TDefaultFactHandle*handle,TPropagationContext*propagationContext);功能:删除事实,调用规则库RuleBase的插入事实retractObject()的操作,从网络的根节点rete开始删除事实句柄入口参数:TDefaultFactHandle*handle//指向事实句柄的指针TPropagationContext*propagationContext//指向传递上下文的指针,该值在AbstractWorkingMemory的retract操作中初始化返回结果:无主要流程:1.调用规则库RuleBase的插入事实retractObject()的操作,从网络的根节点rete开始删除事实句柄1.1.1.1.1数据结构说明无第423页共423页 1.1.1.1.1接口定义被AbstractWorkingMemory的插入、删除和更新事实调用;调用RuleBase的插入和删除事实的操作从网络的根节点开始,从整个网络中插入和删除事实。1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点自身构造:能否完成议程的初始化操作插入事实:能否成功调用RuleBase的插入事实assertObject()操作删除事实:能否成功调用RuleBase的插入事实retractObject()操作1.1.1.2ReteooStatefulSession1.1.1.2.1程序特征描述TReteooStatefulSession为WorkingMemory继承的最下层,主要是提供自身的构造,提供一致的接口为外部应用程序调用,创建一个有状态的内存区。1.1.1.2.2程序功能性能描述自身构造第423页共423页 1.1.1.1.1输入/输出项自身构造:TReteooStatefulSession(intid,TInternalRuleBase*ruleBase);功能:提供自身的构造,提供一致的接口(满足JSR94规范)为外部应用程序调用入口参数:intid//工作内存唯一标识IDTInternalRuleBase*ruleBase//指向规则库的指针返回结果:无主要流程:1.调用父类的构造函数完成自身的构造1.1.1.1.2数据结构说明无1.1.1.1.3接口定义为规则引擎的外层接口,供应用程序调用1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图见输入输出中的流程介绍1.1.1.1.6测试要点自身构造:查看能否成功构造出一个TReteooStatefulSession对象,主要检查能否成功调用父类的构造函数第423页共423页 1.1.1.1ReteooStatelessSession1.1.1.1.1程序特征描述TReteooStatelessSession为WorkingMemory继承的最下层,主要是提供自身的构造,提供一致的接口为外部应用程序调用,创建一个无状态的工作内存区。1.1.1.1.2程序功能性能描述创建一个工作区,工作区执行方法1.1.1.1.3输入/输出项创建工作区:TInternalWorkingMemory*newWorkingMemory();功能:创建一块新的工作区入口参数:无返回结果:TInternalWorkingMemory*//指向工作区内存的指针主要流程:1调用父类的构造函数完成自身的构造工作区执行:voidexecute(TObject*object)功能:工作区内部的执行情况入口参数:TObject*object//待插入到工作区中的对象第423页共423页 返回结果:无主要流程:1先创建一块新的工作区内存2调用AbstractWorkingMemory的insert()方法把待插入的object对象添加到工作区中3再调用AbstractWorkingMemory的fireAllRules()的方法触发所有规则1.1.1.1.1数据结构说明TInternalRuleBase*ruleBase//指向规则库的指针第423页共423页 1.1.1.1.1接口定义为规则引擎的外层接口,供应用程序调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点创建一块新的工作区内存:能否成功创建一块新的工作区内存工作区内部的执行:看能否插入一个事实,并且能否触发所有规则1.1.1.2AbstractFactHandleFactory1.1.1.2.1程序特征描述TAbstractFactHandleFactory负责将插入的对象封装成规则引擎内部能够识别的事实句柄TDefaultFactHandle的形式1.1.1.2.2程序功能性能描述封装对象,毁坏事实句柄1.1.1.2.3输入/输出项封装对象:TDefaultFactHandle*newFactHandle(TObject*object);功能:第423页共423页 将插入的对象否装成事实句柄的形式入口参数:TObject*object//指向插入对象的指针返回结果:TDefaultFactHandle*封装后的事实句柄主要流程:1.如果当前的事实句柄池(该池为一个堆栈,存放了所有毁坏了的事实句柄ID,主要是重用该ID值)不为空,则将池中最上面的ID出栈作为待生成事实句柄的ID2.调用TDefaultFactHandle的构造函数封装该对象成事实句柄,并返回毁坏事实句柄:voiddestroyFactHandle(TDefaultFactHandle*factHandle);功能:删除事实句柄,将该事实句柄的ID回收放入到事实句柄池中入口参数:TDefaultFactHandle*handle//指向事实句柄的指针返回结果:无主要流程:1.将该事实句柄的ID回收,放入到事实句柄池中2.调用事实句柄的invalidate()函数将该事实句柄中对象的指针置为NULL,解除对象与事实句柄的对应关系3.内存回收,并返回1.1.1.1.1数据结构说明//工厂中保存的下一个事实句柄所对应的IDlongid;//事实句柄池,指向堆栈的指针,存放了所有毁坏了的事实句柄ID,主要是为了重用该ID值std::stack*factHandlePool;第423页共423页 1.1.1.1.1接口定义主要被AbstractWorkingMemory的insert()方法调用,来插入的对象1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点封装对象:查看插入的对象能否以封装后的事实句柄的形式返回毁坏事实句柄:查看是否能将事实句柄毁坏,主要包括事实句柄的ID回收,和对应的内存回收1.1.1.2ReteooFactHandleFactory1.1.1.2.1程序特征描述TReteooFactHandleFactory负责将插入的对象封装成规则引擎内部能够识别的事实句柄TDefaultFactHandle的形式1.1.1.2.2程序功能性能描述封装对象,生成实例1.1.1.2.3输入/输出项封装对象:第423页共423页 TDefaultFactHandle*newFactHandle(longid,TObject*object,longrecency);功能:将插入的对象否装成事实句柄的形式入口参数:longid//事实的idTObject*object//指向插入对象的指针Long*recency//已被创建的事实的个数返回结果:TDefaultFactHandle*封装后的事实句柄主要流程:1调用TDefaultFactHandle的构造函数封装该对象成事实句柄,并返回生成新的实例:TAbstractFactHandleFactory*newInstance();功能:生成一个TReteooFactHandleFactory的实例入口参数:无返回结果:返回一个指向TAbstractFactHandleFactory的指针主要流程:1.生成一个实例,并返回1.1.1.1.1数据结构说明//工厂中保存的下一个事实句柄所对应的IDlongid;1.1.1.1.2接口定义主要被AbstractWorkingMemory的insert()方法调用,来插入的对象第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点封装对象:查看插入的对象能否以封装后的事实句柄的形式返回生成实例:主要看能否成功返回一个新生成的实例1.1.1.2DefaultFactHandle1.1.1.2.1程序特征描述DefaultFactHandle主要负责把对象封装成事实句柄的最基本操作(最小粒度),以及对事实句柄内部一些属性的管理1.1.1.2.2程序功能性能描述自身构造,以及事实句柄内部一些属性的管理1.1.1.2.3输入/输出项自身构造:TDefaultFactHandle(longid,TObject*object,longrecency);功能:将插入的对象否装成事实句柄的形式入口参数:第423页共423页 longid//事实的idTObject*object//指向插入对象的指针Long*recency//已被创建的事实的个数返回结果:无主要流程:1.根据入口参数,对事实句柄内部的属性进行赋值获取对象:TObject*getObject();功能:获取事实句柄内部封装的对象入口参数:无返回结果:返回一个指向对象的指针主要流程:1.返回事实句柄内部封装的对象1.1.1.1.1数据结构说明//工厂中保存的下一个事实句柄所对应的IDlongid;//已被创建的事实的个数longrecency;//加入到规则引擎内部的对象TObject*object;//真值维护TEqualityKey*key;//对象的哈希编码longobjectHashCode;//影子事实BoolshadowFact第423页共423页 1.1.1.1.1接口定义主要被AbstractWorkingMemory的insert()方法调用,来插入的对象1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点封装对象:查看插入的对象能否以封装后的事实句柄的形式返回能否成功地对事实句柄内部的属性进行管理1.1.2Alpha网络事实处理模块第423页共423页 图3.6Alpha网络事实处理模块类图1.1.1.1TRete1.1.1.1.1程序特征描述TRete表示的是Rete网络的一个类,是Rete网络的根结点,也就是Rete网络的入口。负责对Rete节点的管理操作。1.1.1.1.2程序功能性能描述包括的主要功能有建网,管理事实。1.1.1.1.3输入/输出项voidassertObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:往Rete节点中插入事实。入口参数:TInternalFactHandle*handle//插入的事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联的工作区返回结果:无主要流程:1.获取当前Rete节点在工作区的存储空间2.判断插入的事实类型是否已存在Rete节点的存储空间中3.没有则添加该事实类型信息4.获取和该类型匹配的对象类型节点5.将事实插入到这些对象类型节点中第423页共423页 voidretractObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:从Rete节点中删除事实。入口参数:TInternalFactHandle*handle//插入的事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联的工作区返回结果:无主要流程:1.获取当前Rete节点在工作区的存储空间2.获取和该事实类型匹配的对象类型节点第423页共423页 1.将事实从这些对象类型节点中删除1.1.1.1.1数据结构说明//保存Rete节点关联的对象类型节点TStringObjectMap*objectTypeNodes;1.1.1.1.2接口定义建网的TBuildUtils等调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点管理事实:能否正确插入事实,删除事实第423页共423页 1.1.1.1TObjectTypeNode1.1.1.1.1程序特征描述TObjectTypeNode表示的是Rete网络的一个类,主要是负责对对象类型节点的管理操作。1.1.1.1.2程序功能性能描述包括的主要功能有建网,管理事实。1.1.1.1.3输入/输出项建网:主要有以下四个接口voidattach();功能:将对象类型节点加入到rete网络中。入口参数:无返回结果:无主要流程:1.this->rete->addObjectSink(this);管理事实:主要分两方面插入和删除voidassertObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:往对象类型节点中插入事实。入口参数:第423页共423页 TInternalFactHandle*handle//插入的事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联的工作区返回结果:无主要流程:1.如果objectMemoryEnabled有效,获取当前对象类型节点在工作区的存储空间,并将该事实添加到对象类型节点的存储空间中2.调用传递适配器进行传递插入voidretractObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:从对象类型节点中删除事实。入口参数:TInternalFactHandle*handle//待删除的事实句柄第423页共423页 TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联的工作区返回结果:无主要流程:1.从该对象类型节点的存储空间中删除该事实2.调用传递适配器进行传递删除1.1.1.1.1数据结构说明//保存该对象类型节点的类型信息TObjectType*objectType;//该对象类型节点指向的上一层节点,即Rete根节点TRete*rete;1.1.1.1.2接口定义传递适配器,建网的TBuildUtils等调用1.1.1.1.3算法见输入输出第423页共423页 1.1.1.1.1程序逻辑流程图见输入输出中的流程介绍1.1.1.1.2测试要点建网部分:对象类型节点能否正确加入到rete网络中管理事实部分:能否正确插入事实,删除事实1.1.1.2TAlphaNode1.1.1.2.1程序特征描述TAlphaNode表示的是Rete网络的一个类,主要是负责对Alpha节点的管理操作。1.1.1.2.2程序功能性能描述包括的主要功能有建网,管理事实。1.1.1.2.3输入/输出项建网:主要有以下四个接口voidattach();功能:将alpha节点加入到rete网络中。入口参数:无返回结果:无第423页共423页 主要流程:1.this->objectSource->addObjectSink(this);管理事实:主要分两方面插入和删除voidassertObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:往alpha节点中插入事实。入口参数:TInternalFactHandle*handle//插入的事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联的工作区返回结果:无主要流程:1.获取当前alpha节点在工作区的存储空间2.判断插入的事实是否满足该alpha节点的约束3.满足的话调用传递适配器进行传递插入第423页共423页 voidretractObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:从alpha节点中删除事实。入口参数:TInternalFactHandle*handle//待删除的事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联的工作区返回结果:无主要流程:1.判断插入事实是否满足该节点的约束条件2.满足的话调用传递适配器进行传递删除1.1.1.1.1数据结构说明//保存alpha节点上的约束条件TAlphaNodeFieldConstraint*constraint;//指向上一个节点TObjectSinkNode*previousObjectSinkNode;//指向下一个节点TObjectSinkNode*nextObjectSinkNode;第423页共423页 1.1.1.1.1接口定义传递适配器,建网的TBuildUtils等调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点建网部分:alpha节点能否正确加入到rete网络中管理事实部分:能否正确插入事实,删除事实1.1.1.2TLeftInputAdapterNode1.1.1.2.1程序特征描述TLeftInputAdapterNode表示的是Rete网络的一个类,主要是负责对左输入适配节点的管理操作。1.1.1.2.2程序功能性能描述包括的主要功能有建网,管理事实。第423页共423页 1.1.1.1.1输入/输出项建网:voidattach();功能:将左输入适配节点加入到rete网络中。入口参数:无返回结果:无主要流程:1.this->objectSource->addObjectSink(this);管理事实:主要分两方面插入和删除voidassertObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:往左输入适配节点中插入事实。入口参数:TInternalFactHandle*handle//插入的事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联的工作区返回结果:无主要流程:1.调用tuple的传递适配器进行传递插入,进入beta网络2.如果objectMemoryEnabled有效,将事实信息添加到左输入适配节点的存储空间中第423页共423页 voidretractObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:从左输入适配节点中删除事实。入口参数:TInternalFactHandle*handle//待删除的事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联的工作区返回结果:无主要流程:1.如果objectMemoryEnabled有效,将事实信息从左输入适配节点的存储空间中删除2.调用tuple传递适配器进行传递删除第423页共423页 1.1.1.1.1数据结构说明//指向上一个节点TObjectSinkNode*previousObjectSinkNode;//指向下一个节点TObjectSinkNode*nextObjectSinkNode;1.1.1.1.2接口定义传递适配器,建网的TBuildUtils等调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍第423页共423页 1.1.1.1.1测试要点建网部分:左输入适配节点能否正确加入到rete网络中管理事实部分:能否正确插入事实,删除事实1.1.1.2TObjectSinkNodeList1.1.1.2.1程序特征描述TObjectSinkNodeList主要是负责对节点链表的管理操作。1.1.1.2.2程序功能性能描述包括的主要功能有增加节点,删除节点。1.1.1.2.3输入/输出项voidadd(TObjectSinkNode*node)功能:往链表中添加一个节点。入口参数:TObjectSinkNode*node//待添加的节点返回结果:无主要流程:1.如果添加的是链表的第一个节点,则把链表的头尾指针都指向这个节点,并把头尾指针的下一个节点都设置为空2.否则,把链表尾指针的下一个节点指针指向这个节点3.然后再将链表尾指针指向该节点第423页共423页 voidremove(TObjectSinkNode*node)功能:从链表中删除一个节点。入口参数:TObjectSinkNode*node//待删除的节点返回结果:无主要流程:1.如果节点是链表的首节点,调用删首节点函数2.如果节点是链表的尾节点,调用删尾节点函数3.否则,将该节点的前一个节点的下一个节点指针指向该节点的下一个节点4.将该节点的下一个节点的前一个节点指针指向该节点的前一个节点5.将该节点的前后一个节点指针设置为空第423页共423页 1.1.1.1.1数据结构说明//链表首节点TObjectSinkNode*firstNode;//链表尾节点TObjectSinkNode*lastNode;//链表长度intcapacity;1.1.1.1.2接口定义传递适配器第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点正确添加和删除链表中节点1.1.1.2TClassObjectTypeConf1.1.1.2.1程序特征描述TClassObjectTypeConf对象类型的描述的配置。1.1.1.2.2程序功能性能描述包括的主要功能有对对象类型的信息进行配置,如是否需要作shadow等。1.1.1.2.3输入/输出项TClassObjectTypeConf(TObject*object,TInternalRuleBase*ruleBase);功能:构造函数。入口参数:TObject*object//插入的对象TInternalRuleBase*ruleBase//规则库返回结果:第423页共423页 对象类型的描述的配置的实例主要流程:1.判断该对象类型是否与某个对象类型节点匹配2.如果不存在,调用TPatternBuilder的attachObjectTypeNode方法添加一个对象类型节点3.判断该对象是否需要作shadowvector*getMatchingObjectTypes();功能:获取和当前插入的事实类型匹配的对象类型节点。入口参数:无返回结果:匹配的对象类型节点数组主要流程:1.获取Rete根节点下的所有对象类型节点2.对每个对象类型节点,如果能它对应的类型推导出当前插入的事实类型,将该对象类型节点加入到数组中3.返回该数组第423页共423页 voiddefineShadowProxyData(stringclazz);功能:确定是否需要对插入的事实做shadow。入口参数:stringclazz//插入事实的类型描述返回结果:无主要流程:1.如果规则库配置禁止做shadow或是clazz为空,设置shadowEnabled为非2.否则如果clazz为内部类,如TInitialFact或是TInitialFactImpl,设置shadowEnabled为非3.否则设置shadowEnabled为真第423页共423页 1.1.1.1.1数据结构说明//对象类型TObjectType*objectType;//当前插入事实的直接对象类型节点TObjectTypeNode*concreteObjectTypeNode;//和插入的事实类型匹配的对象类型节点集合vector*objectTypeNodes;//规则库TInternalRuleBase*ruleBase;1.1.1.1.2接口定义TRete::assertObject(…)第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点能否对插入的事实做正确的配置1.1.1.2TObjectSource1.1.1.2.1程序特征描述TObjectSource对象资源信息处理。1.1.1.2.2程序功能性能描述用于建网过程的增加和删除对象资源信息。1.1.1.2.3输入/输出项voidaddObjectSink(TObjectSink*objectSink);功能:增加对象资源。入口参数:TObjectSink*objectSink//对象资源返回结果:无第423页共423页 主要流程:1.如果当前的sink适配器是TEmptyObjectSinkAdapter,那么把sink替换为TSingleObjectSinkAdapter,并把objectSink加入到sink中2.如果当前的sink适配器是TSingleObjectSinkAdapter,那么把sink替换为TCompositeObjectSinkAdapter,并把TSingleObjectSinkAdapter中包含的那个对象资源和新加入的objectSink加入到sink中3.否则把objectSink加入到sink中voidremoveObjectSink(TObjectSink*objectSink);功能:删除对象资源。入口参数:TObjectSink*objectSink//对象资源返回结果:无主要流程:1.如果当前的sink适配器是TEmptyObjectSinkAdapter,即没有资源可以删除抛出异常2.如果当前的sink适配器是TSingleObjectSinkAdapter,那么把sink替换为TEmptyObjectSinkAdapter3.否则把objectSink从sink中删除,如果删除后的sink中资源数为1,把sink替换为TSingleObjectSinkAdapter第423页共423页 1.1.1.1.1数据结构说明//sink适配器TObjectSinkPropagator*sink;1.1.1.1.2接口定义TAlphaNode的attach(),remove()1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否正确添加删除对象资源第423页共423页 1.1.1.1TEmptyObjectSinkAdapter1.1.1.1.1程序特征描述TEmptyObjectSinkAdapter空适配器。1.1.1.1.2程序功能性能描述包括的主要功能:建网过程的适配器,插入删除事实过程的适配器(查找下一个节点)1.1.1.1.3输入/输出项voidpropagateAssertObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:传递插入事实。入口参数:TInternalFactHandle*handle//待插入事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:无voidpropagateRetractObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:第423页共423页 传递删除事实。入口参数:TInternalFactHandle*handle//待删除事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:无1.1.1.1.1数据结构说明无1.1.1.1.2接口定义TAphaNode,TobjectTypeNode,TRightInputAdapterNode1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否整确找到下一个节点进行操作第423页共423页 1.1.1.1TSingleObjectSinkAdapter1.1.1.1.1程序特征描述TSingleObjectSinkAdapter单适配器。1.1.1.1.2程序功能性能描述包括的主要功能:建网过程的适配器,插入删除事实过程的适配器(查找下一个节点)1.1.1.1.3输入/输出项voidpropagateAssertObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:传递插入事实。入口参数:TInternalFactHandle*handle//待插入事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:this->sink->assertObject(handle,context,workingMemory);voidpropagateRetractObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:传递删除事实。第423页共423页 入口参数:TInternalFactHandle*handle//待删除事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:this->sink->retractObject(handle,context,workingMemory);1.1.1.1.1数据结构说明无1.1.1.1.2接口定义TAphaNode,TobjectTypeNode,TRightInputAdapterNode1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否整确找到下一个节点进行操作第423页共423页 1.1.1.1TCompositeObjectSinkAdapter1.1.1.1.1程序特征描述TCompositeObjectSinkAdapter复杂适配器。1.1.1.1.2程序功能性能描述包括的主要功能:建网过程的适配器,插入删除事实过程的适配器(查找下一个节点)1.1.1.1.3输入/输出项voidpropagateAssertObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:传递插入事实。入口参数:TInternalFactHandle*handle//待插入事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:1.对适配器中包含的所有资源调用assertObjectvoidpropagateRetractObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:传递删除事实。第423页共423页 入口参数:TInternalFactHandle*handle//待删除事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:1.对适配器中包含的所有资源调用retractObjectvoidaddObjectSink(TObjectSink*sink);功能:添加资源。入口参数:TObjectSink*sink//待添加资源返回结果:无主要流程:1.如果该资源是alpha节点,并且它包含的约束是作相等比较的字面约束,将这个资源加入到alphaSinks中2.否则加入到otherSinks中第423页共423页 voidremoveObjectSink(TObjectSink*sink);功能:删除资源。入口参数:TObjectSink*sink//待删除资源返回结果:无主要流程:1.如果该资源是alpha节点,并且它包含的约束是作相等比较的字面约束,将这个资源从alphaSinks中删除2.否则从otherSinks中删除该资源第423页共423页 1.1.1.1.1数据结构说明//包含alpha节点资源TObjectSinkNodeList*alphaSinks;//其他节点资源TObjectSinkNodeList*otherSinks;1.1.1.1.2接口定义TAphaNode,TobjectTypeNode,TRightInputAdapterNode1.1.1.1.3算法见输入输出第423页共423页 1.1.1.1.1程序逻辑流程图见输入输出中的流程介绍1.1.1.1.2测试要点能否整确找到下一个节点进行操作1.1.1.2TReteTuple1.1.1.2.1程序特征描述TReteTuple网络元组。1.1.1.2.2程序功能性能描述包括的主要功能有获取某个事实句柄,获取子元组1.1.1.2.3输入/输出项TInternalFactHandle*get(intindex);功能:取出元组中所引为index的项中的事实句柄。入口参数:intindex//索引号返回结果:事实句柄主要流程:1.从当前的元组开始,如果其索引号不等于index,找该元组的父元组2.直到找到为止第423页共423页 1.返回该元组中的事实句柄handleTReteTuple*getSubTuple(intelements);功能:取子元组。入口参数:intelements//第几个元组返回结果:元组主要流程:1.返回索引号为elements-1的元组1.1.1.1.1数据结构说明//索引号intindex;//元组中的事实句柄第423页共423页 TInternalFactHandle*handle;//指向的父元组TReteTuple*parent;1.1.1.1.1接口定义ContextEntry1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点建网部分:alpha节点能否正确加入到rete网络中管理事实部分:能否正确插入事实,删除事实1.1.1.2TAlphaMemory1.1.1.2.1程序特征描述TAlphaMemoryMemory提供了存储Alpha网络工作内存的数据结构,用于存储事实和元组1.1.1.2.2程序功能性能描述自身构造第423页共423页 1.1.1.1.1输入/输出项自身构造:TAlphaMemory()功能:提供自身的构造入口参数:无返回结果:无主要流程:facts=NULL;}1.1.1.1.2数据结构说明无1.1.1.1.3接口定义无1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图见输入输出中的流程介绍1.1.1.1.6测试要点自身构造:查看存储空间能否分配成功。第423页共423页 1.1.1.1TFactTable1.1.1.1.1程序特征描述TFactTable提供了事实句柄,对事实进行管理1.1.1.1.2程序功能性能描述自身构造1.1.1.1.3输入/输出项自身构造:TfactTable()功能:提供自身的构造入口参数:无返回结果:无主要流程:facts=newlist();1.1.1.1.4数据结构说明无1.1.1.1.5接口定义无1.1.1.1.6算法见输入输出第423页共423页 1.1.1.1.1程序逻辑流程图见输入输出中的流程介绍1.1.1.1.2测试要点自身构造:查看能给每个事实分配事实句柄。1.1.1.2TFieldIndex1.1.1.2.1程序特征描述TFieldIndex主要提供了对外部插入的事实类的成员变量进行hash操作管理,从而对成员变量建立索引。1.1.1.2.2程序功能性能描述主要提供了一些对该类成员变量的get,set之类的操作。1.1.1.2.3输入/输出项无1.1.1.2.4数据结构说明intindex;//索引值TClassFieldExtractor*fieldExtractor;//提取成员变量的类intcount;//标记该类中已经做过hash的成员变量的个数boolhashed;//标记该类中的成员变量是否已经被hash第423页共423页 1.1.1.1.1接口定义主要被CompositeObjectSinkAdapter类调用1.1.1.1.2算法无1.1.1.1.3程序逻辑流程图无1.1.1.1.4测试要点无。1.1.1.2THashTableNode1.1.1.2.1程序特征描述THashTableNode提供了一种存储节点值和对应的hash值的数据结构。1.1.1.2.2程序功能性能描述自身构造。1.1.1.2.3输入/输出项自设构造:HashTableNode(TTHashKey*key,TAlphaNode*value)功能:提供自身的构造入口参数:第423页共423页 TTHashKey*key;//指向HashKey的指针TAlphaNode*value;//节点的值返回结果:无主要流程:给key和value两个变量初始化;1.1.1.1.1数据结构说明TTHashKey*key;//节点对应的hash值TAlphaNode*value;//节点的值HashTableNode*next//指向下一个hashtablenode的指针1.1.1.1.2接口定义主要被IntHashMap调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点自身构造:能否成功初始化。第423页共423页 1.1.1.1TIntHashMap1.1.1.1.1程序特征描述TIntHashMap主要提供了存储HashTableNode的一个容器。1.1.1.1.2程序功能性能描述生成Hashcode值,添加HashTableNode到容器中,根据key值获取节点的值。1.1.1.1.3输入/输出项Hashcode值的生成:unsignedlonghashcodeof(constTTHashKey&key)功能:根据HashKey生成相应的Hashcode值入口参数:TTHashKey*key;//指向HashKey的指针返回结果:unsignedlong//一个无符号的long型的整数主要流程:1.根据key的intFieldType变量的值,来判断对应的key属于八大类型中哪一种,然后再调用相应类型的hashcode值生成方法来生成相应的hashcode值;2.如果intFieldType不在八大类型中,则提示错误消息。插入一个HashTableNode:voidinsert(TTHashKey*key,TAlphaNode*value)功能:添加一个HashTableNode到容器中入口参数:TTHashKey*key;//指向HashKey的指针TAlphaNode*value//待插入的节点的值第423页共423页 返回结果:无主要流程:1.根据key值得到hashcode值;2.根据hashcode值,得到key值在bucket容器中的位置loc3.从bucket容器中取出loc位置的HashTableNode4.如果HashTableNode值不为空,把bucket容器中HashTableNode的key值的index和hashcode值和待出入的key值的index和hashcode值相比较,否则,需要把该节点添加到bucket容器中。如果相等,则说明该类节点已经在Hash容器中,不用再插入。5.如果HashTableNode的key值的index和hashcode值和待出入的key值的index和hashcode值相等,则说明该类节点已经在Hash容器中,不用再插入,否则,继续查找下一个HashTableNode。第423页共423页 获取key值对应的节点值:TAlphaNode*getvalue(TTHashKey*key)功能:根据key值获取对应的节点值入口参数:TTHashKey*key;//指向HashKey的指针返回结果:TAlphaNode* key值对应的节点第423页共423页 主要流程:1.根据key值得到hashcode值;2.根据hashcode值,得到key值在bucket容器中的位置loc3.从bucket容器中取出loc位置的HashTableNode4.如果HashTableNode值不为空,则判断HashTableNode的key和入口参数的key是否相等,否则程序结束;5.如果两个key相等,根据入口参数的intFieldType返回对应的节点值,否则继续查找下一个HashTableNode;1.1.1.1.1数据结构说明vectorbuckets;//存储HashTableNode的容器intsize;//容器当前的大小第423页共423页 intcapacity;//容器的最大容量listsinks;//存储节点的容器1.1.1.1.1接口定义主要被CompositeObjectSinkAdapter类调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点生成Hashcode值:能否成功生成对应的hashcode值添加HashTableNode到容器中:能否成功把一个新的HashTableNode添加到容器中获取节点的值:能否成功根据key值获取对应的节点值1.1.1.2THashKey1.1.1.2.1程序特征描述THashKey类提供了Hash操作所支持的八大属性,以及对应的Hashcode值。1.1.1.2.2程序功能性能描述自身构造。第423页共423页 1.1.1.1.1输入/输出项在自身构造函数中,针对八大数据类型采用不同的构造函数来初始化该类中的成员变量。1.1.1.1.2数据结构说明unsignedlonghashcode;//经过hash处理后的hash值intindex;//成员变量的索引值intintFieldType;//对应的数据类型编号intivalue;//int类型的数据stringsvalue;//string类型的数据longlvalue;//long类型的数据shortshtvalue;//short类型的数据doubledvalue;//double类型的数据floatfvalue;//float类型的数据charcvalue;//char类型的数据boolbvalue;//bool类型的数据1.1.1.1.3接口定义主要被IntHashMap类调用1.1.1.1.4算法无1.1.1.1.5程序逻辑流程图无1.1.1.1.6测试要点无第423页共423页 1.1.1.1TLIANodePropagation1.1.1.1.1程序特征描述TLIANodePropagation类提供了在顺序模式下数据和规则的匹配方式,即handle和TerminedNode中规则的匹配,让后把handle事实添加到agenda议程中。1.1.1.1.2程序功能性能描述自身构造,数据和规则的匹配。1.1.1.1.3输入/输出项自身构造:TLIANodePropagation(TLeftInputAdapterNode*node,TInternalFactHandle*handle,TPropagationContext*context)功能:初始化该类的成员变量入口参数:TLeftInputAdapterNode*node;//左输入适配器节点TInternalFactHandle*handle//事实句柄TPropagationContext*context//上下文信息返回结果:无主要流程:1.根据参数初始化各变量的值事实与规则的匹配:voiddoPropagation(TInternalWorkingMemory*workingMemory)功能:查找与事实匹配的规则第423页共423页 入口参数:TInternalWorkingMemory*workingMemory;//工作区的内存返回结果:无主要流程:1.this->node->getSinkPropagator()->createAndPropagateAssertTuple(handle,context,workingMemory)1.1.1.1.1数据结构说明TLeftInputAdapterNode*node;//左输入适配器节点TInternalFactHandle*handle;//事实句柄TPropagationContext*context;//上下文信息1.1.1.1.2接口定义主要被LeftInputAdapterNode和AbstractWorkingMemory类调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点自身构造:能否成功初始化各变量匹配:能否成功把一个事实与对应的规则匹配成功第423页共423页 1.1.1.1TObjectSinkAdapter1.1.1.1.1程序特征描述TObjectSinkAdapter适配器。1.1.1.1.2程序功能性能描述包括的主要功能:自身构造,建网过程的适配器,插入事实过程的适配器1.1.1.1.3输入/输出项自身构造:TobjectSinkAdapter(TTupleSink*sink)功能:自身构造入口参数:TtupleSink*sink返回结果:无主要流程:this->sink=sink;插入事实:voidTObjectSinkAdapter::assertObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory)功能:添加资源。入口参数:TInternalFactHandle*handle//待插入的事实句柄TPropagationContext*context//上下文信息第423页共423页 TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:this->sink->assertTuple(tuple,context,workingMemory));1.1.1.1.1数据结构说明无1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否成功插入事实1.1.1.2TObjectSinkUpdateAdapter1.1.1.2.1程序特征描述TobjectSinkAdapter升级适配器。第423页共423页 1.1.1.1.1程序功能性能描述包括的主要功能:自身构造,插入事实1.1.1.1.2输入/输出项自身构造:TObjectSinkUpdateAdapter(TObjectSink*sink,TAlphaNodeFieldConstraint*constraint,TContextEntry*context)功能:自身构造入口参数:TObjectSink*sinkTAlphaNodeFieldConstraint*constraint//Alpha网络节点的包含的约束TContextEntry*context//上下文信息返回结果:无主要流程:对类中的成员变量进行赋值操作。插入事实:voidassertObject(TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory)功能:添加资源。入口参数:TInternalFactHandle*handle//待插入事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无第423页共423页 主要流程:this->sink->assertObject(handle,context,workingMemory);1.1.1.1.1数据结构说明无1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点查看属性能否被参数初始化以及能否成功插入事实1.1.1.2TPropagationContextImpl1.1.1.2.1程序特征描述TpropagationContextImpl是对PropagationContext类的一个实现,是一个负责对上下文信息进行管理和操作的类。第423页共423页 1.1.1.1.1程序功能性能描述包括的主要功能:在Retracted容器中,根据Activations来插入,删除Tuples。1.1.1.1.2输入/输出项在Retracted容器中插入一个tuple:voidaddRetractedTuple(TRule*rule,TActivation*activation)功能:添加一个Retracted元组,而使一个activation进入active状态入口参数:TRule*rule//规则TActivation*activation//处于活动状态的事实返回结果:无主要流程:1.先判断Retracted容器里面是否为null2.如果没有Retracted为null,则给其赋值3.判断参数activation是否包含在Retracted容器的tuples中。4.如果没有包含的话,就新建一个tuples。5.最后把tuples和rule装载到Retracted容器中去。第423页共423页 从Retracted容器中删除一个tuple:TActivation*removeRetractedTuple(TRule*rule,TReteTuple*tuple)功能:删除一个元组,从而使一个activation处于dormant状态。入口参数:TRule*rule//规则TReteTuple*tuple//元组返回结果:Tactivation对象主要流程:1.先判断Retracted容器是否为null第423页共423页 1.如果为null,则返回一个null对象2.否则,根据参数中的rule和tuple来判断Retracted容器中是否包含3.如果包含,返回所对应的activation1.1.1.1.1数据结构说明TRule*rule//规则TReteTuple*tuple//网络元组TActivation*activation//活动状态的事实1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出第423页共423页 1.1.1.1.1程序逻辑流程图见输入输出中的流程介绍1.1.1.1.2测试要点查看是否能在上下文中插入和删除Retracted容器中的元以及activataion能否在active和dormant状态中切换1.1.1.2TStringObjectMap1.1.1.2.1程序特征描述TstringObjectMap是对Tobject的继承,它主要提供了一个容器来存储object的string值1.1.1.2.2程序功能性能描述自身构造1.1.1.2.3输入/输出项自身构造:TstringObjectMap()功能:提供自身的构造入口参数:无返回结果:无主要流程:this->stringObjectMap=newmap();第423页共423页 1.1.1.1.1数据结构说明无1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点自身构造:查看能否分配一个容器来存储object的string值1.1.2Beta网络事实处理模块Beta网络事实处理模块主要对流入到Beta网络中的事实或者元组进行处理,其中包括自身节点内存的创建,以及向节点内存中加入流入的事实和元组;检查事实和原则是否满足一致性约束,若满足则向网络下端传递新元组等。主要的类图如图3.6所示,具体内容将在下面各小节中分别介绍。第423页共423页 图3.7Beta网络事实处理模块类图1.1.1.1BetaNode1.1.1.1.1程序特征描述TBetaNode是一个抽象类,为Beta网络节点的父类,实现beta网络节点一般性的操作,如创建节点内存等,同时负责将Beta网络中节点加入到父亲节点的孩子节点中去。1.1.1.1.2程序功能性能描述自身构造,获得约束(得到该节点所代表的约束如变量的一致性约束,评估值的约束等),节点加入网络,创建节点内存第423页共423页 1.1.1.1.1输入/输出项自身构造:TBetaNode(intid,TTupleSource*leftInput,TObjectSource*rightInput,TBetaConstraints*constraints);功能:提供自身的构造,根据传入的参数初始化类中的各个属性入口参数:intid//节点的唯一标识IDTTupleSource*leftInput//左边输入节点的指针(左边的父亲节点为Beta网络节点)TObjectSource*rightInput//右边输入节点的指针(右边的父亲节点为Alpha网络节点)TBetaConstraints*constraints//该Beta节点所代表的约束的指针返回结果:无主要流程:1.根据传入的参数初始化类中的各个属性获得约束:list*getConstraints();功能:获得该Beta节点所代表的Beta节点域约束入口参数:无返回结果:list*指向容器的指针,该容器中存放节点内存所代表约束的指针主要流程:1.根据constraints属性获得该BetaConstraints所代表的所有的Beta节点域约束(如:SingleBetaConstraints第423页共423页 中包含一个Beta节点域约束,DoubleBetaConstraints中包含两个Beta节点域约束,但目前只是支持一个约束,两个的或者多个的将在后续迭代中加入)节点加入网络:voidattach();功能:将Beta网络中的本节点加入到父亲节点的孩子节点中去入口参数:无返回结果:无主要流程:1.将本节点加入左边的父亲节点(为Beta网络节点)的孩子节点中2.将本节点加入右边的父亲节点(为Alpha网络节点)的孩子节点中创建节点内存:TObject*createMemory();功能:创建该Beta节点的节点内存,即构造一个BetaMemory的实例入口参数:无返回结果:TObject*Beta节点内存的指针主要流程:1.调用constraints属性(SingleBetaConstraints类的实例)的createBetaMemory方法(在该方法中首先初始化两个容器,右边容器中保存着所有从右边流入的事实,左边的容器中保存着所有从左边流入的原则,然后根据BetaMemory的构造函数获得BetaMemory的实例)创建节点内存。第423页共423页 1.1.1.1.1数据结构说明//左边输入节点的指针,TTupleSource为比BetaNode更高层次的抽象类TTupleSource*leftInput;//右边输入节点的指针,TObjectSource为Alpha网络节点中高层次的抽象类TObjectSource*rightInput;//TBetaConstraints将该节点中的所有约束否则在一个类中,能够调用统一的函数进行处理TBetaConstraints*constraints;1.1.1.1.2接口定义为Beta节点的父类,调用TBetaConstraints中相应的操作来完成一致性的检查1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点自身构造:各个子类节点如JoinNode在构造函数中能否成功调用BetaNode的构造函数,完成节点的构造获得约束:查看调用该方法,是否能够获得相应的包含约束的指针的容器节点加入网络:查看该节点的父亲节点中是否包含此节点创建节点内存:能否成功调用TBetaConstraints的创建节点内存方法,获得节点内存。第423页共423页 1.1.1.1BetaMemory1.1.1.1.1程序特征描述TBetaMemory提供了存储Beta网络工作内存的数据结构,用于存储事实和元组1.1.1.1.2程序功能性能描述自身构造1.1.1.1.3输入/输出项自身构造:TBetaMemory(std::list*,std::list*,std::list*);功能:提供自身的构造,根据输入参数初始化类中的各个属性值入口参数:std::list*//指向元组指针的容器,用于保存流入该节点的原则std::list*//指向事实句柄指针的容器,用于保存流入该节点的事实句柄std::list*//指向上下文入口的容器,TContextEntry提供计算一致性约束辅助的功能返回结果:无主要流程:1.依次根据参数对类中的各个属性进行初始化1.1.1.1.4数据结构说明//BetaMemory分为左右两个部分,左部分存放传入的元组为元组内存std::list*tupleMemory;//右边部分存放传入的事实为事实内存第423页共423页 std::list*factHandleMemory;//上下文提供对一致性检查的辅助功能std::list*context;1.1.1.1.1接口定义TBetaNode节点调用,用于创建节点内存1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点自身构造:查看属性能否被参数成功初始化1.1.1.2JoinNode1.1.1.2.1程序特征描述TJoinNode为Beta网络中的一个重要的节点,它是一个双输入的节点,左边输入为元组的输入,右边输入为事实的输入。在插入事实和元组的时候分别对其进行一致性的检查,查看是否有其匹配的事实和元组。1.1.1.2.2程序功能性能描述插入元组,删除元组,插入事实,删除事实第423页共423页 1.1.1.1.1输入/输出项插入元组:voidassertTuple(TReteTuple*leftTuple,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:向节点内存的右边元组内存中添加元组,迭代访问左边的事实内存中的事实,检查是否有满足一致性约束的事实,如元组和事实匹配则组合成新的元组向网络的下端传递入口参数:TReteTuple*leftTuple//指向待拆入元组元组的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*workingMemory//指向工作内存的指针返回结果:无主要流程:1.得到该节点的节点内存,向节点内存的元组内存中加入该元组2.根据插入元组更新该节点所代表的约束,主要更新右边的值3.迭代访问节点内存左边的事实内存中事实,用约束来检查事实是否能够匹配当前的约束4.如果有匹配的事实,则将元组和事实组合成新的元组向孩子节点中插入该元组5.重新设置约束的上下文内容删除元组:voidretractTuple(TReteTuple*tuple,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:在节点内存的右边元组内存中删除该元组,该过程类似插入元组的过程。入口参数:TReteTuple*leftTuple//指向待删除元组的指针第423页共423页 TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*//指向工作内存的指针返回结果:无主要流程:1.得到该节点的节点内存,在节点内存的元组内存中查看是否包含删除的元组,如果不包含则释放该元组,程序返回,否则转22.根据删除元组更新该节点所代表的约束,主要更新右边的值3.迭代访问节点内存左边的事实内存中事实,用约束来检查事实是否能够匹配当前的约束4.如果有匹配的事实,则将元组和事实组合成新的元组向孩子节点中删除该元组5.重新设置约束的上下文内容6.从该节点的元组内存中删除该元组,释放该元组插入事实:voidassertObject(TDefaultFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:向节点内存的左边事实内存中添加事实,迭代访问右边的元组内存中的元组,检查是否有满足一致性约束的元组,如元组和事实匹配则组合成新的元组向网络的下端传递入口参数:TDefaultFactHandle*handle//指向待插入事实句柄的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*//指向工作内存的指针返回结果:无主要流程:1.得到该节点的节点内存,向节点内存的事实内存中加入该事实2.根据插入事实更新该节点所代表的约束,主要更新左边的值第423页共423页 1.迭代访问节点内存右边元组内存中元组,用约束来检查元组是否能够匹配当前的约束2.如果有匹配的元组,则将元组和事实组合成新的元组向孩子节点中拆入该元组3.重新设置约束的上下文内容删除事实:voidretractObject(TDefaultFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:在节点内存的左边事实内存中删除该事实,该过程类似插入事实的过程入口参数:TDefaultFactHandle*handle//指向待删除事实句柄的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*//指向工作内存的指针返回结果:无主要流程:1.得到该节点的节点内存,在节点内存的事实内存中查看是否包含删除的事实,如果不包含则程序返回,否则转22.根据删除事实更新该节点所代表的约束,主要更新左边的值3.迭代访问节点内存右边的元组内存中元组,用约束来检查元组是否能够匹配当前的约束4.如果有匹配的元组,则将元组和事实组合成新的元组向孩子节点中删除该元组5.重新设置约束的上下文内容1.1.1.1.1数据结构说明无第423页共423页 1.1.1.1.1接口定义被父亲节点调用用于插入和删除事实和元组的操作,调用孩子节点的插入和删除事实和元组的操作1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图插入元组流程图:删除元组流程图:第423页共423页 1.1.1.1.1测试要点插入元组:查看能否根据元组来更新约束,并检测到匹配的事实向网络的下端传递删除元组:查看能否根据元组来更新约束,并检测到匹配的事实向网络的下端传递,成功释放内存空间第423页共423页 插入事实:查看能否根据事实来更新约束,并检测到匹配的元组向网络的下端传递删除事实:查看能否根据事实来更新约束,并检测到匹配的元组向网络的下端传递1.1.1.1ExistNode1.1.1.1.1程序特征描述TExistNode为Beta网络中的一个重要的节点,它是一个双输入的节点,左边输入为元组的输入,右边输入为事实的输入。在插入事实和元组的时候分别对其进行一致性的检查,查看是否有其匹配的事实和元组。1.1.1.1.2程序功能性能描述插入元组,删除元组,插入事实,删除事实1.1.1.1.3输入/输出项插入元组:voidassertTuple(TReteTuple*leftTuple,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:向节点内存的右边元组内存中添加元组,迭代访问左边的事实内存中的事实,检查是否有满足一致性约束的事实,如元组和事实匹配则组合成新的元组向网络的下端传递入口参数:TReteTuple*leftTuple//待插入元组的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*workingMemory//指向工作内存的指针返回结果:第423页共423页 无主要流程:1得到该节点的节点内存,向节点内存的元组内存中加入该元组2根据插入元组更新该节点所代表的约束,主要更新右边的值3迭代访问节点内存左边的事实内存中事实,用约束来检查事实是否能够匹配当前的约束4如果有匹配的事实,则将元组和事实组合成新的元组5重新设置约束的上下文内容6如果在第4步中生成的新元组的事实匹配不为null,则向孩子节点中插入该元组删除元组:voidretractTuple(TReteTuple*tuple,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:在节点内存的右边元组内存中删除该元组,该过程类似插入元组的过程。入口参数:TReteTuple*leftTuple//待删除元组的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*//指向工作内存的指针返回结果:无主要流程:1得到该节点的节点内存,在节点内存的元组内存中查看是否包含删除的元组,如果不包含则释放该元组,程序返回,否则转22如果该元组有匹配的事实,则在孩子节点中删除该元组3从该节点的元组内存中删除该元组,释放该元组插入事实:voidassertObject(TDefaultFactHandle*handle,TPropagationContext*context,第423页共423页 TInternalWorkingMemory*workingMemory);功能:向节点内存的左边事实内存中添加事实,迭代访问右边的元组内存中的元组,检查是否有满足一致性约束的元组,如元组和事实匹配则组合成新的元组向网络的下端传递入口参数:TDefaultFactHandle*handle//指向待插入事实句柄的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*//指向工作内存的指针返回结果:无主要流程:1得到该节点的节点内存,向节点内存的事实内存中加入该事实2根据插入事实更新该节点所代表的约束,主要更新左边的值3迭代访问节点内存右边元组内存中元组,用约束来检查元组是否能够匹配当前的约束4如果有匹配的元组,且该元组没有事实与它匹配,则将元组和事实组合成新的元组5.将第4步中生成的新元组,在孩子节点中插入6重新设置约束的上下文内容删除事实:voidretractObject(TDefaultFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:在节点内存的左边事实内存中删除该事实,该过程类似插入事实的过程入口参数:TDefaultFactHandle*handle//指向待删除事实句柄的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*//指向工作内存的指针返回结果:第423页共423页 无主要流程:1得到该节点的节点内存,在节点内存的事实内存中查看是否包含删除的事实,如果不包含则程序返回,否则转22根据删除事实更新该节点所代表的约束,主要更新左边的值3迭代访问节点内存右边的元组内存中元组,用约束来检查元组是否能够匹配当前的约束4如果有匹配的元组,且该元组也有事实与它匹配,则将与该元组匹配的事实置空。5给第4步中的元组重新找一个匹配的事实,如果找到了,将其与该元组匹配,并且重新设置元组内存中约束的上下文内容,否则转到第6步6在孩子节点中删除该元组7重新设置事实内存中约束的上下文内容1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被父亲节点调用用于插入和删除事实和元组的操作,调用孩子节点的插入和删除事实和元组的操作1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图插入元组流程图:第423页共423页 删除元组流程图:第423页共423页 1.1.1.1.1测试要点插入元组:查看能否根据元组来更新约束,并检测到匹配的事实向网络的下端传递删除元组:查看能否根据元组来更新约束,并检测到匹配的事实向网络的下端传递,成功释放内存空间第423页共423页 插入事实:查看能否根据事实来更新约束,并检测到匹配的元组向网络的下端传递删除事实:查看能否根据事实来更新约束,并检测到匹配的元组向网络的下端传递,成功释放内存空间1.1.1.1NotNode1.1.1.1.1程序特征描述TExistNode为Beta网络中的一个重要的节点,它是一个双输入的节点,左边输入为元组的输入,右边输入为事实的输入。在插入事实和元组的时候分别对其进行一致性的检查,查看是否有其匹配的事实和元组。1.1.1.1.2程序功能性能描述插入元组,删除元组,插入事实,删除事实1.1.1.1.3输入/输出项插入元组:voidassertTuple(TReteTuple*leftTuple,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:向节点内存的右边元组内存中添加元组,迭代访问左边的事实内存中的事实,检查是否有满足一致性约束的事实,如元组和事实匹配则组合成新的元组向网络的下端传递入口参数:TReteTuple*leftTuple//待插入元组的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*workingMemory//指向工作内存的指针返回结果:第423页共423页 无主要流程:1得到该节点的节点内存,向节点内存的元组内存中加入该元组2根据插入元组更新该节点所代表的约束,主要更新右边的值3迭代访问节点内存左边的事实内存中事实,用约束来检查事实是否能够匹配当前的约束4如果有匹配的事实,则将元组和事实组合成新的元组5重新设置约束的上下文内容6如果把第4步中生成的新元组的事实匹配为null,则在孩子节点中插入该元组删除元组:voidretractTuple(TReteTuple*tuple,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:在节点内存的右边元组内存中删除该元组,该过程类似插入元组的过程。入口参数:TReteTuple*leftTuple//待删除元组的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*//指向工作内存的指针返回结果:无主要流程:1得到该节点的节点内存,在节点内存的元组内存中查看是否包含删除的元组,如果不包含则释放该元组,程序返回,否则转22如果该元组没有匹配的事实,则在孩子节点中删除该元组3从该节点的元组内存中删除该元组,释放该元组插入事实:voidassertObject(TDefaultFactHandle*handle,TPropagationContext*context,第423页共423页 TInternalWorkingMemory*workingMemory);功能:向节点内存的左边事实内存中添加事实,迭代访问右边的元组内存中的元组,检查是否有满足一致性约束的元组,如元组和事实匹配则组合成新的元组向网络的下端传递入口参数:TDefaultFactHandle*handle//指向待插入事实句柄的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*//指向工作内存的指针返回结果:无主要流程:1得到该节点的节点内存,向节点内存的事实内存中加入该事实2根据插入事实更新该节点所代表的约束,主要更新左边的值3迭代访问节点内存右边元组内存中元组,用约束来检查元组是否能够匹配当前的约束4如果有匹配的元组,且该元组没有事实与它匹配,则将元组和事实组合成新的元组5.将第4步中生成的新元组,在孩子节点中插入6重新设置约束的上下文内容删除事实:voidretractObject(TDefaultFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:在节点内存的左边事实内存中删除该事实,该过程类似插入事实的过程入口参数:TDefaultFactHandle*handle//指向待删除事实句柄的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*//指向工作内存的指针返回结果:第423页共423页 无主要流程:1得到该节点的节点内存,在节点内存的事实内存中查看是否包含删除的事实,如果不包含则程序返回,否则转22根据删除事实更新该节点所代表的约束,主要更新左边的值3迭代访问节点内存右边的元组内存中元组,用约束来检查元组是否能够匹配当前的约束4如果有匹配的元组,且该元组也有事实与它匹配,则将与该元组匹配的事实置空。5给第4步中的元组重新找一个匹配的事实,如果找到了,将其与该元组匹配,并且重新设置元组内存中约束的上下文内容,否则转到第6步6在孩子节点中删除该元组7重新设置事实内存中约束的上下文内容1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被父亲节点调用用于插入和删除事实和元组的操作,调用孩子节点的插入和删除事实和元组的操作1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图插入元组流程图:第423页共423页 删除元组流程图:第423页共423页 1.1.1.1.1测试要点插入元组:查看能否根据元组来更新约束,并检测到匹配的事实向网络的下端传递删除元组:查看能否根据元组来更新约束,并检测到匹配的事实向网络的下端传递,成功释放内存空间第423页共423页 插入事实:查看能否根据事实来更新约束,并检测到匹配的元组向网络的下端传递删除事实:查看能否根据事实来更新约束,并检测到匹配的元组向网络的下端传递,成功释放内存空间1.1.1.1RuleTerminalNode1.1.1.1.1程序特征描述TRuleTerminalNode代表传递入的元组完成了一条规则的完全匹配,将该元组封装成AgendaItem的形式,加入到议程中,等待规则执行阶段的执行1.1.1.1.2程序功能性能描述插入元组,删除元组1.1.1.1.3输入/输出项插入元组:voidassertTuple(TReteTuple*tuple,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:将该元组和终止节点所代表的规则封装成AgendaItem的数据结构加入到议程中,等待规则执行阶段的执行。入口参数:TReteTuple*Tuple//指向待拆入元组元组的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*//指向工作内存的指针返回结果:无第423页共423页 主要流程:1.首先判断该传递上下文的类型,如果其类型为MODIFICATION,则判断该规则属性是否为noloop,如果不允许循环,则上次的规则与这次相同则,释放该元组并返回,否则转22.得到当前工作内存中议程,根据议程得到相应的AgendaGroup,目前只支持一个名字为MAIN的议程组3.得到终止节点的节点内存,向节点内存中添加对该议程组的引用4.将元组、规则和上下文否则成AgendaItem类的实例item5.在该议程组中加入该item,节点内存中加入该元组,增加议程中的激活规则的数目第423页共423页 删除元组:第423页共423页 voidretractTuple(TReteTuple*leftTuple,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:从节点内存中删除元组,以及删除相应的AgendaItem类的对象入口参数:TReteTuple*leftTuple//指向待删除元组的指针TPropagationContext*context//指向传递上下文的指针TInternalWorkingMemory*//指向工作内存的指针返回结果:无主要流程:1.得到终止节点内存,查看终止节点内存中是否包含该元组,如果不包含则释放该元组,程序返回,否则转22.根据节点内存中元组所保存的信息,找出对应的AgendaItem,并将Item从议程组中删除3.释放相应的空间第423页共423页 第423页共423页 1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被父亲节点调用用于插入和删除元组的操作,调用AgendaItem的方法删除议程组中的Item1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入/输出项中的流程介绍1.1.1.1.5测试要点插入元组:能否插入元组,激活规则放入到议程组中删除元组:能否删除元组,从议程组中删除相应的规则,释放空间1.1.1.2TerminalNodeMemory1.1.1.2.1程序特征描述TTerminalNodeMemory为终止节点内存的数据结构,存放插入的元组,保存对相应议程组的引用,以及元组和规则封装成的AgendaItem对象。1.1.1.2.2程序功能性能描述自身构造第423页共423页 1.1.1.1.1输入/输出项自身构造:TTerminalNodeMemory();功能:类中各个属性的初始化入口参数:无返回结果:无主要流程:1.依次对类中的各个属性进行初始化1.1.1.1.2数据结构说明//指向议程组的指针TInternalAgendaGroup*agendaGroup;//指向容器的指针,该容器中包含了所有在该终止节点上激活的规则封装的AgendaItemstd::list*activationGroup;//元组内存,存放插入的元组的指针std::list*tupleMemory;1.1.1.1.3接口定义构造函数为终止节点的createMemory方法调用,用于创建节点内存1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图见输入输出中的流程介绍第423页共423页 1.1.1.1.1测试要点自身构造:查看属性能否成功初始化1.1.1.2TupleSource1.1.1.2.1程序特征描述TTupleSource对象资源信息处理。1.1.1.2.2程序功能性能描述用于建网过程的增加和删除对象资源信息。1.1.1.2.3输入/输出项voidaddTupleSink(TTupleSink*tupleSink);功能:增加对象资源。入口参数:TTupleSink*tupleSink//对象资源返回结果:无主要流程:1.如果当前的sink适配器是TEmptyTupleSinkAdapter,那么把sink替换为TSingleTupleSinkAdapter,并把tupleSink加入到sink中2.如果当前的sink适配器是TSingleTupleSinkAdapter,那么把sink替换为TCompositeTupleSinkAdapter,并把TSingleTupleSinkAdapter中包含的那个对象资源和新加入的tupleSink加入到sink中3.否则把tupleSink加入到sink中第423页共423页 voidremoveTupleSink(TTupleSink*tupleSink);功能:删除对象资源。入口参数:TTupleSink*tupleSink//对象资源返回结果:无主要流程:1.如果当前的sink适配器是TEmptyTupleSinkAdapter,即没有资源可以删除抛出异常2.如果当前的sink适配器是TSingleTupleSinkAdapter,那么把sink替换为TEmptyTupleSinkAdapter3.否则把TupleSink从sink中删除,如果删除后的sink中资源数为1,把sink替换为TSingleTupleSinkAdapter第423页共423页 1.1.1.1.1数据结构说明//sink适配器TTupleSinkPropagator*sink;1.1.1.1.2接口定义TbetaTevalConditionNodeTleftInputAdapterNode调用。1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否正确添加删除对象资源1.1.1.2BaseNode1.1.1.2.1程序特征描述TbaseNode是Beta网络中所有节点类的基类1.1.1.2.2程序功能性能描述自身构造第423页共423页 1.1.1.1.1输入/输出项自身构造:TBaseNode(intid)功能:提供自身的构造入口参数:intid;//Beta网络中节点的标识返回结果:无主要流程:1.给id赋值1.1.1.1.2数据结构说明intid;//Beta网络中节点的标识1.1.1.1.3接口定义Rete网络中的大部分节点都会调用TbaseNode的构造函数进行实例化。1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图见输入输出中的流程介绍1.1.1.1.6测试要点自身构造:查看能给节点分配id标识。第423页共423页 1.1.1.1CompositeTupleSinkAdapter1.1.1.1.1程序特征描述TcompositeTupleSinkAdapter复杂适配器。1.1.1.1.2程序功能性能描述包括的主要功能:建网过程的适配器,插入、删除元组过程的适配器(查找下一个节点)1.1.1.1.3输入/输出项插入元组:voidpropagateAssertTuple(TReteTuple*tuple,TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory)功能:传递插入元组。入口参数:TReteTuple*tuple//待插入的元组TInternalFactHandle*handle//待插入事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:1.对适配器中包含的所有资源调用assertTuple传递插入元组删除元组:voidpropagateRetractTuple(第423页共423页 TReteTuple*tuple,TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory)功能:传递删除元组。入口参数:TReteTuple*tuple//待删除的元组TInternalFactHandle*handle//待删除事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:1.对适配器中包含的所有资源调用retractTuple传递删除元组1.1.1.1.1数据结构说明TTupleSinkNodeList*sinks;//节点链表,管理节点的删除和增加1.1.1.1.2接口定义TtupleSource每次在增加或添加节点的时候需要调用此类来改变节点的适配器类型。1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否成功添加或删除元组第423页共423页 1.1.1.1EmptyTupleSinkAdapter1.1.1.1.1程序特征描述TEmptyTupleSinkAdapter空适配器。1.1.1.1.2程序功能性能描述包括的主要功能:建网过程的适配器,插入、删除元组过程的适配器(查找下一个节点)1.1.1.1.3输入/输出项插入元组:voidpropagateAssertTuple(TReteTuple*tuple,TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory)功能:传递插入元组。入口参数:TReteTuple*tuple//待插入的元组TInternalFactHandle*handle//待插入事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:1.第423页共423页 这里只是一个空实现,在开始建网的时候,Beta网络中的节点中的适配器的类型被赋值为EmptyTupleSinkAdapter类型,最后在TtupleSource中根据插入或删除Tuple来更改适配器的类型删除元组:voidpropagateRetractTuple(TReteTuple*tuple,TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory)功能:传递删除元组。入口参数:TReteTuple*tuple//待删除的元组TInternalFactHandle*handle//待删除事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:1.这里只是一个空实现,在开始建网的时候,Beta网络中的节点中的适配器的类型被赋值为EmptyTupleSinkAdapter类型,最后在TtupleSource中根据插入或删除Tuple来更改适配器的类型。1.1.1.1.1数据结构说明无1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出第423页共423页 1.1.1.1.1程序逻辑流程图见输入输出中的流程介绍1.1.1.1.2测试要点无,此类中的所有方法都只是一个空实现。1.1.1.2SingleTupleSinkAdapter1.1.1.2.1程序特征描述TSingleObjectSinkAdapter单适配器。1.1.1.2.2程序功能性能描述包括的主要功能:建网过程的适配器,插入、删除元组过程的适配器(查找下一个节点)1.1.1.2.3输入/输出项插入元组:voidpropagateAssertTuple(TReteTuple*tuple,TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory)功能:传递插入元组。入口参数:TReteTuple*tuple//待插入的元组第423页共423页 TInternalFactHandle*handle//待插入事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:1.对适配器中包含的所有资源调用assertTuple传递插入元组删除元组:voidpropagateRetractTuple(TReteTuple*tuple,TInternalFactHandle*handle,TPropagationContext*context,TInternalWorkingMemory*workingMemory)功能:传递删除元组。入口参数:TReteTuple*tuple//待删除的元组TInternalFactHandle*handle//待删除事实句柄TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:1.对适配器中包含的所有资源调用retractTuple传递删除元组1.1.1.1.1数据结构说明TTupleSink*sink//指向下一个待插入节点位置的指针1.1.1.1.2接口定义TTupleSource在增加或删除节点的时候会调用此类第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点能否整确找到下一个节点进行操作1.1.1.2EmptyBetaConstraints1.1.1.2.1程序特征描述TEmptyBetaConstraints空值Beta节点约束。1.1.1.2.2程序功能性能描述包括的主要功能:管理Beta节点的约束条件1.1.1.2.3输入/输出项根据元组更新Beta节点的约束条件:voidupdateFromTuple(std::list*context,TInternalWorkingMemory*workingMemory,TReteTuple*tuple)功能:根据元组的值更新Beta节点的约束条件。第423页共423页 入口参数:Std::list*context//上下文信息TReteTuple*tuple//元组TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:无,这里是一个空实现根据事实句柄更新Beta节点的约束条件:voidupdateFromTuple(std::list*context,TInternalWorkingMemory*workingMemory,TInternalFactHandle*handle)功能:根据事实句柄的值更新Beta节点的约束条件。入口参数:Std::list*context//上下文信息TInternalFactHandle*handle//事实句柄TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:无,这里是一个空实现1.1.1.1.1数据结构说明无1.1.1.1.2接口定义无第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点此类是一个空实现。1.1.1.2SingleBetaConstraints1.1.1.2.1程序特征描述TEmptyBetaConstraints单值Beta节点约束。1.1.1.2.2程序功能性能描述包括的主要功能:管理Beta节点的约束条件1.1.1.2.3输入/输出项根据元组更新Beta节点的约束条件:voidupdateFromTuple(std::list*context,TInternalWorkingMemory*workingMemory,TReteTuple*tuple)功能:根据元组的值更新Beta节点的约束条件。第423页共423页 入口参数:Std::list*context//上下文信息TReteTuple*tuple//元组TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:1.context->front()->updateFromTuple(workingMemory,tuple)根据事实句柄更新Beta节点的约束条件:voidupdateFromTuple(std::list*context,TInternalWorkingMemory*workingMemory,TInternalFactHandle*handle)功能:根据事实句柄的值更新Beta节点的约束条件。入口参数:Std::list*context//上下文信息TInternalFactHandle*handle//事实句柄TInternalWorkingMemory*workingMemory//关联工作区返回结果:无主要流程:1.context->front()->updateFromFactHandle(workingMemory,handle)1.1.1.1.1数据结构说明无1.1.1.1.2接口定义TBuildUtils第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点能否成功更新节点的约束条件。1.1.1.2RightInputAdapterNode1.1.1.2.1程序特征描述TRightInputAdapterNode表示的是Rete网络的一个类,主要是负责对右输入适配节点的管理操作。1.1.1.2.2程序功能性能描述包括的主要功能有建网,管理元组。1.1.1.2.3输入/输出项建网:voidTRightInputAdapterNode::attach(vector*workingMemories);功能:将右输入适配节点加入到rete网络中。入口参数:第423页共423页 vector*workingMemories//待加入节点的内存空间返回结果:无主要流程:1.获得该节点的工作区内存2.生成该节点的上下文信息3.调用tupleSource的updateSink()方法把该节点加入到网络中管理元组:主要分两方面插入和删除插入元组voidassertTuple(TReteTuple*tuple,第423页共423页 TPropagationContext*context,TInternalWorkingMemory*workingMemory)功能:往右输入适配节点中插入元组。入口参数:TReteTuple*tuple//插入的元组TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联的工作区返回结果:无主要流程:1.创建一个假的事实handle去包装tuple2.如果元组内存可以使用,则把tuple和handle映射到memory容器中3.调用适配器传递插入包装了该tuple的事实第423页共423页 删除元组:voidretractObject(TRete*tuple,TPropagationContext*context,TInternalWorkingMemory*workingMemory);功能:第423页共423页 从右输入适配节点中删除元组。入口参数:TInternalFactHandle*handle//待删除的元组TPropagationContext*context//上下文信息TInternalWorkingMemory*workingMemory//关联的工作区返回结果:无主要流程:1.获取该节点的工作区内存2.从内存中,根据tuple从内存中取回handle3.最后调用适配器传递删除包装了tuple的handle4.释放handle的内存给空间第423页共423页 1.1.1.1.1数据结构说明//指向上一个节点TTupleSinkNode*previousTupleSinkNode;//指向下一个节点TTupleSinkNode*nextTupleSinkNode;1.1.1.1.2接口定义TexistBuilder,TNotBuilder等调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点建网部分:右输入适配节点能否正确加入到rete网络中管理事实部分:能否正确插入元组,删除元组1.1.1.2TupleSinkNodeList1.1.1.2.1程序特征描述TObjectSinkNodeList主要是负责对节点链表的管理操作。1.1.1.2.2程序功能性能描述包括的主要功能有增加节点,删除节点。第423页共423页 1.1.1.1.1输入/输出项voidadd(TTupleinkNode*node)功能:往链表中添加一个节点。入口参数:TTupleSinkNode*node//待添加的节点返回结果:无主要流程:1.如果添加的是链表的第一个节点,则把链表的头尾指针都指向这个节点,并把头尾指针的下一个节点都设置为空2.否则,把链表尾指针的下一个节点指针指向这个节点3.然后再将链表尾指针指向该节点voidremove(TTupleSinkNode*node)功能:从链表中删除一个节点。第423页共423页 入口参数:TTupleSinkNode*node//待删除的节点返回结果:无主要流程:1.如果节点是链表的首节点,调用删首节点函数2.如果节点是链表的尾节点,调用删尾节点函数3.否则,将该节点的前一个节点的下一个节点指针指向该节点的下一个节点4.将该节点的下一个节点的前一个节点指针指向该节点的前一个节点将该节点的前后一个节点指针设置为空第423页共423页 1.1.1.1.1数据结构说明//链表首节点TTupleSinkNode*firstNode;//链表尾节点TTupleSinkNode*lastNode;//链表长度intcapacity;1.1.1.1.2接口定义传递适配器1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点正确添加和删除链表中节点1.1.1.2EvalConditionNode1.1.1.2.1程序特征描述TEvalConditionNode管理Eval节点。第423页共423页 1.1.1.1.1程序功能性能描述包括的主要功能:管理Eval节点的增加和删除操作1.1.1.1.2输入/输出项增加一个Eval节点:voidattach(vector*workingMemories)功能:添加一个Eval节点到网络中。入口参数:vector*workingMemories//关联工作区返回结果:无主要流程:1.通过入口参数workingMemories获取相关的上下文信息2.然后调用TupleSource的Update方法把Eval节点添加到网络中3.一直重复上面的操作,直到遍历完workingMemories容器删除一个Eval节点:voidTEvalConditionNode::remove(TRuleRemovalContext*context,TBaseNode*node,vector*workingMemories)功能:根据事实句柄的值更新Beta节点的约束条件。入口参数:TRuleRemovalContext*context//上下文信息TBaseNode*node//待删除的节点vector*workingMemories//关联工作区返回结果:无主要流程:第423页共423页 1.通过上下文信息访问该Eval节点的tuple资源2.如果入口参数的node节点没有在被使用,就删除该节点3.如果当前的Eval节点没有在被使用,就释放其工作区的内存4.如果还没有访问过当前节点的tuple资源,就调用TupleSource的remove方法从工作区内存删除当前节点5.程序结束第423页共423页 第423页共423页 1.1.1.1.1数据结构说明TTupleSource*tupleSource1.1.1.1.2接口定义TEvalBuilder1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点能否成功添加和删除一个Eval节点。1.1.1.2EvalMemory1.1.1.2.1程序特征描述TEvalMemory提供了存储Eval节点的工作内存的数据结构。1.1.1.2.2程序功能性能描述自身构造1.1.1.2.3输入/输出项自身构造:TEvalMemory::TEvalMemory(booltupleMemoryEnabled,第423页共423页 TObject*context)功能:提供自身的构造,根据输入参数初始化类中的各个属性值入口参数:booltupleMemoryEnabled//指示tuple内存是否可用TObject*context//上下文信息返回结果:无主要流程:1.依次根据参数对类中的各个属性进行初始化2.根据tupleMemoryEnabled参数判断是否需要分配一块新的tuple内存1.1.1.1.1数据结构说明TTupleHashTable*tupleMemory;//tuple元组的内存指针TObject*context;//上下文信息1.1.1.1.2接口定义TEvalConditionNode节点调用,用于为Eval节点创建内存区1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点自身构造:查看属性能否被参数成功初始化第423页共423页 1.1.1规则执行模块这个模块包括4部分的内容,1-19是有关规则执行的部分;20-27是规则代理模块;28-39是异常处理模块;40-52是公用程序模块。规则执行子模块负责辅助规则的执行(在WorkingMemory的fireAllRules方法中调用本模块依次进行规则的执行),冲突集(议程组中有很多个AgendaItem元素或者说是激活的规则的时候,规则的执行顺序)的解决,其类图如图3.8所示,具体将在下面各节中介绍。图3.8规则执行模块类图1.1.1.1RuleBaseFactory1.1.1.1.1程序特征描述TRuleBaseFactory类是一个工厂类,主要根据规则库的类型构建一个空的RuleBase,而目前只有一种规则库的类型即ReteOO,对应的规则库为ReteooRuleBase。1.1.1.1.2程序功能性能描述根据规则库的类型构建新的规则库第423页共423页 1.1.1.1.1输入/输出项构建规则库:主要有以下一个接口TRuleBase*newRuleBase(inttype,TRuleBaseConfiguration*config)功能:根据规则库的类型构建一个空的RuleBase入口参数:inttype//规则库的类型,默认情况下为TRuleBase::RETEOOTRuleBaseConfiguration*config//配置文件,用于对RuleBase中的初始参数进行配置返回结果:返回一个TRuleBase的指针主要流程:1.将工厂类建立RuleBase的动作加入到日志2.更具type建立相应的RuleBase,默认情况下建立ReteooRuleBase1.1.1.1.2数据结构说明//配置文件在内存中对应的对象TRuleBaseConfiguration*config1.1.1.1.3接口定义本类被规则引擎的启动程序调用,用于完成启动规则引擎的第一步1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图构建规则库流程图:第423页共423页 1.1.1.1.1测试要点构建规则库:如果规则库类型为ReteOO则规则库构建成功,其余类型程序报出异常。1.1.1.2AbstractRuleBase1.1.1.2.1程序特征描述TAbstractRuleBase是一个抽象类,是具体的RuleBase的父类,主要提供自身的构造,加入Package对象和加入规则调用的入口(具体的加入规则在具体的RuleBase中进行)1.1.1.2.2程序功能性能描述自身构造,加入Package,加入规则。1.1.1.2.3输入/输出项自身构造:第423页共423页 TAbstractRuleBase(stringid,TRuleBaseConfiguration*config,TAbstractFactHandleFactory*factHandleFactory);功能:根据规则库的类型构建一个空的RuleBase入口参数:stringid//id为全球唯一的规则库编号TRuleBaseConfiguration*config//配置文件,用于对RuleBase中的参数进行配置TAbstractFactHandleFactory*factHandleFactory//工厂类的实例,用于对加入到规则库的对象进行封装成FactHandle的形式返回结果:无主要流程:1.用传入参数初始化id,config,factHandleFactory属性2.初始化各个容器map和vector3.将用户编写的事实模型编译后的动态库加入到内存中。加入Package:voidaddPackage(TPackage*newPkg);功能:将规则编译阶段产生的Package对象加入到规则库中,从此处开始构建RETE网络入口参数:TPackage*newPkg//规则编译阶段产生的Package对象返回结果:无主要流程:1.将加入Package对象的东西加入到日志。2.查看规则库的pkgs属性,该属性为一个容器的实例,保存了规则库中所有的Package对象,检测新加入的Package对象是否在规则库中已经存在,若存在则舍弃并异常退出,否则加入到容器中。3.得到新加入的Package的每个Rule,分别调用addRule操作。第423页共423页 加入规则:voidaddRule(TPackage*pkg,TRule*rule);功能:加入规则,为一个上层的接口,具体的实现是在具体的RuleBase中实现的,如ReteooRuleBase的addRule方法入口参数:TPackage*pkg//Package对象TRule*rule//规则对象返回结果:无主要流程:1.调用具体RuleBase的addRule方法1.1.1.1.1数据结构说明//抽象事实封装工厂TAbstractFactHandleFactory*factHandleFactory;1.1.1.1.2接口定义主要用于具体的实际RuleBase所继承,并提供共有的函数。1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图自身构造流程图:第423页共423页 加入Package流程图:1.1.1.1.1测试要点自身构造:构造一个抽象的RuleBase加入Package:加入新的Package的对象,如加入同名的Package对象则异常,否装加入到规则库中。第423页共423页 1.1.1.1ReteooRuleBase1.1.1.1.1程序特征描述TReteooRuleBase是RuleBase的一个具体实现,其规则库类型对应为RETEOO,目前只是支持这一种RuleBase。随着迭代,也许会加入另外类型的RuleBase,如LEAPS。1.1.1.1.2程序功能性能描述自身构造,加入规则,新建StatefulSession(为接口WorkingMemory的实现)1.1.1.1.3输入/输出项自身构造:TReteooRuleBase(stringid,TRuleBaseConfiguration*config)功能:构造一个TReteooRuleBase的实例,在这个过程中构造一个Rete的实例为网络的根节点,构造一个TReteooBuilder的实例为构建网络的主要类,该类将在后续介绍。入口参数:stringid//id为全球唯一的规则库编号TRuleBaseConfiguration*config//配置文件,用于对RuleBase中的初始参数进行配置返回结果:无主要流程:1.构造一个Rete的实例为网络的根节点2.构造一个TReteooBuilder的实例为构建网络的主要类第423页共423页 加入规则:voidaddRule(TRule*rule);功能:调用在构造函数中初始化的ReteooBuilder的实例,加入规则到RETE网络中去。入口参数:TRule*rule//需要加入的规则对象返回结果:无主要流程:1.调用在构造函数中初始化的ReteooBuilder的实例,加入规则。新建StatefulSession:TReteooStatefulSession*newStatefulSession(boolkeepReference);功能:新建一个TReteooStatefulSession(该类继承自WorkingMemory)的实例,保存所有插入事实等入口参数:boolkeepReference//表示是否需要规则库,对工作内存保持弱引用返回结果:TReteooStatefulSession的实例主要流程:1将新建立TReteooStatefulSession的动作加入到日志文件中。1.如果配置文件要求顺序执行则报出异常,目前的版本不支持规则的顺序执行。2.构造一个TReteooStatefulSession的实例1.1.1.1.1数据结构说明//Rete网络的根节点TRete*rete第423页共423页 //构建网络主要类的实例TReteooBuilder*reteooBuilder1.1.1.1.1接口定义新建一个TReteooStatefulSession的实例;调用ReteooBuilder的addRule方法加入规则。1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图新建StatefulSession的数据流图:1.1.1.1.4测试要点自身构造:查看是否能够成功的构造一个ReteooRuleBase的实例;加入规则:查看是否能够成功的调用ReteooBuilder加入规则;新建StatefulSession:是否能够构造一个TReteooStatefulSession的实例。第423页共423页 1.1.1.1RuleBase1.1.1.1.1程序特征描述RuleBase是一个抽象类,主要用来根据规则构建一个规则库。1.1.1.1.2程序功能性能描述主要是给RuleBase类的属性RETEOO赋值。1.1.1.1.3输入/输出项无1.1.1.1.4数据结构说明无1.1.1.1.5接口定义无。1.1.1.1.6算法见输入输出1.1.1.1.7程序逻辑流程图无1.1.1.1.8测试要点无。第423页共423页 1.1.1.1RuleBaseConfiguration1.1.1.1.1程序特征描述TRuleBaseConfiguration类主要负责管理规则库中的配置信息,对配置文件中的属性进行相应的操作。1.1.1.1.2程序功能性能描述配置文件的初始化。1.1.1.1.3输入/输出项初始化:voidinit(TProperties*properties);功能:对配置文件中的属性初始化入口参数:TProperties*properties//指向待添加的属性值文件的指针返回结果:无主要流程:1.生成一个chainedProperties2.如果待添加的属性值文件不为空,则把它添加到chainedproperties3.通过chainedproperties对配置文件中的变量进行初始化第423页共423页 1.1.1.1.1数据结构说明//对配置文件进行读存操作的类TChainedProperties*chainedProperties;1.1.1.1.2接口定义无。第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点能否成功初始化配置文件。1.1.1.2AgendaItem1.1.1.2.1程序特征描述TAgendaItem类提供了保存激活规则的各种信息的一种数据结构,这些信息包括激活这个规则的元组,上下文信息,规则,优先级,激活规则的编号。1.1.1.2.2程序功能性能描述删除激活1.1.1.2.3输入/输出项删除激活:voidremove();功能:将本AgendaItem从议程组中删除,议程组中把AgendaItem存放在一个优先队列中,该队列以规则的优先级进行排序。实际上进行的操作就是从该优先队列中删除AgendaItem入口参数:第423页共423页 无返回结果:无主要流程:1.如果该优先队列不为空,则将其队列中的元素依次取出,与本AgendaItem进行比较,如不相同则放入一个临时队列中,如果相同则说明删除的Item正式此元素,不进入临时队列2.将临时队列中的元素放入优先队列中3.设置该Item的状态为未激活状态1.1.1.1.1数据结构说明//指向议程组的指针TAgendaGroup*agendaGroup;//布尔变量,表示本Item是否处于激活状态boolactivated;//指向优先级队列的指针TQueue*tqueue;1.1.1.1.2接口定义构造函数在规则终止节点中有激活规则出现时调用,有规则需要从议程组中移出的时候调用删除激活的方法1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图删除激活流程图:第423页共423页 1.1.1.1.1测试要点删除激活:在规则终止节点的删除元组的操作中调用,查看优先队列中是否将该AgendaItem删除。1.1.1.2AgendaGroup1.1.1.2.1程序特征描述TAgendaGroup是一个抽象类,主要功能是管理议程组的操作。1.1.1.2.2程序功能性能描述主要功能是给agendaGroup类的main属性赋值,这个属性代表了默认的agendaGroup组名。第423页共423页 1.1.1.1.1输入/输出项无1.1.1.1.2数据结构说明无1.1.1.1.3接口定义无1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图见输入输出中的流程介绍1.1.1.1.6测试要点无1.1.1.2BinaryHeapQueueAgendaGroup1.1.1.2.1程序特征描述该类实际上只有两个属性,一个是议程组的名字,另一个是一个优先队列,该队列以规则的优先级排序。所以类中各个方法主要是对队列的操作的封装。第423页共423页 1.1.1.1.1程序功能性能描述自身构造,,以及对队列中的Agenda进行的一系列的增删的操作。1.1.1.1.2输入/输出项自身构造:TBinaryHeapQueueAgendaGroup(stringname,TInternalRuleBase*rulebase);功能:类中各个属性的初始化入口参数:stringname//议程组的名字TInternalRuleBase*rulebase//指向规则库的指针返回结果:无主要流程:1.依次对类中的各个属性进行初始化添加操作:voidadd(TActivation*activation)功能:把Agenda添加到队列中入口参数:TActivation*activation//待添加的Agenda返回结果:无主要流程:1.。把Agenda添加到队列中第423页共423页 1.1.1.1.1数据结构说明//议程组的名字stringname;//布尔变量,标识该议程组是否处于激活状态boolactive;//以链表的形式存储该议程组中的激活std::list*activations;1.1.1.1.2接口定义为DefaultAgenda中调用得到一个该类的实例1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点自身构造:查看属性能否成功初始化能否成功把添加Agenda到队列中。1.1.1.2DefaultAgenda1.1.1.2.1程序特征描述TDefaultAgenda管理所有激活的规则,包括管理议程组,依次取出规则执行等第423页共423页 1.1.1.1.1程序功能性能描述自身构造,触发下一个规则,规则执行1.1.1.1.2输入/输出项自身构造:TDefaultAgenda(TAbstractWorkingMemory*workingMemory);功能:类中各个属性的初始化,包括初始化规则执行帮助类对象DefaultKnowledgeHelper,初始化议程组容器(可能包含很多议程组,目前只是支持MAIN议程组),初始化MAIN议程组,将MAIN议程组加入到议程组容器中。入口参数:TAbstractWorkingMemory*workingMemory//指向工作内存的指针返回结果:无主要流程:1.初始化规则执行帮助类对象DefaultKnowledgeHelper2.初始化议程组容器,焦点栈(当前聚焦在那个议程组上,扩展使用)3.初始化MAIN议程组,将MAIN议程组加入到议程组容器中触发下一个规则:boolfireNextItem();功能:依次得到议程组中的规则,调用fireActivation执行规则入口参数:无返回结果:布尔值,表示是否成功执行议程组中一个规则主要流程:1.得到当前聚焦的议程组(目前只有MAIN议程组)第423页共423页 1.得到议程组中的一个AgendaItem2.调用fireActivation执行规则规则执行:voidfireActivation(TActivation*activation);功能:执行Activation即AgendaItem所代表规则的RHS部分入口参数:TActivation*activation//指向AgendaItem的指针返回结果:无主要流程:1.增加休眠的规则数目,设置该AgendaItem为未激活状态2.初始化规则执行帮助类中相关的属性3.得到AgendaItem所代表规则的RHS部分,执行RHS里面的代码4.规则执行帮助类中属性复位,以便下一次操作1.1.1.1.1数据结构说明//指向规则执行帮助类的指针TDefaultKnowledgeHelper*knowledgeHelper;//指向MAIN议程组的指针TAgendaGroup*main;//以议程组的名字为键,以议程组为值的容器std::map*agendaGroups;1.1.1.1.2接口定义被WorkingMemory的fireAllRules所调用,执行规则1.1.1.1.3算法见输入输出第423页共423页 1.1.1.1.1程序逻辑流程图规则执行的流程图:1.1.1.1.2测试要点自身构造:检查在ReteooRuleBase的构造函数中调用该类的构造函数是否能够构造成功触发下一个规则:在规则执行阶段WorkingMemory的fireAllRules所调用,能否成功激活下一个规则规则执行:能否成功调用规则RHS中的代码,执行规则1.1.1.2ChainedProperties1.1.1.2.1程序特征描述TChainedProperties类主要用来对配置文件进行读取或存储的操作。第423页共423页 1.1.1.1.1程序功能性能描述从配置文件读取属性值,或者把属性值存储到配置文件中。1.1.1.1.2输入/输出项读取配置文件:stringgetProperty(stringkey,stringdefaultValue);功能:。入口参数:Stringkey//Hash索引StringdefaultValue//默认值返回结果:返回一个string类型的值主要流程:1.先根据key值,在配置文件中检索对应的属性值2.如果没有对应的属性值,就从默认的配置文件中检索对应的属性值3.然后返回第一个检索出来的属性值第423页共423页 存储属性值:voidaddProperties(TProperties*props);功能:把新的属性添加到配置文件中入口参数:TProperties*props//待添加的属性文件返回结果:无主要流程:this->props=props;第423页共423页 1.1.1.1.1数据结构说明//指向配置文件的指针TProperties*props;;//指向默认的配置文件的指针TProperties*defaultProps;1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点读取配置文件:能否成功读取配置文件中的属性值写配置文件:能否把属性值写到配置文件中1.1.1.2DefaultKnowledgeHelper1.1.1.2.1程序特征描述TDefaultKnowledgeHelper规则执行的帮助类,主要针对规则的RHS里面包含有update,insert等原语的情况,辅助在当前的工作内存中插入、更新删除事实。1.1.1.2.2程序功能性能描述拆入事实,删除事实,更新事实第423页共423页 1.1.1.1.1输入/输出项更新事实:voidupdate(TObject*object);功能:调用WorkingMemory的update操作,动态的更新工作内存入口参数:TObject*object//指向需要更新的对象的指针返回结果:无主要流程:1.从所有插入事实的容器中查找该对象对应的事实句柄,如果未找到则程序出错返回,否则转22.调用WorkingMemory的update操作动态的更新工作内存1.1.1.1.2数据结构说明//元组内存,存放插入的元组的指针TActivation*activation;1.1.1.1.3接口定义在规则执行阶段为DefaultAgenda的fireActivation所调用,调用WorkingMemory的插入、删除、更新操作。1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图见输入输出中的流程介绍第423页共423页 1.1.1.1.1测试要点更新事实:在规则的RHS中包含有update原语时候能否成功的更新事实1.1.1.2EqualityKey1.1.1.2.1程序特征描述该类主要在真挚维护的时候使用,一个是用在判断插入事实的时候是否是逻辑插入,另外一个是管理逻辑插入外部事实的时候,要插入与外部事实逻辑相关的事实。1.1.1.2.2程序功能性能描述主要是插入事实句柄,删除事实句柄。1.1.1.2.3输入/输出项插入事实句柄:voidaddFactHandle(TInternalFactHandle*handle);功能:添加一个事实句柄到instance容器里入口参数:TInternalFactHandle*handle//指向事实句柄的指针返回结果:无主要流程:1.判断instance容器是否未空,则初始化instance容器,否则转到22.把handle加入到instance容器中删除事实句柄:第423页共423页 voidremoveFactHandle(TInternalFactHandle*handle)功能:从instance容器中删除一个事实句柄入口参数:TInternalFactHandle*handle//指向事实句柄的指针返回结果:无主要流程:1.如果外部的事实与待删除的事实相等,则用instance容器中的第一个值把外部事实重新赋值,否则转22.在instance容器查找handle指向的事实,再把它从instance容器中删除掉1.1.1.1.1数据结构说明//指向事实句柄的指针TInternalFactHandle*handle;//标识事实状态intstatus;//存储事实句柄的容器std::list*instances;1.1.1.1.2接口定义为AbstactWorkingMemory中调用得到一个该类的实例1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍第423页共423页 1.1.1.1.1测试要点添加事实:能否成功把事实添加到instance容器中。删除事实:能否成功从instance容器中删除事实。1.1.1.2InitialFactHandle1.1.1.2.1程序特征描述该类主要是管理内部事实句柄的操作。1.1.1.2.2程序功能性能描述自身构造,以及对内部事实句柄的属性的操作。1.1.1.2.3输入/输出项自身构造:TInitialFactHandle(TInternalFactHandle*delegate);功能:类的属性的初始化入口参数:TInternalFactHandle*delegate//指向一个内部事实句柄的指针返回结果:无主要流程:1依次对类中的各个属性进行初始化1.1.1.2.4数据结构说明//指向内部事实句柄的指针第423页共423页 TInternalFactHandle*delegate;//内部事实封装的对象TObject*object;1.1.1.1.1接口定义被ReteooRuleBase所调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点自身构造:查看属性能否成功初始化能否成功地管理事实句柄中的内部属性值1.1.1.2InitialFactHandleDummyObject1.1.1.2.1程序特征描述该类是内部事实的一个实现。1.1.1.2.2程序功能性能描述主要生成一个内部事实的实例。1.1.1.2.3输入/输出项无第423页共423页 1.1.1.1.1数据结构说明//指向一个内部事实的实例的指针staticTInitialFactHandleDummyObject*INSTANCE1.1.1.1.2接口定义被ReteooRuleBase调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点无。1.1.1.2LogicalRetractCall1.1.1.2.1程序特征描述该类是工作区活动队列中的一个具体类,主要负责逻辑删除外部事实的时候,把与被删除的外部事实逻辑相关的事实从规则引擎内部删除。1.1.1.2.2程序功能性能描述自身构造,,删除事实。第423页共423页 1.1.1.1.1输入/输出项自身构造:TLogicalRetractCallback(TTruthMaintenanceSystem*tms,TLogicalDependency*node,THashSet*hset,TDefaultFactHandle*handle,TPropagationContext*context);功能:类中各个属性的初始化入口参数:TTruthMaintenanceSystem*tms//指向真值维护系统的指针,TLogicalDependency*node//和插入事实逻辑相关的激活的规则和事实,THashSet*hset//和外部事实逻辑相关的事实,TDefaultFactHandle*handle//指向外部事实的指针,TPropagationContext*context)//指向上下文的指针返回结果:无主要流程:1.依次对类中的各个属性进行初始化逻辑删除操作:voidexecute(TInternalWorkingMemory*workingMemory)功能:删除和外部事实逻辑相关的事实入口参数:TInternalWorkingMemory*workingMemory//指向工作区的指针返回结果:无主要流程:1.判断存储与外部事实逻辑相关的容器是否为空,如果为空,则删除外部事实的id编号2.最后调用工作区的retract方法把外部事实删除第423页共423页 1.1.1.1.1数据结构说明//指向真值维护系统的指针TTruthMaintenanceSystem*tms,//和插入事实逻辑相关的激活的规则和事实TLogicalDependency*node;//和外部事实逻辑相关的事实THashSet*hset,//指向外部事实的指针TDefaultFactHandle*handle,//指向上下文的指针TPropagationContext*context);1.1.1.1.2接口定义为TruthMaintenanceSystem中调用得到一个该类的实例1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点自身构造:查看属性能否成功初始化逻辑删除:能否成功删除外部事实以及与外部事实逻辑相关的事实。第423页共423页 1.1.1.1SalienceCom1.1.1.1.1程序特征描述TSalienceCom类是用来在激活规则之间进行优先级。1.1.1.1.2程序功能性能描述优先级比较。1.1.1.1.3输入/输出项优先级比较:booloperator()(TActivation*A,TActivation*B)const;功能:进行两条激活规则之间的优先级比较入口参数:TActivation*A//指向某一条激活规则的指针TActivation*B//指向另外一条激活规则的指针返回结果:一个bool值,表明谁的优先级高主要流程:1.returnA->getSalience()getSalience();1.1.1.1.4数据结构说明无1.1.1.1.5接口定义无。第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点能否成功比较两条激活规则的优先级高低。1.1.1.2ShadowProxy1.1.1.2.1程序特征描述TShadowProxy类主要通过克隆外部的事实和管理克隆的事实来进行真值维护。1.1.1.2.2程序功能性能描述克隆外部的事实。1.1.1.2.3输入/输出项克隆:voidclone(TObject*origin)功能:对外部事实进行克隆入口参数:TObject*origin//指向外部事实的指针返回结果:第423页共423页 无主要流程:1.先判断ShadowProxy类的变量克隆事实clonefact是否为空2.如果clonefact不为空,则重置它为空3.调用外部事实的clone方法给clonefact赋一个新值1.1.1.1.1数据结构说明stringclz;//指向克隆的事实的指针TObject*cloneFact;//指向外部事实的指针TObject*originalFact;1.1.1.1.2接口定义被PatternExtractor所调用。1.1.1.1.3算法见输入输出第423页共423页 1.1.1.1.1程序逻辑流程图见输入输出中的流程介绍1.1.1.1.2测试要点能否成功克隆一个外部事实。1.1.1.2WorkingMemoryReteAssertAction1.1.1.2.1程序特征描述此类主要对在工作内存区等待队列上的内部事实进行插入操作。1.1.1.2.2程序功能性能描述把内部事实添加到RETE网络中。1.1.1.2.3输入/输出项插入事实:voidexecute(TInternalWorkingMemory*workingMemory);功能:对在工作区中的等待队列中的内部事实进行插入操作入口参数:TInternalWorkingMemory*workingMemory//指向工作区内存的指针返回结果:无主要流程:1.生成一个进行插入事实的上下文;2.从工作区中获取规则库,再调用规则库的assertobject方法插入内部的事实3.删除上下文第423页共423页 1.1.1.1.1数据结构说明//指向内部事实句柄的指针TInternalFactHandle*factHandle;//是否是逻辑删除的一个bool值boolremoveLogical;//是否更新相等容器的一个bool值boolupdateEqualsMap;//指向原始规则的指针TRule*ruleOrigin;//指向一条激活的指针TActivation*activationOrigin;1.1.1.1.2接口定义被AbstractWorkingMemory调用。第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点能否成功把内部事实插入到RETE网络中。1.1.1.2WorkingMemoryReteRetractAction1.1.1.2.1程序特征描述此类主要对在工作内存区等待队列上的内部事实进行删除操作。1.1.1.2.2程序功能性能描述把内部事实从RETE网络中删除。1.1.1.2.3输入/输出项插入事实:voidexecute(TInternalWorkingMemory*workingMemory);功能:对在工作区中的等待队列中的内部事实进行删除操作入口参数:TInternalWorkingMemory*workingMemory//指向工作区内存的指针返回结果:无第423页共423页 主要流程:1生成一个进行删除事实的上下文;2从工作区中获取规则库,再调用规则库的retractobject方法删除内部事实3删除上下文1.1.1.1.1数据结构说明//指向内部事实句柄的指针TInternalFactHandle*factHandle;//是否是逻辑删除的一个bool值boolremoveLogical;//是否更新相等容器的一个bool值boolupdateEqualsMap;//指向原始规则的指针TRule*ruleOrigin;//指向一条激活的指针TActivation*activationOrigin;第423页共423页 1.1.1.1.1接口定义被AbstractWorkingMemory调用。1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点能否成功把内部事实从RETE网络中删除。1.1.1.2AgentEventListener1.1.1.2.1程序特征描述TAgentEventListener主要负责在加载drl时,对编译package的操作的信息提示。1.1.1.2.2程序功能性能描述有异常信息,警告信息,调试信息,正常信息提示1.1.1.2.3输入/输出项异常信息提示:voidexception(TExceptione);功能:第423页共423页 输出异常的信息入口参数:TExceptione//捕获异常信息返回结果:无主要流程:1.输出异常的信息正常信息提示:voidinfo(stringmessage);功能:在控制台显示操作成功的信息入口参数:Stringmessage//要输出到控制台的消息内容返回结果:无主要流程:1.输出操作成功的消息警告消息提示:voidwarning(stringmessage);功能:在控制台输出警告的信息入口参数:Stringmessage//要输出到控制台的消息内容返回结果:无主要流程:1输出警告的消息调试消息提示:第423页共423页 voiddebug(stringmessage);功能:在控制台输出调试的信息入口参数:Stringmessage//要输出到控制台的消息内容返回结果:无主要流程:1输出调试的消息1.1.1.1.1数据结构说明无;1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点查看能否正常输出各种提示消息。第423页共423页 1.1.1.1DirectoryScanner1.1.1.1.1程序特征描述TDirectoryScanner是读目录,获取文件列表的目录浏览器,当drl文件发生变化的时候,把相应的变化加载到package中。1.1.1.1.2程序功能性能描述读目录,更新package包1.1.1.1.3输入/输出项读目录:voidconfigure(TProperties*config);功能:根据配置文件读取目录,获得文件列表入口参数:TProperties*config//指向配置文件的指针返回结果:无主要流程:1根据配置文件中提供的目录路径,读取文件2把读取的文件加载到到文件列表中3把文件列表传到FileScanner中第423页共423页 更新package包:vector*loadPackageChanges();功能:当drl文件发生变化的时候,把相应的变化加载到由此drl编译而成的包中入口参数:无返回结果:vector*//一个包含了需要更新的包主要流程:1如果当前目录中的文件数目和文件列表中的文件数目不一样,则需要把重置文件列表的值,把新的文件加到文件列表中,否则程序退出第423页共423页 2调用FileScanner的loadPackageChanges()方法来加载相应的变化1.1.1.1.1数据结构说明vector*currentList;//一个目录下的所有文件TFileScanner*scanner;//文件浏览器DIR*dir;//目录结构intdirLength;//目录下的文件个数stringdirPath;//目录路径1.1.1.1.2接口定义无第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点读目录:能否成功地读取目录下的所有文件更新包:能否成功地加载相应的变化到package中。1.1.1.2FileScanner1.1.1.2.1程序特征描述TFileScanner用来读文件,读drl文件,再对drl文件进行编译形成package包。1.1.1.2.2程序功能性能描述从配置文件中读取出File文件,处理由于drl变化引起的package包的变化1.1.1.2.3输入/输出项读取File文件:voidconfigure(TProperties*config);功能:从配置文件中读取出所有的File文件入口参数:TProperties*config//指向配置文件的指针返回结果:第423页共423页 无主要流程:1先在配置文件中获得Files文件的路径2根据Files的路径,取出所有的文件,存在Files容器里更新package包:TPackage*readPackage(stringpkgFile);功能:处理由于drl文件变化,而引起相应的package发生的变化入口参数:stringpkgFile//dir文件名返回结果:TPackage*//需要更新的package包主要流程:1判断pkgFile是否是drl文件类型,如果不是,则返回,否则转22再根据drl文件重新编译package包1.1.1.1.1数据结构说明vector*files;//文件名列表1.1.1.1.2接口定义TaDirectoryScanner调用此类1.1.1.1.3算法见输入输出第423页共423页 1.1.1.1.1程序逻辑流程图见输入输出中的流程介绍1.1.1.1.2测试要点读取文件:能否成功根据配置文件读取除所有的File文件。更新package包:能否成功地更新package包1.1.1.2PackageProvider1.1.1.2.1程序特征描述TPackageProvider主要是对规则包的一些操作。1.1.1.2.2程序功能性能描述删除包,添加新包1.1.1.2.3输入/输出项删除包:voidremovePackage(stringname,TRuleBase*rb);功能:从规则库中删除包入口参数:stringname//待删除的包TRuleBase*rb//指向规则库的指针返回结果:无主要流程:第423页共423页 1从规则库中取出所有的包,存在ps中2判断包名为name的包是否在ps中,如果在其中,就从规则库中删掉该包,程序返回添加新的包:VoidapplyChanges(TRuleBase*rb,boolremoveExistingPackages,vector*changes,TAgentEventListener*listener);功能:把新包添加到规则库中入口参数:TRuleBase*rb,//指向规则库的指针boolremoveExistingPackages,//是否删除包的一个bool变量vector*changes,//待添加的包TAgentEventListener*listener//代理事件监听器返回结果:无主要流程:1判断changes是否为空,如果为空,就返回,否则转22如果removeExistingPackages为真,则需要先从规则库中删除以前的包,再加入新的包3否则,直接添加新的包到规则库中第423页共423页 1.1.1.1.1数据结构说明无;1.1.1.1.2接口定义无第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点删除包:能否成功从规则库中删除指定的包添加包:能否成功把一个指定的包添加到规则库中。1.1.1.2Properties1.1.1.2.1程序特征描述TProperties对配置文件进行操作。1.1.1.2.2程序功能性能描述读取配置文件上的文件信息,获取配置文件上的文件1.1.1.2.3输入/输出项读取文件:voidinitilizeMap();功能:读取出配置文件上的所有文件信息入口参数:无返回结果:第423页共423页 无主要流程:1根据配置文件的文件路径打开配置文件2然后一行一行地处理配置文件中内容,根据所定义的分隔符来取出key和value的值3把key对应的value保存到vector容器中获取文件:StringgetProperty(stringkey,stringdefaultValue):功能:根据key值,获取对应的文件第423页共423页 入口参数:stringkey// 配置文件中的key值stringdefaultValue//当没有文件与key值对应的时候,所返回的默认值返回结果:String文件的路径主要流程:1.根据key值,在propertyMap中查找对应的文件2.如果找到了,就返回该值3.否则就返回一个默认的值1.1.1.1.1数据结构说明stringconfigFile;//配置文件所在的路径stringdelimiter;//配置文件分割key和value值的分隔符map*>propertyMap;//配置文件中的key和value值所存放的容器1.1.1.1.2接口定义TRuleAgent调用此类1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点读取配置文件:能否成功读取配置文件中的内容第423页共423页 获取文件:能否成功返回一个与key值对应的文件。1.1.1.1RuleAgent1.1.1.1.1程序特征描述TRuleAgent主要用来管理rulebase,什么时候加载以及如何加载drl文件到规则库中。1.1.1.1.2程序功能性能描述初始化RuleAgent、获取读配置文件内容的方式,添加新的包到rulebase中,监听package的变化。1.1.1.1.3输入/输出项初始化RuleAgent:voidinit(TProperties*config);功能:初始化RuleAgent类中的各个属性入口参数:TProperties*config//指向配置文件的指针返回结果:无主要流程:1根据配置文件的信息对RuleAgent的各个属性初始化获取读配置文件内容的方式:TPackageProvider*getProvider(stringkey,TProperties*config);功能:第423页共423页 判断是以DirectoryScanner的方式还是FileScanner的方式来读配置文件的内容入口参数:stringkey//区分是DirectoryScanner还是FileScanner的关键字TProperties*config//指向配置文件的指针返回结果:TPackageProvider*//对配置文件的读取方式主要流程:1根据提供的key值来返回读取文件的方式2如果根据key值没有找到相应的读取文件的方式,则返回一个null添加包到规则库:voidrefreshRuleBase();功能:把变化了的package包加载到规则库中,有两种方法来实现,一种是删掉以前旧的规则库,然后再新建一个规则库,把旧的和新的包一起加载到新的规则库里,第二种方式是直接把包加载到以前的规则库中。入口参数:无返回结果:无主要流程:1先调用checkForChanges()方法检查是否有变化的package,如果有,则把变化的package加载到changedPackages中2根据RuleAgent的变量newInstance的值来判断用什么方法来加载变化了的package包,如果newInstance为true则先把规则库删除,然后再把新的和旧的package一同加载到规则库中,否则,直接把package加载到规则库中3.删除changedPackages第423页共423页 第423页共423页 监听package包的变化:vector*checkForChanges(TPackageProvider*prov);功能:管理当drl文件发生变化后,把相应的变化加载到对应的package包中。入口参数:TPackageProvider*prov//指定通过哪种方式来加载相应的变化到pacakage包中返回结果:vector*//发生了变化的包主要流程:1先判断rulebase是否为null,如果为null,则需要给rulebase初始化2调用prov提供的方法来加载相应的变化到package中,生成新的package包。1.1.1.1.1数据结构说明boolnewInstance;//判断用什么方法来更新rulebase的一个bool变量TRuleBase*ruleBase;//指向rulebase的指针TRuleBaseConfiguration*ruleBaseConf;//指向rulebase配置文件的指针TTimer*timer;//定时器list*providers;//读取配置文件内容的方法map*packages;//加载到规则库中的包TAgentEventListener*listener;//代理事件监听器intsecondsToRefresh;//定时刷新rulebase的时间间隔1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出第423页共423页 1.1.1.1.1程序逻辑流程图见输入输出中的流程介绍1.1.1.1.2测试要点初始化RuleAgent:能否成功初始化Rule。添加新的包:能否成功添加新的包到RuleBase中。监听package包的变化:能否成功检测到包的变化以及把变化加载到包中。1.1.1.2String1.1.1.2.1程序特征描述TString是一个对字符串进行操作的类,它对字符串的操作进行了封装,对外提供了一个统一的接口。1.1.1.2.2程序功能性能描述该类包含判断一个字符串以某个特定的字符串开始或结束,删除字符串左右两边空格,判断一个字符串是否是一个数字,把一个字符串转换成一个double类型的数字1.1.1.2.3输入/输出项判断一个字符串以某个特定的字符串开始:boolstartsWith(stringsrc,stringprefix,inttoffset);功能:判断一个字符串以某个特定的字符串开始入口参数:stringsrc,//源字符串第423页共423页 stringprefix,//指定的字符串inttoffset//起始位置返回结果:一个bool值主要流程:1在源字符串中,从指定的起始位置开始,挨个地与指定的字符串进行比较2如果源字符串中包含了该指定的字符串,则返回true3否则返回false判断一个字符串是否是一个数字:boolisNumber(stringss);功能:判断一个字符串是否是一个数字入口参数:Stringss//源字符串返回结果:一个bool值主要流程:1依次把每个字符与0—9的字符相比较1.1.1.1.1数据结构说明无;1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出第423页共423页 1.1.1.1.1程序逻辑流程图见输入输出中的流程介绍1.1.1.1.2测试要点能否成功实现对字符串进行操作:判断一个字符串是否以某个特定的字符串开始或结束,删除字符串左右两边空格,判断一个字符串是否是一个数字,把一个字符串转换成一个double类型的数字。1.1.1.2Timer1.1.1.2.1程序特征描述Timer是一个定时器,用在规则库的动态管理中,规则库会定期的读取drl文件的内容,检查drl文件内容是否发生改变。1.1.1.2.2程序功能性能描述自身构造,设置定时器的定时时间,停止定时器1.1.1.2.3输入/输出项自身构造:TTimer::TTimer();功能:提供自身的构造入口参数:无返回结果:无主要流程:第423页共423页 1初始化时间类提供的一个itimerval结构中的成员变量。设置定时器的定时时间:voidSetTimer(intt);功能:设施定时器的定时时间长短入口参数:Intt//定时的时间长短返回结果:无主要流程:1给itimerval结构中的变量赋值,一个变量是从t开始递减到零来计时,一个变量是不变的,给递减的变量重新赋值,停止定时器:voidStopTimer();功能:停止定时器入口参数:无返回结果:无主要流程:1.把itimerval中相关的变量值附为零。1.1.1.1.1数据结构说明//time类中提供的一个结构类型structitimervalvalue;第423页共423页 1.1.1.1.1接口定义无1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图见输入输出中的流程介绍1.1.1.1.4测试要点自身构造:能否成功初始化itimerval结构中的成员变量设置定时器的时间:能否成功设置定时器的定时时间长短停止定时器:能否成功停止定时器。1.1.1.2Exception1.1.1.2.1程序特征描述Texception主要功能是处理异常,它是所有异常类的基类,提供了最基本的处理方法。1.1.1.2.2程序功能性能描述自身构造,显示信息,获取信息1.1.1.2.3输入/输出项自身构造:第423页共423页 TException(stringmsg);功能:提供自身的构造入口参数:Stringmsg返回结果:无主要流程:1.通过入口参数给Exception类的自身成员变量赋值显示信息:showMsg();功能:输出Exception类的成员变量msg的值入口参数:无返回结果:无主要流程:1.输出打印变量msg的值获取信息:getMsg();功能:获取Exception类的成员变量msg的值入口参数:无返回结果:返回msg的值,是一个string类型的变量主要流程:1.返回变量msg的值第423页共423页 1.1.1.1.1数据结构说明无;1.1.1.1.2接口定义TabstractRuleBase,TclassFieldExtractor调用此类1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点查看能否正常输出和返回msg的值。1.1.1.2ClassNotFoundException1.1.1.2.1程序特征描述TClassNotFoundException处理class文件没有找到的异常,继承至TException类。1.1.1.2.2程序功能性能描述自身构造第423页共423页 1.1.1.1.1输入/输出项自身构造:TClassNotFoundException();功能:提供自身的构造入口参数:无返回结果:无主要流程:1.空实现1.1.1.1.2数据结构说明无;1.1.1.1.3接口定义无1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图见输入输出中的流程介绍1.1.1.1.6测试要点无第423页共423页 1.1.1.1FileNotFoundException1.1.1.1.1程序特征描述TFileNotFoundException处理文件没有找到的异常,继承至TException类。1.1.1.1.2程序功能性能描述自身构造1.1.1.1.3输入/输出项自身构造:TFileNotFoundException();功能:提供自身的构造入口参数:无返回结果:无主要流程:1.空实现1.1.1.1.4数据结构说明无1.1.1.1.5接口定义无第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点无1.1.1.2IllegalArgumentException1.1.1.2.1程序特征描述TIllegalArgumentException处理不合法参数的异常,继承至TException类。1.1.1.2.2程序功能性能描述自身构造1.1.1.2.3输入/输出项自身构造:TIllegalArgumentException(Stringmsg);功能:提供自身的构造入口参数:Stringmsg//字符串类型的变量返回结果:无第423页共423页 主要流程:1.通过入口参数给类成员变量msg赋值1.1.1.1.1数据结构说明无1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点无1.1.1.2IndexOutOfBoundsException1.1.1.2.1程序特征描述TIndexOutOfBoundsException处理越界的异常,继承至TException类。1.1.1.2.2程序功能性能描述自身构造第423页共423页 1.1.1.1.1输入/输出项自身构造:TIndexOutOfBoundsException(Stringmsg);功能:提供自身的构造入口参数:Stringmsg//字符串类型的变量返回结果:无主要流程:1.通过入口参数给类成员变量msg赋值1.1.1.1.2数据结构说明无1.1.1.1.3接口定义无1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图见输入输出中的流程介绍1.1.1.1.6测试要点无第423页共423页 1.1.1.1InvalidPatternException1.1.1.1.1程序特征描述TInvalidPatternException处理文件没有找到的异常,继承至TException类。1.1.1.1.2程序功能性能描述自身构造1.1.1.1.3输入/输出项自身构造:TInvalidPatternException();功能:提供自身的构造入口参数:Stringmsg//字符串类型的变量返回结果:无主要流程:1.通过入口参数给类成员变量msg赋值1.1.1.1.4数据结构说明无1.1.1.1.5接口定义无第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点无1.1.1.2IOException1.1.1.2.1程序特征描述TIOException处理IO异常,继承至TException类。1.1.1.2.2程序功能性能描述自身构造1.1.1.2.3输入/输出项自身构造:TIOException();功能:提供自身的构造入口参数:无返回结果:无第423页共423页 主要流程:1.空实现1.1.1.1.1数据结构说明无1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点无1.1.1.2NullComparatorException1.1.1.2.1程序特征描述TNullComparatorException处理空比较的异常,继承至TException类。1.1.1.2.2程序功能性能描述自身构造第423页共423页 1.1.1.1.1输入/输出项自身构造:TNullComparatorException();功能:提供自身的构造入口参数:无返回结果:无主要流程:1.空实现1.1.1.1.2数据结构说明无1.1.1.1.3接口定义无1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图见输入输出中的流程介绍1.1.1.1.6测试要点无第423页共423页 1.1.1.1RuntimeDroolsException1.1.1.1.1程序特征描述TRuntimeDroolsException处理Drools运行时的异常,继承至TException类。1.1.1.1.2程序功能性能描述自身构造1.1.1.1.3输入/输出项自身构造:TRuntimeDroolsException();功能:提供自身的构造入口参数:Stringmsg//字符串类型的变量返回结果:无主要流程:1.通过入口参数给类成员变量msg赋值1.1.1.1.4数据结构说明无1.1.1.1.5接口定义无第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点无1.1.1.2RuntimeException1.1.1.2.1程序特征描述TRuntimeException处理运行时的异常,继承至TException类。1.1.1.2.2程序功能性能描述自身构造1.1.1.2.3输入/输出项自身构造:TRuntimeException();功能:提供自身的构造入口参数:Stringmsg//字符串类型的变量返回结果:无第423页共423页 主要流程:1.通过入口参数给类成员变量msg赋值1.1.1.1.1数据结构说明无1.1.1.1.2接口定义无1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图见输入输出中的流程介绍1.1.1.1.5测试要点无1.1.1.2UnknowTypeException1.1.1.2.1程序特征描述TUnknowTypeException处理未知类型的异常,继承至TException类。1.1.1.2.2程序功能性能描述自身构造第423页共423页 1.1.1.1.1输入/输出项自身构造:TUnknowTypeException();功能:提供自身的构造入口参数:Stringmsg//字符串类型的变量返回结果:无主要流程:1.通过入口参数给类成员变量msg赋值1.1.1.1.2数据结构说明无1.1.1.1.3接口定义无1.1.1.1.4算法见输入输出1.1.1.1.5程序逻辑流程图见输入输出中的流程介绍1.1.1.1.6测试要点无第423页共423页 1.1.1.1UnsupportedOperationException1.1.1.1.1程序特征描述TUnsupportedOperationException处理非法操作的异常,继承至TException类。1.1.1.1.2程序功能性能描述自身构造1.1.1.1.3输入/输出项自身构造:TUnsupportedOperationException();功能:提供自身的构造入口参数:Stringmsg//字符串类型的变量返回结果:无主要流程:1.通过入口参数给类成员变量msg赋值1.1.1.1.4数据结构说明无1.1.1.1.5接口定义无第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图见输入输出中的流程介绍1.1.1.1.3测试要点无1.1.1.2TAbstractHashTable1.1.1.2.1程序特征描述抽象哈希表。1.1.1.2.2程序功能性能描述哈希表1.1.1.2.3输入/输出项voidresize(intnewCapacity,boolrecalculateHashCode);功能:扩大哈希表容量入口参数:intnewCapacity//新的容量boolrecalculateHashCode//是否更新哈希值返回结果:无第423页共423页 主要流程:第423页共423页 1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在FactHashTable.C、ObjectHashMap.C、TupleHashTable.C中调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图详见输入输出项1.1.1.1.5测试要点能否正解扩大哈希表容量.1.1.1.2TEqualityEquals1.1.1.2.1程序特征描述比较器。1.1.1.2.2程序功能性能描述相等比较1.1.1.2.3输入/输出项staticTAHTObjectComparator*getInstance();功能:第423页共423页 取得此类的静态实例入口参数:无返回结果:TAHTObjectComparator*主要流程:1.returnTEqualityEquals::INSTANCE;longhashCodeOf(TObject*key);功能:计算传入变量的哈希值入口参数:TObject*key返回结果:Long长整数主要流程:1.h+=~(h<<9);2.h^=(h>>14);3.h+=(h<<4);4.h^=(h>>10);5.returnh;1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在AbstractHashTable.C中调用第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图详见输入输出项1.1.1.1.3测试要点能否正解给出hashcode.1.1.1.2TFactEntryImpl1.1.1.2.1程序特征描述构成TFactHashTable的存储项。1.1.1.2.2程序功能性能描述TFactHashTable的存储单元1.1.1.2.3输入/输出项TEntry*getNext();功能:取得下一个结点入口参数:无返回结果:TEntry*主要流程:第423页共423页 1.returnthis->next;voidsetNext(TEntry*next);功能:设置下一个结点入口参数:TEntry*next返回结果:无主要流程:1.this->next=next;longhashCode();功能:取得此结点的哈希值入口参数:无返回结果:Long长整数主要流程:1.returnthis->hCode;1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在FactHashTable.C中调用第423页共423页 1.1.1.1.1算法见输入输出1.1.1.1.2程序逻辑流程图详见输入输出项1.1.1.1.3测试要点能否正解给出hashcode.1.1.1.2TFactHashTable1.1.1.2.1程序特征描述事实哈希表。1.1.1.2.2程序功能性能描述事实哈希表1.1.1.2.3输入/输出项booladd(TInternalFactHandle*handle,boolcheckExists);功能:在事实哈希表中新加入一个事实入口参数:TInternalFactHandle*handle//事实boolcheckExists//检查哈希表是否已存有传入的事实;为真则检查,为假则不检查返回结果:Bool增加事实是否成功第423页共423页 主要流程:boolcontains(TInternalFactHandle*handle);功能:检查哈希表中是否存在传入的事实入口参数:TInternalFactHandle*handle//事实返回结果:是否存在传入的事实主要流程:第423页共423页 boolremove(TInternalFactHandle*handle);功能:取得此结点的哈希值入口参数:无返回结果:Long长整数主要流程:第423页共423页 1.1.1.1.1数据结构说明无第423页共423页 1.1.1.1.1接口定义在AlphaNode.cLeftInputAdapterNode.cObjectTypeNode.cRete.c中调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图详见输入输出项1.1.1.1.4测试要点能否构建哈希表并正确执行增加、查找和删除事实操作.1.1.1.2THashSet1.1.1.2.1程序特征描述哈希集合。1.1.1.2.2程序功能性能描述数据存储结构,集合中元素唯一,以哈希值标记其唯一性。1.1.1.2.3输入/输出项voidadd(TObject*obj);功能:添加一个元素入口参数:TObject*obj//添加的元素第423页共423页 返回结果:无主要流程:1.this->objSet->insert(make_pair(obj,0));voidremove(TObject*obj);功能:删除一个元素入口参数:TObject*obj//欲删除的元素返回结果:无主要流程:1.this->objSet->erase(obj);map::iteratorgetBegin();功能:取得集合开始元素入口参数:无返回结果:map::iterator//迭代器主要流程:1.returnthis->objSet->begin();map::iteratorgetEnd();功能:取得集合开始元素入口参数:无第423页共423页 返回结果:map::iterator//迭代器主要流程:1.returnthis->objSet->end();1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在TLogicalRetractCallback中调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图详见输入输出项1.1.1.1.5测试要点能否正解保存数据元素,正确执行添加、删除元素,正确取得迭代器1.1.1.2THashTableIterator1.1.1.2.1程序特征描述哈希表迭代器。第423页共423页 1.1.1.1.1程序功能性能描述提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。1.1.1.1.2输入/输出项TObject*next();功能:使迭代器指向下一个元素入口参数:无返回结果:TObject*obj//返回下一个元素主要流程:第423页共423页 voidremove(TObject*obj);功能:删除一个元素入口参数:TObject*obj//欲删除的元素返回结果:无主要流程:1.this->objSet->erase(obj);voidreset();功能:重置迭代器入口参数:无返回结果:无主要流程:1.this->table=this->hashTable->getTable();2.this->length=this->table->size();3.this->row=-1;4.this->entry=NULL;1.1.1.1.1数据结构说明无第423页共423页 1.1.1.1.1接口定义在TLogicalRetractCallback中调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图详见输入输出项1.1.1.1.4测试要点能否正解指向下一个元素,能否正确重置迭代器1.1.1.2TObjectHashMap1.1.1.2.1程序特征描述对象哈希表。1.1.1.2.2程序功能性能描述保存对象。1.1.1.2.3输入/输出项TObject*put(TObject*key,TObject*value,boolcheckExists);功能:取得类成员value值入口参数:无第423页共423页 返回结果:TObject*//返回类成员变量value主要流程:1.returnthis->value;TObject*getKey();功能:取得类成员key值入口参数:TObject*//返回类成员变量key返回结果:无主要流程:2.returnthis->key;TEntry*getNext();功能:取得类成员next值入口参数:无返回结果:TEntry*//指向下一个存储单元的指针主要流程:1.returnthis->next;voidsetNext(TEntry*next);功能:设置类成员next值入口参数:TEntry*//指向下一个存储单元的指针返回结果:第423页共423页 无主要流程:1.this->hCode=hCode;1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在ObjectHashMap.C中调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图详见输入输出项1.1.1.1.5测试要点能否正解指向下一个存储单元1.1.1.2TObjectEntry1.1.1.2.1程序特征描述对象类。1.1.1.2.2程序功能性能描述TObjectHashMap中的存储单元.第423页共423页 1.1.1.1.1输入/输出项voidsetHashCode(longhCode);功能:设置哈希值入口参数:longhCode//哈希值返回结果:无主要流程:this->hCode=hCode;longhashCode();功能:返回哈希值入口参数:无返回结果:Long//哈希值主要流程:returnthis->hCode;voidsetNext(TEntry*next);功能:设置下一个结点入口参数:TEntry*next//下一个结点的位置返回结果:无主要流程:this->next=next;第423页共423页 TEntry*getNext();功能:取得下一个结点入口参数:无返回结果:TEntry*//下一个结点的位置主要流程:returnthis->next;1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在TObjectHashMap中调用1.1.1.1.3算法见输入输出1.1.1.1.4程序逻辑流程图详见输入输出项1.1.1.1.5测试要点能否正确执行读取和写入存储对象.第423页共423页 1.1.1.1TTupleHashTable1.1.1.1.1程序特征描述事实哈希表。1.1.1.1.2程序功能性能描述事实哈希表1.1.1.1.3输入/输出项voidadd(TReteTuple*tuple);功能:在事实哈希表中新加入一个元组入口参数:TReteTuple*tuple//元组返回结果:无主要流程:第423页共423页 TReteTuple*get(TReteTuple*tuple);功能:根据传入的元组,查找哈希表中相应元组。若存在这样的元组则返回此元组,否则返回空入口参数:TReteTuple*tuple//元组返回结果:返回哈希表中与传入元组相应的元组。若不存在这样的元组,则返回空主要流程:TReteTuple*remove(TReteTuple*tuple);功能:删除在哈希表中与传入参数相应的元组。若存在这样的元组,则返回此元组。否则返回空。第423页共423页 入口参数:TReteTuple*tuple//元组返回结果:TReteTuple*//元组主要流程:1.1.1.1.1数据结构说明无第423页共423页 1.1.1.1.1接口定义在TEvalMemory中调用1.1.1.1.2算法见输入输出1.1.1.1.3程序逻辑流程图详见输入输出项1.1.1.1.4测试要点能否构建哈希表并正确执行增加、查找和删除事实操作.1.1.1.2TAbstractBaseLinkedListNode此类仅包含get和set用法,后期将进行修改和补充1.1.1.3TPage此类为后期开发做准备,功能并未完善。待以后补充修改1.1.1.4TPrimitiveLongMap此类为后期开发做准备,功能并未完善。待以后补充修改1.1.1.5TLogicalDependency此类为后期开发做准备,功能并未完善。待以后补充修改第423页共423页 1.1规则编译子系统参照《规则引擎第二阶段概要设计说明书》中编译的数据流图和系统体系结构,其主要数据流图如下所示:Rule规则编译子系统这部分的主要功能是:对drl文件进行解析和封装,最终封装到package对象和扩展名为“.c”、“.h”的文件中。这个子系统分5个模块,分别为:Parser模块、Descrs模块、Builder模块、Excepion模块、Utils模块。1.1.1词法分析子模块1.1.1.1cDRLLexer1.1.1.1.1程序特征描述这个类主要是:用来识别一个标示符是否为一个合法的DRL标示符。1.1.1.1.2程序功能性能描述这个类主要是:用来识别一个标示符是否为一个合法的DRL标示符。第423页共423页 1.1.1.1.1输入/输出项ANTLR3_APIpcDRLLexercDRLLexerNew(pANTLR3_INPUT_STREAMinstream)功能:对一个字符串进行词法分析返回token流,为下一步的语法分析做准备。即:为语法分析的输入。入口参数:pANTLR3_INPUT_STREAMinstream//drl文件的输入流。返回结果:cDRLLexerI类型的指针。主要流程:1.识别输入流中的所用标示符。2.将这些标示符记为相应的token。3.返回token流。1.1.1.1.2数据结构说明无1.1.1.1.3接口定义主要在DRLParser中调用。1.1.1.1.4算法见输入/输出项。1.1.1.1.5程序逻辑流程图方法ANTLR3_APIpcDRLLexercDRLLexerNew(pANTLR3_INPUT_STREAMinstream)的程序流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个cDRLLexer对象,检测其方法是否能正确的返回cDRLLexer对象。1.1.2语法分析子模块1.1.2.1DRLParser1.1.2.1.1程序特征描述DRLParser是封装cDRLParser的类,为调用cDRLParser里边的方法提供一个简易的接口。1.1.2.1.2程序功能性能描述第423页共423页 DRLParser是封装cDRLParser的类,为调用cDRLParser里边的方法提供一个简易的接口。1.1.1.1.1输入/输出项这个类主要有以下3个方法TPackageDescr*TDRLParser::parse(stringsourceFile,boolisFile)功能:从sourceFile指定的路径下读取文件,对其进行语法分析生成相应的packageDescr。入口参数:stringsourceFile//文件路径和名称boolisFile//为了区分输入的是文件名还是文本,如果isFile是true,则表示输入的是文件名称返回结果:返回一个TPackageDescr类型的指针主要流程:1.根据输入的文件名,根据文件的内容生成一个Parse,即:编译器2.根据输入的编译器parse生成一个TPackageDescr类型的指针pcDRLParserTDRLParser::getParser(stringsourceFile,boolisFileName)功能:根据输入的文件名,根据文件的内容生成一个编译器Parser入口参数:stringsourceFile//文件路径和名称boolisFile//为了区分输入的是文件名还是文本,如果isFile是true,则表示输入的是文件名称返回结果:返回一个Parser主要流程:根据输入的文件名,根据文件的内容生成一个Parse,即:编译器TPackageDescr*TDRLParser::compile(pcDRLParserparser)功能:第423页共423页 根据输入的编译器parse生成一个TPackageDescr类型的指针。入口参数:pcDRLParserparser//pcDRLParser类型的对象boolisFile//为了区分输入的是文件名还是文本,如果isFile是true,则表示输入的是文件名称返回结果:返回一个TPackageDescr类型的指针主要流程:1.根据输入的文件名,根据文件的内容生成一个Parse,即:编译器2.根据输入的编译器parse生成一个TPackageDescr类型的指针1.1.1.1.1数据结构说明listresults;//定义一个成员为TParserError类型的指针的list。TLocation*location;//定义一个TLocation类型的指针。1.1.1.1.2接口定义在packageBuilder中调用。1.1.1.1.3算法见输入/输出项第423页共423页 1.1.1.1.1程序逻辑流程图1.1.1.1.2测试要点根据输入的DRL文件是否能正确产生了对应的Parser编译器。根据输入的Parser是否能正确产生一个TPackageDescr类型的指针。1.1.1.2cDRLParser1.1.1.2.1程序特征描述TParser是由Antlr工具根据相应的描述文件(cdrl.g文件)自动产生的用于编译处理的类。1.1.1.2.2程序功能性能描述通过对DRL规则文件进行分析,编译产生用于后期处理的PackageDescr数据对象。对DRL进行语法分析的时候,取出每一个语法项的要素,将其存储在packageDescr中。第423页共423页 1.1.1.1.1输入/输出项TPackageDescr*compilation_unit(pcDRLParserparser)功能:对已经加载到这个对象中的字符串进行语法分析,抽取语法要素返回descr。入口参数:pcDRLParserparser//cDRLParser类型的指针。返回结果:返回一个TPackageDescr类型的指针主要流程:1.将整段字符串视为一个compilation_unit,为其new一个packagedescr对象。2.将compilation_unil分解为prolog加多个statement的结构。3.每一个类似于prolog,statement的语法结构又可以分为多个子结构,每一个语法结构都对应一个函数。4.这个函数安装字符串相应的语法结构树形调用所有这些函数。staticvoidprolog(pcDRLParserctx)功能:对drl文件中的prolog部分进行编译。入口参数:pcDRLParserctx//cDRLParser类型的指针。返回结果:无主要流程:1.将一个prolog视为多个package_statement的组合。2.调用package_statement函数分析package_statement,取得每一个package名称。staticvoidstatement(pcDRLParserctx)功能:对drl文件中的每一个statement部分进行编译。第423页共423页 入口参数:pcDRLParserctx//cDRLParser类型的指针。返回结果:无主要流程:1.每一个statement可以是一个rule_attribute、function_import_statement、importstatement、rule等等。2.根据每一个statement代表不同的语法含义调用相应的函数。1.1.1.1.1数据结构说明TParser*//用于指向新创建的TParser*类型的指针,对输出的Drl文件进行处理。TPackageDescr*//经过parser对象处理后产生的AST结构的规则信息存储结构。1.1.1.1.2接口定义在DRLParser中调用。1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法TPackageDescr*compilation_unit(pcDRLParserparser)的程序流程图:第423页共423页 方法staticvoidprolog(pcDRLParserctx)的程序流程图如下:方法staticvoidstatement(pcDRLParserctx)的流程图如下:第423页共423页 1.1.1.1.1测试要点是否正确产生了对应的TParser实例。是否正确编译,并产生了相应的TPackageDescr实例。1.1.1.2AccessorDescr1.1.1.2.1程序特征描述对关键字“Accessor”的存储。1.1.1.2.2程序功能性能描述建立一个类似于哈希表的结构,其中varibleName对应一个成员为TDeclarativeInvokerDescr指针的list。1.1.1.2.3输入/输出项这个类主要有以下5个方法TAccessorDescr::TAccessorDescr(conststringrootVariableName):TDeclarativeInvokerDescr(),variableName(rootVariableName)第423页共423页 功能:自身构造函数,为父类中的成员variableName赋值rootVariableName.入口参数:conststringrootVariableName//为variableName赋值的一个String类型的变量。返回结果:TAccessorDescr类型的对象主要流程:给父类中的成员变量variableName初始化。list&TAccessorDescr::getInvokers()功能:取出这个类实例中的list成员变量。入口参数:无返回结果:返回这个类实例中的list成员变量主要流程:取出这个类实例中的list成员变量。voidTAccessorDescr::addInvoker(TDeclarativeInvokerDescr*accessor)功能:在这个类成员变量list尾部增加一个TDeclarativeInvokerDescr类型的指针。入口参数:TDeclarativeInvokerDescr*accessor//TDeclarativeInvokerDescr类型的一个指针。返回结果:无主要流程:在成员变量list中增加一个值。voidTAccessorDescr::setVariableName(conststringaMethodName)第423页共423页 stringTAccessorDescr::getVariableName()功能:这个类的成员变量variableName的get,set方法。1.1.1.1.1数据结构说明stringvariableName;listinvokers;1.1.1.1.2接口定义无1.1.1.1.3算法主要是这个类的成员变量的get,set方法。1.1.1.1.4程序逻辑流程图方法voidTAccessorDescr::addInvoker(TDeclarativeInvokerDescr*accessor)的逻辑流程图如下:1.1.1.1.5测试要点定义一个AccessorDescr对象,测试其get,set方法是否正确。第423页共423页 1.1.1.1AccumulateDesc1.1.1.1.1程序特征描述对关键字Accumulate的描述。1.1.1.1.2程序功能性能描述对Accumulate关键字属性进行一些get和set方法的操作。1.1.1.1.3输入/输出项这个类主要有以下29个方法,其中有1个构造函数,1个析构函数,20个对这个类10成员变量的get,set方法,3个空方法,还有4个其它的方法。TAccumulateDescr::TAccumulateDescr():TPatternSourceDescr(),externalFunction(false)功能:自身构造函数入口参数:无返回结果:TAccumulateDescr类型的对象主要流程:无boolTAccumulateDescr::isSinglePattern()功能:判断此对象中的TBaseDescr类型的input属性的类型与TPatternDescr类型是否一致,如果一致返回true,如果不一致,返回false。入口参数:无第423页共423页 返回结果:返回bool类型的值。主要流程:判断此对象中的TBaseDescr类型的input属性的类型与TPatternDescr类型是否一致,如果一致返回true,如果不一致,返回false。boolTAccumulateDescr::hasValidInput()功能:判断此对象中的TBaseDescr类型的input属性是否是null。入口参数:无返回结果:返回一个bool类型的值,如果input是null,则返回fasle;如果不是null则返回true。主要流程:Return(input!=Null)TPatternDescr*TAccumulateDescr::getInputPattern()功能:判断此对象中的TBaseDescr类型的input属性的类型与TPatternDescr类型是否一致,如果一致,则返回input,如果不一致,则返回null。入口参数:无返回结果:返回一个TPatternDescr类型的指针。主要流程:判断此对象中的TBaseDescr类型的input属性的类型与TPatternDescr类型是否一致,如果一致,则返回input,如果不一致,则返回null。第423页共423页 stringTAccumulateDescr::toString()功能:以string类型的形式输出input这个成员变量中的值。入口参数:无返回结果:返回一个string类型的值。主要流程:返回一个input所指对象的的字符串形式。1.1.1.1.1数据结构说明TBaseDescr*input;stringinitCode;stringactionCode;stringreverseCode;stringresultCode;vectordeclarations;stringclassName;//类名称boolexternalFunction;stringfunctionIdentifier;stringexpression;1.1.1.1.2接口定义无第423页共423页 1.1.1.1.1算法见输入输出。1.1.1.1.2程序逻辑流程图方法boolTAccumulateDescr::isSinglePattern()的程序流程图如下:方法TPatternDescr*TAccumulateDescr::getInputPattern()的程序流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个TAccumulateDescr对象,测试其get,set方法以及4个其它方法是否正确。1.1.1.2TAndDescr1.1.1.2.1程序特征描述对drl文件中的if语句中的AND关键字的描述。1.1.1.2.2程序功能性能描述对and关键字的描述,具体表现为对类对象的属性list中的成员的增加和插入。1.1.1.2.3输入/输出项这个类主要有以下3个方法,其中一个是析构函数,另外2个如下:voidTAndDescr::addOrMerge(TBaseDescr*baseDescr)功能:在这个类对象的属性list的尾部增加一项baseDescr。入口参数:TBaseDescr*baseDescr//一个TBaseDescr类型的指针返回结果:无主要流程:1.判断参数中的baseDescr指向的对象的类型是否与TAndDescr类型一致。2.如果一致,则将这个对象中的Descrs中的每一项分别加入到TAndDescr对象的属性descrs的尾部;如果不一致,则直接加入到这个对象的尾部。voidTAndDescr::insertDescr(intindex,TBaseDescr*aBaseDescr)功能:第423页共423页 将aBaseDescr插入到属性descrs中的指定位置。入口参数:无返回结果:无主要流程:根据index指定的descrs中的位置,插入到属性descrs中。1.1.1.1.1数据结构说明listdescrs;//descrs中存放drl文件中的if项中的and两边的条件。1.1.1.1.2接口定义无1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法voidTAndDescr::addOrMerge(TBaseDescr*baseDescr)的程序流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个TAndDescr对象,测试其addOrMerge和insertMerge方法是否正确。1.1.1.2CollectDescr1.1.1.2.1程序特征描述对关键字collect的描述。1.1.1.2.2程序功能性能描述对关键字collect的所需属性的成员变量的的get和set操作。第423页共423页 1.1.1.1.1输入/输出项这个类主要有以下12个方法,其中1个构造函数,1个析构函数,1个把属性的值转换为字符串的方法,3个空方法,其它都为get,set方法。TCollectDescr::TCollectDescr():TPatternSourceDescr(),inputPattern(NULL),classMethodName("")功能:自身构造函数,为父类中的成员inputPattern赋值NULL.同时为父类中的成员classMethodName赋值为“”。入口参数:无返回结果:TCollectDescr类型的对象主要流程:给父类中的成员变量inputPattern和classMethodName初始化,同时初始化自己。voidTCollectDescr::setInputPattern(TPatternDescr*aInputPattern)功能:对类实例中的成员变量inputPattern赋值。入口参数:TPatternDescr*aInputPattern//一个TPatternDescr类型的指针返回结果:无主要流程:对类实例中的成员变量inputPattern赋值。TPatternDescr*TCollectDescr::getInputPattern()功能:取出类实例中的成员变量inputPattern的值入口参数:TPatternDescr类型的一个指针。第423页共423页 返回结果:无主要流程:取出类实例中的成员变量inputPattern的值。stringTCollectDescr::toString()功能:这个类的成员变量variableName中的input和objectType属性的值以字符串的形式展现出来。入口参数:无返回结果:String类型的字符串主要流程:这个类的成员变量variableName中的input和objectType属性的值以字符串的形式展现出来。1.1.1.1.1数据结构说明TPatternDescr*inputPattern;stringclassMethodName;//类的方法名称1.1.1.1.2接口定义无1.1.1.1.3算法主要是这个类的成员变量的get,set方法。1.1.1.1.4程序逻辑流程图无第423页共423页 1.1.1.1.1测试要点定义一个CollectDescr对象,测试其get,set方法是否正确。1.1.1.2DescrFactory1.1.1.2.1程序特征描述Descrs工厂,是在运用Descrs时需要创建的。1.1.1.2.2程序功能性能描述在这个工厂中创建在运用Descrs时所需要的一些基本信息。1.1.1.2.3输入/输出项这个类主要有以下12个方法,它们是要建立12个类的对象。即:每一个方法创建一个类对象。要创建的类对象分别是TPackageDescr、TGlobalDescr、TFromDescr、TAccumulateDescr、TCollectDescr、TForallDescr、TImportDescr、TFunctionImportDescr、TQueryDescr、TFunctionDescr、TFactTemplateDescr、TFieldTemplateDescr。下面列举2个方法,由于形式一样,不在一一列举。TPackageDescr*TDescrFactory::createPackage(conststringpackageName)功能:创建一个package对象。.入口参数:conststringpackageName//初始化package的名称返回结果:TPackageDescr类型的一个指针主要流程:创建一个package对象,并返回。TGlobalDescr*TDescrFactory::createGlobal()第423页共423页 功能:创建一个global对象。.入口参数:无返回结果:TGlobalDescr类型的一个指针主要流程:创建一个global对象,并返回。1.1.1.1.1数据结构说明无1.1.1.1.2接口定义无1.1.1.1.3算法将输入/输出项1.1.1.1.4程序逻辑流程图无1.1.1.1.5测试要点定义一个DescrFactory对象,测试其create方法是否正确。第423页共423页 1.1.1.1ExistsDescr1.1.1.1.1程序特征描述对Exists关键字的描述。1.1.1.1.2程序功能性能描述对Exists关键字处理时,所需要的descrs属性的操作。1.1.1.1.3输入/输出项这个类主要有以下2个方法,其中一个析构函数,另一个如下:voidTExistsDescr::addOrMerge(TBaseDescr*baseDescr)功能:对成员变量descrs值的增添。入口参数:TBaseDescr*baseDescr//TBaseDescr类型的一个指针,将它增添到Descrs中。返回结果:无主要流程:1.首先判断参数中的baseDescr的类型是否与TExistsDescr的指针类型一致。2.如果一致,则将baseDescr中的每一项分别加入到descrs中。3.如果不一致,则将baseDescr直接加入到descrs的尾部。1.1.1.1.4数据结构说明listdescrs;第423页共423页 1.1.1.1.1接口定义无1.1.1.1.2算法见输入/输出项1.1.1.1.3程序逻辑流程图方法voidTExistsDescr::addOrMerge(TBaseDescr*baseDescr)的程序流程图如下:1.1.1.1.4测试要点定义一个ExistsDescr对象,然后定义一个TBaseDescr类型的指针去测试其get,set方法是否正确。第423页共423页 1.1.1.1TFactTemplateDescr1.1.1.1.1程序特征描述对TFieldTemplateDescr类型数据的析构。1.1.1.1.2程序功能性能描述对TFieldTemplateDescr类型数据的析构,用来释放内存。1.1.1.1.3输入/输出项这个类主要有以下1个方法,如下:TFactTemplateDescr::~TFactTemplateDescr()功能:析构函数入口参数:无返回结果:无主要流程:1.从field中取出TFactTemplateDescr类型的数据。2.将其删除掉,释放空间。1.1.1.1.4数据结构说明无1.1.1.1.5接口定义无第423页共423页 1.1.1.1.1算法见输入/输出项。1.1.1.1.2程序逻辑流程图无1.1.1.1.3测试要点定义一个AccessorDescr对象,测试其get,set方法是否正确。1.1.1.2FieldConstraintDescr1.1.1.2.1程序特征描述对关键字FieldConstrain的描述。1.1.1.2.2程序功能性能描述对drl文件中关键字“FileConstrain”分析时所需要的成员属性的具体操作。1.1.1.2.3输入/输出项这个类主要有以下3个方法,2个构造函数,1个析构函数,还有一个get函数。具体如下:TFieldConstraintDescr::TFieldConstraintDescr()功能:自身构造函数.入口参数:无返回结果:TFieldConstraintDescr类型的对象主要流程:第423页共423页 定义了一个TRestrictionConnectiveDescr类型的对象。TFieldConstraintDescr::TFieldConstraintDescr(conststringaFieldName)功能:构造函数入口参数:conststringaFieldName//给成员变量fieldName初始化的形参。返回结果:返回一个TFieldConstraintDescr类实例主要流程:1.给成员编号fieldName初始化。2.定义一个定义了一个TRestrictionConnectiveDescr类型的对象list&TFieldConstraintDescr::getRestrictions()功能:这类中成员变量restrictions的get方法。入口参数:无返回结果:返回类中成员变量restrictions的值。主要流程:返回类中成员变量restrictions的值。1.1.1.1.1数据结构说明stringfieldName;TRestrictionConnectiveDescr*restriction;第423页共423页 1.1.1.1.1接口定义无1.1.1.1.2算法见输入/输出项。1.1.1.1.3程序逻辑流程图无1.1.1.1.4测试要点定义一个FieldConstraintrDescr对象,测试其构造函数和get方法是否正确。1.1.1.2ForallDescr1.1.1.2.1程序特征描述对关键字Forall的描述。1.1.1.2.2程序功能性能描述对关键字Forall属性的get,set操作。1.1.1.2.3输入/输出项这个类主要有以下2个方法。TForallDescr::~TForallDescr()功能:自身构造函数。入口参数:无第423页共423页 返回结果:TForallDescr类型的对象主要流程:无list&TForallDescr::getDescrs()功能:取出这个类实例成员变量Descrs的值。入口参数:无返回结果:返回这个类实例成员变量Descrs的值。主要流程:取出这个类实例成员变量Descrs的值。1.1.1.1.1数据结构说明stringvariableName;listinvokers;1.1.1.1.2接口定义无1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图无第423页共423页 1.1.1.1.1测试要点定义一个ForallDescr对象,测试其构造函数和get方法是否正确。1.1.1.2FromDescr1.1.1.2.1程序特征描述对关键字from的描述。1.1.1.2.2程序功能性能描述对关键字from的属性的get,set操作以及构造函数。1.1.1.2.3输入/输出项这个类主要有以下8个方法,1个构造函数,一个析构函数,3个get,set方法,3个空方法。TFromDescr::TFromDescr():TPatternSourceDescr(),dataSource(NULL)功能:自身构造函数入口参数:无返回结果:TFromDescr类型的对象主要流程:1.给父类中的成员变量dataSource初始化NULL值。2.定义一个自己的对象。TDeclarativeInvokerDescr*TFromDescr::getDataSource()功能:第423页共423页 取出这个类实例中的datasource成员变量。入口参数:无返回结果:返回这个类实例中的datasource成员变量主要流程:取出这个类实例中的datasource成员变量。voidTFromDescr::setDataSource(TDeclarativeInvokerDescr*aDataSource)功能:给类中的成员变量datasource赋值。入口参数:TDeclarativeInvokerDescr*aDataSource)//TDeclarativeInvokerDescr类型的一个指针。返回结果:无主要流程:给类中的成员变量datasource赋值。listTFromDescr::getDescrs()功能:返回这个类中的成员变量descrs的get方法。入口参数:无返回结果:List类型的descrs。主要流程:返回这个类中的成员变量descrs的get方法。第423页共423页 1.1.1.1.1数据结构说明TDeclarativeInvokerDescr*dataSource;1.1.1.1.2接口定义无1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图无1.1.1.1.5测试要点定义一个FromDescr对象,测试其构造函数以及get,set方法是否正确。1.1.1.2LiteralRestrictionDescr1.1.1.2.1程序特征描述对关键字LiteralRestriction的描述。1.1.1.2.2程序功能性能描述对关键字LiteralRestriction的所需要的属性的具体操作。1.1.1.2.3输入/输出项第423页共423页 这个类主要有以下7个方法,其中1个构造函数,1个析构函数,4个get,set方法,1个toString方法。TLiteralRestrictionDescr::TLiteralRestrictionDescr(conststringaEvaluator,conststringaText,constintaType):TRestrictionDescr(),evaluator(aEvaluator),type(aType)功能:自身构造函数,为父类中的成员variableName赋值rootVariableName.入口参数:conststringrootVariableName//为variableName赋值的一个String类型的变量。返回结果:TAccessorDescr类型的对象主要流程:给父类中的成员变量variableName初始化。TFieldInfo*TLiteralRestrictionDescr::getValue()功能:根据类成员变量的type的类型,初始化一个TFieldInfo类型的指针。入口参数:无返回结果:返回TFieldInfo类型的一个指针主要流程:a)判断此类中type的类型。b)如果是number_type类型,再判断this->getText()的类型,如果是isNUmber,则new一个TFieldInfo类型的指针,其中参数为“double”和getText();如果不是isNumber,则new一个TFieldInfo类型的指针,其中参数为“string”和getText();c)如果type的类型是boolean类型,则new一个TFieldInfo类型的指针,其中参数为“Boolean”和getText()==null;d)其它的type类新,则new一个TFieldInfo类型的指针,其中参数为“String”和getText();第423页共423页 stringTLiteralRestrictionDescr::toString()功能:用字符串的形式返还成员变量中type和evaluator的值。入口参数:无返回结果:返回成员变量中type和evaluator的字符串形式。主要流程:返回成员变量中type和evaluator的字符串形式。1.1.1.1.1数据结构说明stringevaluator;inttype;1.1.1.1.2接口定义无1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法TFieldInfo*TLiteralRestrictionDescr::getValue()的程序逻辑流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个LiteralRestrictionDescr对象,测试其get,set方法是否正确。1.1.1.2Localtion1.1.1.2.1程序特征描述本地多个关键字内容的描述。第423页共423页 1.1.1.1.1程序功能性能描述建立一个类似于哈希表的结构,即一个map结构,key对应的是关键字的名称,value对应的是内容。1.1.1.1.2输入/输出项这个类主要有以下1个方法stringTLocation::getProperty(stringname)功能:根据name的值,从map中取出对应的value值,即:关键字对应的内容。入口参数:Stringname//关键字的名称。返回结果:String类型的内容。主要流程:根据name的值,从map中取出对应的value值,即:关键字对应的内容。1.1.1.1.3数据结构说明inttype;mapproperties;1.1.1.1.4接口定义无1.1.1.1.5算法见输入/输出项。第423页共423页 1.1.1.1.1程序逻辑流程图方法stringTLocation::getProperty(stringname)的程序逻辑流程图如下:1.1.1.1.2测试要点定义一个Location对象,测试其getProperty方法是否正确。1.1.1.2NotDescr1.1.1.2.1程序特征描述对关键字not的描述。1.1.1.2.2程序功能性能描述对关键字not所需熟悉的描述以及操作。1.1.1.2.3输入/输出项第423页共423页 这个类主要有以下2个方法,其中1个是析构函数,1个是addOrMerge()方法。voidTNotDescr::addOrMerge(TBaseDescr*baseDescr)功能:将not后边的内容加入到成员变量Descrs中。.入口参数:TBaseDescr*baseDescr//TBaseDescr类型的一个指针。返回结果:无主要流程:1.New一个TNotDescr类型的指针temp;2.判断Temp类型和参数baseDescr类型一致,如果一致,取出baseDescr中的Descrs值,把Descrs中的每一项分别加入到NotDescrs中的属性descrs中。3.如果不一致,直接把Descrs的值加入到NotDescrs中的属性descrs中。4.删除Temp对象。1.1.1.1.1数据结构说明stringvariableName;listinvokers;1.1.1.1.2接口定义无1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法voidTNotDescr::addOrMerge(TBaseDescr*baseDescr)的程序逻辑流程图第423页共423页 1.1.1.1.1测试要点定义一个NotDescr对象,测试其addNotMerge方法是否正确。1.1.1.2OrDescr1.1.1.2.1程序特征描述对关键字or的描述。1.1.1.2.2程序功能性能描述对关键字or所需熟悉的描述以及操作。第423页共423页 1.1.1.1.1输入/输出项这个类主要有以下3个方法,其中1个是析构函数,2其它方法,具体如下:voidTOrDescr::insertDescr(intindex,TBaseDescr*aBaseDescr)功能:将or两边后边的内容加入到成员变量Descrs的指定位置中。.入口参数:TBaseDescr*baseDescr//TBaseDescr类型的一个指针。返回结果:无主要流程:a)取出本类成员变量中的Descr信息。b)把参数中的aBaseDescr的值插入到指定的位置上。voidTOrDescr::addOrMerge(TBaseDescr*baseDescr)功能:将or两边后边的内容加入到成员变量Descrs中。.入口参数:TBaseDescr*baseDescr//TBaseDescr类型的一个指针。返回结果:无主要流程:1.New一个TOrDescr类型的指针temp;2.判断Temp类型和参数baseDescr类型一致,如果一致,取出baseDescr中的Descrs值,把Descrs中的每一项分别加入到NotDescrs中的属性descrs中。3.如果不一致,直接把Descrs的值加入到NotDescrs中的属性descrs中。4.删除Temp对象。1.1.1.1.2数据结构说明stringvariableName;listinvokers;第423页共423页 1.1.1.1.1接口定义无1.1.1.1.2算法见输入/输出项。1.1.1.1.3程序逻辑流程图1.1.1.1.4测试要点定义一个OrDescr对象,测试其insert和add方法是否正确。第423页共423页 1.1.1初始化Dialect信息子模块1.1.1.1CplusplusDialect1.1.1.1.1程序特征描述相当于一个辅助类,他们是用来帮助biuld操作的方法的集合。在这里只生产了函数。1.1.1.1.2程序功能性能描述相当于一个辅助类,他们是用来帮助biuld操作的方法的集合。在这里只生产了函数,在整个build过程中,需要有一些c++特性的方法,都写着这个类中。1.1.1.1.3输入/输出项TCplusplusDialect::TCplusplusDialect()功能:自身构造函数。入口参数:无。返回结果:TCplusplusDialect类型的对象。主要流程:定一些对象和简单类型的变量。voidTCplusplusDialect::init(TPackageBuilder&builder)功能:对TPackageBuilder类型数据的初始化。入口参数:TPackageBuilder&builder//TPackageBuilder类型的引用。返回结果:第423页共423页 无主要流程:1.从builder中取出package赋给pkg。2.调用package的init方法。3.调用initBuilder()方法。voidTCplusplusDialect::init(TPackage*aPkg)功能:对TPackage类型数据的初始化。入口参数:TPackage*aPkg//TPackage类型的引用。返回结果:无主要流程:1.对errorHandlers中的数据清除。2.对results中的数据进行清除。3.对generatedClassList进行清除。4.初始化一个TMemoryResourceReader对象。voidTCplusplusDialect::initBuilder()功能:对builder类型数据进行初始化。入口参数:无。返回结果:无主要流程:1.初始化一个TCompilerGroupElementBuilder类型的变量gebuilder。2.在builders的map中放入TAndDescr、TORDescr、TNotDescr、TExsistDescr类型对应的builder类型都是TCompilerGroupElementBuilder类型。3.在builders的map中放入TPatternDescr类型的builder为patternBuilder。4.在builders的map中放入TEvalDescr类型的Builder是evalBuilder。第423页共423页 voidTCplusplusDialect::init(TRuleDescr*ruleDescr)功能:对rule类型数据进行初始化。入口参数:TRuleDescr*ruleDescr//TRuleDescr类型的指针。返回结果:无主要流程:1.根据package的name和ruleDescr的name组成形成ruleclassName。2.设置ruledescr的ruleclassName。3.设置ruledescr的dialect的值。TAnalysisResult*TCplusplusDialect::analyzeExpression(TRuleBuildContext*context,TBaseDescr*descr,stringcontent)功能:对一些语句编译的封装。。入口参数:TRuleBuildContext*context//操作的内容。TBaseDescr*descry//stringcontent//返回结果:无主要流程:1.从context中的去处identifier。2.根据indetifier和context的值去调用analizer的analyzeExpression方法,并返回。TAnalysisResult*TCplusplusDialect::analyzeBlock(TRuleBuildContext*context,TBaseDescr*descr,stringtext)功能:第423页共423页 对一些语句编译的封装。。入口参数:TRuleBuildContext*context//操作的内容。TBaseDescr*descry//stringtext//返回结果:无主要流程:1.从generatedClassList中的取出类的名称全部放入动态数组vector的classes中。2.调用dumpinclude方法,把include的文件生成到指定的文件夹下。3.调用dumpresource方法,把resource的文件生成到指定的文件夹下。4.清空generatedClassList中的数据。voidTCplusplusDialect::compileAll()功能:将形成的include文件已经.c文件输出到指定的路径下。入口参数:无返回结果:无主要流程:1.从context中的去处identifier。2.根据indetifier和context的值去调用analizer的analyzeExpression方法,并返回。voidTCplusplusDialect::addRule(TRuleBuildContext*context)功能:把规则加入进来。入口参数:TRuleBuildContext*context//操作的内容。返回结果:无主要流程:第423页共423页 1.定义一个string类型的methodText变量。2.将context中的关于method中的东西统统到加入到methodText中。3.调用addClassCompileTask方法将类中的include和方法体都存放在TMemoryResourceReader中。4.定义一个string类型的text变量。5.将context中的关于invoker中的东西统统都加入到text中。6.调用addClassCompileTask方法将invoker中的include和方法体都存放在TMemoryResourceReader中。1.1.1.1.1数据结构说明vector>boundIdentifiers;listidentifiers;maplocalVariables;listnotBoundedIdentifiers;listmodifyBlocks;1.1.1.1.2接口定义被各种需要存储语句编译结果的地方调用。1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法voidTCplusplusDialect::init(TPackageBuilder&builder)的程序逻辑流程图如下:第423页共423页 方法voidTCplusplusDialect::init(TPackage*aPkg)的程序逻辑流程图如下:方法voidTCplusplusDialect::initBuilder()的程序逻辑流程图如下:第423页共423页 方法voidTCplusplusDialect::init(TRuleDescr*ruleDescr)的程序逻辑流程图如下:方法TAnalysisResult*TCplusplusDialect::analyzeExpression(TRuleBuildContext*context,TBaseDescr*descr,stringcontent)的程序逻辑流程图如下:第423页共423页 方法TAnalysisResult*TCplusplusDialect::analyzeBlock(TRuleBuildContext*context,TBaseDescr*descr,stringtext)的程序逻辑流程图如下:方法voidTCplusplusDialect::compileAll()的程序逻辑流程图如下:第423页共423页 方法voidTCplusplusDialect::addRule(TRuleBuildContext*context)的程序逻辑流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个CplusplusAnalysisRes类型的对象,检测其get和set方法是否正确。1.1.1.2CplusplusDialectConfiguration1.1.1.2.1程序特征描述为建立dialect所要用到的配置信息。1.1.1.2.2程序功能性能描述为建立dialect所要用到的配置信息。1.1.1.2.3输入/输出项这个类中的方法是构造函数,析构函数,剩下的全部为对其成员变量的get,set方法。TCplusplusDialectConfiguration::TCplusplusDialectConfiguration()功能:构造函数。入口参数:无。返回结果:TCplusplusDialectConfiguration类型的对象。主要流程:自身构造函数。1.1.1.2.4数据结构说明无第423页共423页 1.1.1.1.1接口定义1.在CplusplusDialect中的init方法中调用。2.在packageBuilderconfiguration中的buildDialectConfigurationMap方法中调用。1.1.1.1.2算法见输入/输出项。1.1.1.1.3程序逻辑流程图无1.1.1.1.4测试要点定义一个CplusplusDialectConfiguration类型的对象,检测其get和set方法是否正确。1.1.1.2DialectRegistry1.1.1.2.1程序特征描述在多个dialect中才有用,是所有dialect的集合。1.1.1.2.2程序功能性能描述在多个dialect中才有用,是所有dialect的集合,做一些对多个dialect统一管理,统一初始化,编译等操作。1.1.1.2.3输入/输出项voidTDialectRegistry::initAll(TPackageBuilder&builder)第423页共423页 功能:将每一个dialect都进行对builder的初始化。入口参数:TPackageBuilder&builder//TPackageBuilder类新的引用。返回结果:无。主要流程:用for循环取出每一个dialect,并对他们进行builder的初始化。list&TDialectRegistry::addResults(list&aList)功能:把每一个dialect中的错误信息都存放到aList中。入口参数:list&aLis//存储错误信息的list。返回结果:List类型。主要流程:1.用for循环取出每一个dialect,并将他们中的错误信息加入到aList中。2.返回aList。1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在3个类中被调用。1.在packageBuilder中被调用。2.在packageBuilderConfiguration中被调用。第423页共423页 1.在ruleBuildercontext中被调用。1.1.1.1.1算法见输入/输出项。1.1.1.1.2程序逻辑流程图方法voidTDialectRegistry::initAll(TPackageBuilder&builder)的程序逻辑流程图如下:1.1.1.1.3测试要点定义一个CplusplusAnalysisRes类型的对象,检测其get和set方法是否正确。1.1.2创建新的Package子模块第423页共423页 1.1.1.1AbstractCplusplusBuilder1.1.1.1.1程序特征描述这个类是为将drl文件生成两个.c文件做准备工作。1.1.1.1.2程序功能性能描述这个类是将drl文件生成两个.c文件所需的信息存放到TRuleBuildContext中。1.1.1.1.3输入/输出项这个类主要有以下4个方法。TGeneratContextTAbstractCplusplusBuilder::createVariableContext(stringclassName,stringtext,TRuleBuildContext*context,vector&declarations,vector&localDeclarations,list&globals)功能:这个函数主要是封装一些drl文件中可执行部分的程序,将他们封装到TGeneratContext中。入口参数:stringclassName//要生成的.c文件的类名称stringtext//drl文件中可执行部分的内容TRuleBuildContext*context//drl文件中的一部分内容vector&declarations//声明信息vector&localDeclarations//本地声明信息list&globals//全局变量信息返回结果:TGeneratContext类型的对象。主要流程:第423页共423页 1.初始化TGeneratContext类。2.将className,declarations,localdeclarations的值付给TGeneratContext变量的具体的值。3.返回TGeneratContext对象。stringTAbstractCplusplusBuilder::generatMethod(stringruleTemplate,TGeneratContext&vars,TDialect*dialect)功能:这个函数主要是生成规则类中的方法。入口参数:stringruleTemplate//规则模板类型。TGeneratContext&vars//这个里边包含函数的内容以及函数的名称参数返回类型。TDialect*dialect//返回结果:string类型。主要流程:1.定义一个string类型的generatedMethod。2.根据ruleTemplate这个规则模板类型确定函数的内容的形式。3.从vars取出方法的名称、参数、函数体等加入到generatedMethod中,构成一个方法。4.返回generatedMethod。stringTAbstractCplusplusBuilder::generatInvoker(stringinvokerTemplate,TGeneratContext&vars,TDialect*dialect)功能:这个函数主要是生产规则invoker类中的方法。入口参数:stringinvokerTemplate//invoker类规则模板类型。TGeneratContext&vars//invoker类中的方法的一些属性。TDialect*dialect//对话。第423页共423页 返回结果:String类型。主要流程:1.定义一个string类型的generatedInvoker。2.根据invokerruleTemplate这个规则模板类型确定函数的内容的形式。3.从vars取出方法的名称、参数、函数体等加入到generatedInvoker中,构成一个方法。4.返回generatedInvoker。voidTAbstractCplusplusBuilder::generatTemplates(stringruleTemplate,stringinvokerTemplate,TRuleBuildContext*context,stringclassName,TGeneratContext&vars,TObject*invokerLookup,TBaseDescr*descrLookup)功能:这个函数主要是将mothods和invoker、invokerlookup、descrlookup封装到context中。入口参数:stringruleTemplate//规则模板类型stringinvokerTemplate//invoker规则模板类型TRuleBuildContext*context//所有的内容。stringclassName//类名。TGeneratContext&vars//放规则类和规则invoker类中的方法的一些属性。TObject*invokerLookup//TBaseDescr*descrLookup//返回结果:无主要流程:1.给Context的mothods中赋值,它调用generateMothod方法。2.给Context的invokers中赋值,它调用generateInvoker方法。2.给Context的invokerslookup中赋值。3.给Context的descrlookup中赋值。第423页共423页 1.1.1.1.1数据结构说明stringmethodName;stringpackage;stringruleClassName;stringinvokerClassName;stringtext;stringexpression;boolreadLocalsFromTuple;vectordeclarations;vectordeclarationTypes;vectorlocalDeclarations;vectorlocalDeclarationTypes;vectorindexs;vectornotPatterns;1.1.1.1.2接口定义被CplusplusAnalysisResult中的build方法调用。1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法createVariableContext的程序逻辑流程图如下:第423页共423页 方法generateMethod的程序逻辑流程图如下:第423页共423页 s方法createInvoker的程序逻辑流程图如下:第423页共423页 方法createTemplate的程序逻辑流程图如下:第423页共423页 1.1.1.1.1测试要点编写一个AbstractCplusplusBuider类,测试其createtemplete方法。1.1.1.2CompilerGroupElementBuilder1.1.1.2.1程序特征描述基于Builder模式设计的过程处理类,处理规则(Rule)中Pattern的上一级的元素。1.1.1.2.2程序功能性能描述对GroupElement类型的元素进行编译。第423页共423页 1.1.1.1.1输入/输出项TRuleConditionElement*TCompilerGroupElementBuilder::build(TRuleBuildContext*context,TBaseDescr*descr,TPattern*prefixPattern)功能:这个函数主要是对groupelement类型的descr中的数据进行编译。入口参数:TRuleBuildContext*context//将groupelement类型的descr中的数据进行编译后存入context中。TBaseDescr*descr//用于存放groupelement类型的元素。TPattern*prefixPattern//groupelement类型的底层Tpattern的类型。返回结果:TRuleConditionElement类型的对象。主要流程:1.定义一个TConditionalElementDescr对象的指针cedescr。2.定义一个TGroupElement类型的指针ge,并初始化它的groupelement的值为cedescr。3.循环从cedescr中取一个值放入TRuleConditionBuilder对象child中。4.根据child类型取出相应的builder。5.找builder的相应的build方法去执行。1.1.1.1.2数据结构说明无1.1.1.1.3接口定义无1.1.1.1.4算法见输入/输出项第423页共423页 1.1.1.1.1程序逻辑流程图Build方法的程序逻辑流程图:1.1.1.1.2测试要点定义一个CompilerGroupElementBuilder对象,测试其build方法是否正确。第423页共423页 1.1.1.1CompilerPatternBuilder1.1.1.1.1程序特征描述基于Builder模式设计的过程处理类,处理规则(Rule)中Pattern一级的元素,将pattern分成若干个constraints,再将constraints分成若干个restraint来处理。1.1.1.1.2程序功能性能描述基于Builder模式设计的过程处理类,处理规则(Rule)中Pattern一级的元素,将pattern分成若干个constraints,再将constraints分成若干个restraint来处理。即:在pattern、constraints和restraint类中分别都有build方法。1.1.1.1.3输入/输出项TRuleConditionElement*TCompilerPatternBuilder::build(TRuleBuildContext*context,TBaseDescr*descr,TPattern*prefixPattern)功能:这个函数主要是对pattern类型的descr中的数据进行编译,这个函数是主入口。入口参数:TRuleBuildContext*context//将pattern类型的descr中的数据进行编译后存入context中。TBaseDescr*descr//用于存放pattern类型的元素。TPattern*prefixPattern//pattern类型的底层Tpattern的类型。返回结果:TRuleConditionElement类型的对象。主要流程:1.定义一个string类型的userProvidedClass并赋值为descr中的objecttype的值。2.定义一个TGroupElement类型的指针ge,并初始化它的groupelement的值为cedescr。3.定义一个objecttype,调用objecttype的构造函数,参数是userProvidedClass。4.根据patternDescr中的Identifier的值是否为“”,然后new一个TPattern类型的数据。第423页共423页 5.把pattern的值放到context对应的buildstack中。6.循环,将descr中的的每一项都去调用buildConstraint方法。7.将context中的resource中的值取出,然后重新封装后再放入pattern中。8.返回pattern对象。VoidTCompilerPatternBuilder::buildConstraint(TRuleBuildContext*context,TPattern*pattern,TBaseDescr*constraint,TAbstractCompositeConstraint*container)功能:这个函数主要是对pattern类型的descr中的数据进行编译,这个函数是主入口。入口参数:TRuleBuildContext*context//将pattern类型的descr中的数据进行编译后存入context中。TPattern*pattern//用于存放pattern类型的元素。TBaseDescr*constraint//pattern类型的底层Tpattern的类型。TAbstractCompositeConstraint*container//Constraint容器。返回结果:无主要流程:a)判断constraint的类型,如果它的类型是TFieldBindingDescr、TFieldConstraintDescr、TPredicateDescr,则直接执行这3个类对应的build方法。b)如果constraint的类型是TAndDescr类型,则对于reDescrs中的每一项分别buildConstraint。c)将步骤2的结果都放入container中。d)如果constraint的类型是TOrDescr类型,方法类似于步骤2和步骤3.TCompilerPatternBuilder::build(TRuleBuildContext*context,第423页共423页 TPattern*pattern,TFieldBindingDescr*fieldBindingDescr)功能:这个函数主要是对pattern增加declaration的值。入口参数:TRuleBuildContext*context//TPattern*pattern//被操作的pattern。TFieldBindingDescr*fieldBindingDescr//初始化declaration需要的descr。返回结果:TRuleConditionElement类型的对象。主要流程:1.定义一个TFieldExtractor类型的指针extractor,赋值为getFieldExtractor的值。2.根据extractor的值和fieldBindingDescr初始化一个Declaration的值。3.将Declaration的值赋值给pattern中的declaration。voidTCompilerPatternBuilder::build(TRuleBuildContext*context,TPattern*pattern,TFieldConstraintDescr*fieldConstraintDescr,TAbstractCompositeConstraint*container)功能:根据fieldConstraintDescr中的fieldName的内容和生成的extractor一起初始化constraint,并将constraint的值存入context中。入口参数:TRuleBuildContext*context//将pattern类型的descr中的数据进行编译后存入context中。TPattern*pattern//用于存放pattern类型的数据。TFieldConstraintDescr*fieldConstraintDescr//TFieldConstraintDescr类型对象指针,描述fieldconstraint的一些属性。TAbstractCompositeConstraint*container//一个容器。返回结果:无主要流程:第423页共423页 1.解析TFieldConstraintDescr中的fieldname的值。2.根据fieldname的值通过方法getFieldExtractor生产extractor。3.根据extractor的值和一些其它属性的值,通过方法createRestriction生成restriction。4.根据restriction类型的不同,选择初始化类TMultiRestrictionFieldConstraint、TLiteralConstraint、TVariableConstraint、TReturnValueConstraint中的一种生成一个constraint。5.将constraint的值加入到pattern中。voidTCompilerPatternBuilder::build(TRuleBuildContext*context,TPattern*pattern,TPredicateDescr*predicateDescr,TAbstractCompositeConstraint*container)功能:这个函数主要是对TPredicateBuilder类的build最准备,并执行TPredicateBuilder中的build方法。入口参数:TRuleBuildContext*context//将pattern类型的descr中的数据进行编译后存入context中。TPattern*pattern//用于存放pattern类型的数据。TPredicateDescr*predicateDescr//TFieldConstraintDescr类型对象指针,描述declaration的一些属性。TAbstractCompositeConstraint*container//一个容器。返回结果:无主要流程:1.调用context中的dialect中的analyzeExpression方法返回一个TAnalysisResult类型的对象指针analysis。2.从analysis中取出boundidentifier类型为pattern的数据封装到factDeclarations中;把类型不是pattern的封装到tupleDeclarations中,同时封装到reFactDeclarations中。3.用reFactDeclarations和tupleDeclarations、requiredGlobals做参数初始化一个predicateConstraint对象。4.把predicateConstraint加入到container中。第423页共423页 5.定义一个TPredicateBuilder对象builder,并把context中的dialect中的PredicateBuilder。6.执行builder的build方法。TLiteralRestriction*TCompilerPatternBuilder::buildRestriction(TRuleBuildContext*context,TFieldExtractor*extractor,TFieldConstraintDescr*fieldConstraintDescr,TLiteralRestrictionDescr*literalRestrictionDescr)功能:这个函数主要是根据field,evaluator,extractor的值去初始化一个TLiteralRestriction类型的对象并返回。入口参数:TRuleBuildContext*context//将pattern类型的descr中的数据进行编译后存入context中。TFieldExtractor*extractor//TFieldConstraintDescr*fieldConstraintDescr//用于存储field类型的属性。TLiteralRestrictionDescr*literalRestrictionDescr//literal类型的属性的类对象指针。返回结果:TRuleConditionElement类型的对象。主要流程:1.定义一个TEvaluator类型的指针evaluator并赋值为getEvaluator(context,literalRestrictionDescr,extractor->getValueType(),literalRestrictionDescr->getEvaluator())的值。2.用extarcrot、evaluator作为参数定义一个TLiteralRestriction的对象,并返回。TRestriction*TCompilerPatternBuilder::buildRestriction(TRuleBuildContext*context,TFieldExtractor*extractor,TFieldConstraintDescr*fieldConstraintDescr,TQualifiedIdentifierRestrictionDescr*qiRestrictionDescr)功能:这个函数主要是对Restriction类型的数据进行编译。入口参数:第423页共423页 TRuleBuildContext*context//将pattern类型的descr中的数据进行编译后存入TFieldExtractor*extractor//TFieldConstraintDescr*fieldConstraintDescr//用于存储field类型的属性。TQualifiedIdentifierRestrictionDescr*qiRestrictionDescr返回结果:TRestriction类型的对象指针。主要流程:1.取出qiRestrictionDescr中的text中的值,然后根据分隔符“.”放到动态数组vector类型的parts中。2.如果parts长度为2,则调用createDeclarationObject函数生成一个TDeclaration类型的对象指针implicit。3.定义一个TEvaluator类型的指针evaluator赋值为getEvaluator。4.返回一个TVariableRestriction类型的对象(初始化的参数是evaluator,implicit和Extractor)并返回这个对象。5.根据m_fieldType类型的值,譬如:int,string,bool,short类型定义field的值6.根据field,extractor,evaluator的值初始化一个TLiteralRestriction对象,并返回值。TVariableRestriction*TCompilerPatternBuilder::buildRestriction(TRuleBuildContext*context,TFieldExtractor*extractor,TFieldConstraintDescr*fieldConstraintDescr,TVariableRestrictionDescr*variableRestrictionDescr)功能:这个函数主要是根据field,evaluator,extractor的值去初始化一个TVariableRestriction类型的对象并返回。入口参数:TRuleBuildContext*context//将pattern类型的descr中的数据进行编译后存入context中。TFieldExtractor*extractor//TFieldConstraintDescr*fieldConstraintDescr//用于存储field类型的属性。TVariableRestrictionDescr*variableRestrictionDescr//对VariableRestrictio类型的描述的属性的类对象指针。返回结果:TVariableRestriction类型的对象。主要流程:第423页共423页 1.从context中取出declaration,赋值给变量declaration。2.定义一个TEvaluator类型的指针evaluator并赋值为getEvaluator(context,literalRestrictionDescr,extractor->getValueType(),variableRestrictionDescr->getEvaluator())的值。3.用extarcrot、evaluator作为参数定义一个TVariableRestriction的对象,并返回。TRestriction*TCompilerPatternBuilder::buildRestriction(TRuleBuildContext*context,TPattern*pattern,TFieldExtractor*extractor,TFieldConstraintDescr*fieldConstraintDescr,TRestrictionDescr*restrictionDescr)功能:这个函数主要是对Restriction类型的数据进行编译。入口参数:TRuleBuildContext*context//将pattern类型的descr中的数据进行编译后存入TPattern*pattern//pattern类型的对象指针。TFieldExtractor*extractor//TFieldConstraintDescr*fieldConstraintDescr//用于存储field类型的属性。TRestrictionDescr*restrictionDescr返回结果:TRestriction类型的对象指针。主要流程:1.判断restrictionDescr的类型是以下哪一种类型的对象:TLiteralRestrictionDescr,TQualifiedIdentifierRestrictionDescr,TVariableRestrictionDescr,TReturnValueRestrictionDescr。2.根据以上的类型选择符合其类型的重载函数build,并执行。TReturnValueRestriction*TCompilerPatternBuilder::buildRestriction(TRuleBuildContext*context,TPattern*pattern,TFieldExtractor*extractor,TFieldConstraintDescr*fieldConstraintDescr,TReturnValueRestrictionDescr*returnValueRestrictionDescr)功能:这个函数主要是根据field,evaluator,extractor的值去初始化一个TLiteralRestriction类型的对象并返回。入口参数:第423页共423页 TRuleBuildContext*context//将pattern类型的descr中的数据进行编译后存入context中。TPattern*pattern//pattern类型的对象指针TFieldExtractor*extractor//TFieldConstraintDescr*fieldConstraintDescr//用于存储field类型的属性。TReturnValueRestrictionDescr*returnValueRestrictionDescr//返回结果:TReturnValueRestriction类型的对象指针。主要流程:1.定义一个TAnalysisResult类型的对象指针analysis,并把context中的dialect中的analyzeExpression的值赋给analysis。2.从analysis取出boundIdentifier并放入factDeclarations或者tupleDeclarations中。3.定义一个TEvaluator类型的指针evaluator赋值为getEvaluator(context,returnValueRestrictionDescr,extractor->getValueType(),returnValueRestrictionDescr->getEvaluator())1.根据以上参数构造一个returnValueRestriction对象。2.调用build函数编译returnValueRestriction。3.返回returnValueRestriction对象指针。TRestriction*TCompilerPatternBuilder::createRestriction(TRuleBuildContext*context,TPattern*pattern,TFieldConstraintDescr*fieldConstraintDescr,TRestrictionConnectiveDescr*top,TFieldExtractor*extractor)功能:这个函数主要是创建destriction,为编译destriction做准备。入口参数:TRuleBuildContext*context//将pattern类型的descr中的数据进行编译后存入TPattern*pattern//定一个TPattern类型的对象。TFieldExtractor*extractor//TFieldConstraintDescr*fieldConstraintDescr//用于存储field类型的属性。TQualifiedIdentifierRestrictionDescr*qiRestrictionDescrTRestrictionConnectiveDescr*top//存储restrictiong连接的描述属性。返回结果:第423页共423页 TRestriction类型的对象指针。主要流程:1.从top中循环取出restriction,如果restriction是TRestrictionConnectiveDescr类型的数据,则调用createRestriction方法产生一个createRestriction对象,并加入到restrictions动态数组中。2.如果restriction不是TRestrictionConnectiveDescr类型的数据,则直接调用build方法编译这个,并加入到restrictions动态数组中。3.如果restrictions的长度大于1,new一个TAbstractCompositeRestriction类型的对象composite。4.判断从top中取出的是and类型还是or类型,相应的new一个TAndCompositeRestriction对象或者TOrCompositeRestriction对象,并赋值给composite。5.返回composite1.1.1.1.1数据结构说明无1.1.1.1.2接口定义Voidbuild(TRuleBuildContext*,TPatternDescr*,TPattern*)//处理规则中pattern元素信息。1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法TRuleConditionElement*TCompilerPatternBuilder::build(TRuleBuildContext*context,TBaseDescr*descr,TPattern*prefixPattern)第423页共423页 的程序逻辑流程图如下:第423页共423页 方法VoidTCompilerPatternBuilder::buildConstraint(TRuleBuildContext*context,TPattern*pattern,TBaseDescr*constraint,TAbstractCompositeConstraint*container)的程序逻辑流程图如下:方法TCompilerPatternBuilder::build(TRuleBuildContext*context,TPattern*pattern,TFieldBindingDescr*fieldBindingDescr)的程序逻辑流程图如下:第423页共423页 方法voidTCompilerPatternBuilder::build(TRuleBuildContext*context,TPattern*pattern,TFieldConstraintDescr*fieldConstraintDescr,TAbstractCompositeConstraint*container)的程序逻辑流程图如下:第423页共423页 方法voidTCompilerPatternBuilder::build(TRuleBuildContext*context,TPattern*pattern,TPredicateDescr*predicateDescr,TAbstractCompositeConstraint*container)的程序逻辑流程图如下:第423页共423页 方法TLiteralRestriction*TCompilerPatternBuilder::buildRestriction(TRuleBuildContext*context,TFieldExtractor*extractor,TFieldConstraintDescr*fieldConstraintDescr,TLiteralRestrictionDescr*literalRestrictionDescr)的程序逻辑流程图如下:第423页共423页 方法TRestriction*TCompilerPatternBuilder::buildRestriction(TRuleBuildContext*context,TFieldExtractor*extractor,TFieldConstraintDescr*fieldConstraintDescr,TQualifiedIdentifierRestrictionDescr*qiRestrictionDescr)的程序逻辑流程图如下:第423页共423页 方法TVariableRestriction*TCompilerPatternBuilder::buildRestriction(TRuleBuildContext*context,TFieldExtractor*extractor,TFieldConstraintDescr*第423页共423页 fieldConstraintDescr,TVariableRestrictionDescr*variableRestrictionDescr)的程序逻辑流程图如下:方法TRestriction*TCompilerPatternBuilder::buildRestriction(TRuleBuildContext*context,TPattern*pattern,TFieldExtractor*extractor,TFieldConstraintDescr*fieldConstraintDescr,TRestrictionDescr*restrictionDescr)的程序逻辑流程图如下:第423页共423页 方法TReturnValueRestriction*TCompilerPatternBuilder::buildRestriction(TRuleBuildContext*context,TPattern*pattern,TFieldExtractor*extractor,TFieldConstraintDescr*fieldConstraintDescr,TReturnValueRestrictionDescr*returnValueRestrictionDescr)的程序逻辑流程图如下:第423页共423页 方法TRestriction*TCompilerPatternBuilder::createRestriction(TRuleBuildContext*context,TPattern*pattern,TFieldConstraintDescr*fieldConstraintDescr,TRestrictionConnectiveDescr*top,TFieldExtractor*extractor)的程序逻辑流程图如下:第423页共423页 1.1.1.1.1测试要点是否根据TPatternDescr正确生成了TPattern实例。第423页共423页 1.1.1.1CplusplusAnalysisResult1.1.1.1.1程序特征描述用来是存储一段语句的编译结果。1.1.1.1.2程序功能性能描述主要用来做一个存储容器,它来存储语句的编译结果,其中包括一些变量的引用。1.1.1.1.3输入/输出项这个类中的方法是构造函数,析构函数,剩下的全部为对其成员变量的get,set方法。listTCplusplusAnalysisResult::getLocalVariables()功能:这个函数主要是取出成员变量localvariable的值。入口参数:无。返回结果:list类型。主要流程:1.将成员变量localvariable的map类型转换为list类型。2.返回list1.1.1.1.4数据结构说明vector>boundIdentifiers;listidentifiers;maplocalVariables;listnotBoundedIdentifiers;listmodifyBlocks;第423页共423页 1.1.1.1.1接口定义被各种需要存储语句编译结果的地方调用。1.1.1.1.2算法见输入/输出项。1.1.1.1.3程序逻辑流程图方法listTCplusplusAnalysisResult::getLocalVariables()的程序逻辑流程图如下:1.1.1.1.4测试要点定义一个CplusplusAnalysisRes类型的对象,检测其get和set方法是否正确。1.1.1.2CplusplusConsequenceBuilder1.1.1.2.1程序特征描述是对drl文件中的if后边的then部分的编译。第423页共423页 1.1.1.1.1程序功能性能描述是对drl文件中的if后边的then部分的编译。1.1.1.1.2输入/输出项voidTCplusplusConsequenceBuilder::build(TRuleBuildContext*context)功能:这个函数主要是对参数中context中的then部分的编译。入口参数:TRuleBuildContext*context//要编译的部分放入其中。返回结果:无主要流程:1.定义className为consequence。2.定义一个TAnalysisResult类型的对象analysis,并给它赋值为:context中的dialect中的analyzeBlock方法。1.定一个vector类型的declarations,将context中的declaration中的值赋给它。2.定义一个TGeneratContext类型的对象aMap,赋值为方法createVariableContext的值。3.调用createtemplate方法,产生两个.h文件都存放在context中。1.1.1.1.3数据结构说明无1.1.1.1.4接口定义在CplusplusDialect中调用。1.1.1.1.5算法见输入/输出项。第423页共423页 1.1.1.1.1程序逻辑流程图方法voidTCplusplusConsequenceBuilder::build(TRuleBuildContext*context)的程序逻辑流程图如下:1.1.1.1.2测试要点定义一个CplusplusConsequenceBuilder类型的对象,检测builder方法是否正确。第423页共423页 1.1.1.1CplusplusEvalBuilder1.1.1.1.1程序特征描述用于编译Eval关键字的drl文件中的部分。1.1.1.1.2程序功能性能描述用于编译Eval关键字的drl文件中的部分,建立build方法。1.1.1.1.3输入/输出项这个类中的方法是构造函数,析构函数,剩下的全部为对其成员变量的get,set方法。TRuleConditionElement*TCplusplusEvalBuilder::build(TRuleBuildContext*context,TBaseDescr*descr,TPattern*prefixPattern)功能:这个函数主要是为了构建eval关键字。入口参数:TRuleBuildContext*context//TBaseDescr*descry//TPattern*prefixPattern//返回结果:TRuleConditionElement类型的对象。主要流程:1.定义一个TAnalysisResult类型的指针analysis,赋值为context->getDialect()->analyzeExpression。2.定义一个vector类型的变量declaration,将它赋值为从Analysis中取出的identifier。3.定一个TGeneratContext类型的aMap,将它赋值为createVariableContext方法的值。第423页共423页 4.调用generatTemplates方法,将evalMethod和evalInvoker的内容都写入context中。5.将invoker中的方法的内容存入dialect中的ruleclass中。1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在CplusplusDialect中调用。1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法TRuleConditionElement*TCplusplusEvalBuilder::build(TRuleBuildContext*context,TBaseDescr*descr,TPattern*prefixPattern)的程序逻辑流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个CplusplusEvalBuilder类型的对象,检测其build方法是否正确。1.1.1.2CplusplusExprAnalyzer1.1.1.2.1程序特征描述这个类是用来编译c++语句的类。1.1.1.2.2程序功能性能描述这个类是用来编译c++语句的类,由于目前还没有写C++编译器,所以这个类里的方法还没用写。第423页共423页 1.1.1.1.1输入/输出项这个类中的方法体还没用写。TCplusplusAnalysisResult*TCplusplusExprAnalyzer::analyzeExpression(stringexpr,vector>&availableIdentifiers)TCplusplusAnalysisResult*TCplusplusExprAnalyzer::analyzeBlock(stringexpr,vector>&availableIdentifiers)TCplusplusAnalysisResult*TCplusplusExprAnalyzer::analyze(TCplusplusAnalysisResult*result,vector>&availableIdentifiers)1.1.1.1.2数据结构说明无1.1.1.1.3接口定义无1.1.1.1.4算法见输入/输出项。1.1.1.1.5程序逻辑流程图无1.1.1.1.6测试要点定义一个CplusplusExprAnalyzer类型的对象,检测其get和set方法是否正确。第423页共423页 1.1.1.1CplusplusPredicateBuilder1.1.1.1.1程序特征描述用来编译predicate关键字的程序的类。1.1.1.1.2程序功能性能描述主要用来编译predicate关键字的程序。1.1.1.1.3输入/输出项这个类中的只有一个方法。voidTCplusplusPredicateBuilder::build(TRuleBuildContext*context,vector>&usedIdentifiers,vector&previousDeclarations,vector&localDeclarations,TPredicateConstraint*predicateConstraint,TPredicateDescr*predicateDescr)功能:这个函数主要是对predication关键字的编译。入口参数:TRuleBuildContext*context//vector>&usedIdentifiers//vector&previousDeclarations//vector&localDeclarations//TPredicateConstraint*predicateConstraint//TPredicateDescr*predicateDescr//返回结果:无主要流程:1.定一个TGeneratContext类型的aMap,将它赋值为createVariableContext方法的值。2.调用generatTemplates方法,将evalMethod和evalInvoker的内容都写入context中。第423页共423页 1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在CplusplusDialect中调用。1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法voidTCplusplusPredicateBuilder::build(TRuleBuildContext*context,vector>&usedIdentifiers,vector&previousDeclarations,vector&localDeclarations,TPredicateConstraint*predicateConstraint,TPredicateDescr*predicateDescr)的程序逻辑流程图如下:1.1.1.1.5测试要点第423页共423页 定义一个CplusplusPredicateBuilder类型的对象,检测其get和set方法是否正确。1.1.1.1CplusplusReturnValueBuilder1.1.1.1.1程序特征描述在产生then时需要加载的模板,由于then中是c++代码,在这里进行包装的作用。1.1.1.1.2程序功能性能描述在产生then时需要加载的模板,由于then中是c++代码,在这里进行包装的作用。1.1.1.1.3输入/输出项voidTCplusplusReturnValueBuilder::build(TRuleBuildContext*context,vector>&usedIdentifiers,vector&previousDeclarations,vector&localDeclarations,TReturnValueRestriction*returnValueRestriction,TReturnValueRestrictionDescr*returnValueRestrictionDescr)功能:这个函数主要对drl文件中的then部分加载模板,包装作用。入口参数:vector>&usedIdentifiers,vector&previousDeclarations,vector&localDeclarations,TReturnValueRestriction*returnValueRestriction,TReturnValueRestrictionDescr*returnValueRestrictionDescr返回结果:无主要流程:第423页共423页 1.定一个TGeneratContext类型的aMap,将它赋值为createVariableContext方法的值。4.调用generatTemplates方法,将ReturnValueMethod和ReturnValueInvoker的内容都写入context中。5.将invoker中的方法的内容存入dialect中的ruleclass中。1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在CplusplusDialect中调用。1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法voidTCplusplusReturnValueBuilder::build(TRuleBuildContext*context,vector>&usedIdentifiers,vector&previousDeclarations,vector&localDeclarations,TReturnValueRestriction*returnValueRestriction,TReturnValueRestrictionDescr*returnValueRestrictionDescr)的程序逻辑流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个CplusplusReturnValueBuilder类型的对象,检测其get和set方法是否正确。1.1.1.2CplusplusRuleClassBuilder1.1.1.2.1程序特征描述用来编译ruleclass的类。1.1.1.2.2程序功能性能描述主要用来ruleclass,生成字符串形式的类以及其中的方法,然后存放在context中。1.1.1.2.3输入/输出项voidTCplusplusRuleClassBuilder::buildRule第423页共423页 (TRuleBuildContext*context)功能:从context中取出dialect,从dialect中取出methods、classname、ruledescr等,然后再次基础上加上一些固定语句形成类中方法的语句,最后添加到dialect中的ruleclass中。入口参数:TRuleBuildContext*context//TRuleBuildContext类型的指针。返回结果:无主要流程:1.定义一个TCplusplusDialect类型的对象指针dialect并赋值为context中的dialect。2.从context中取出对规则的描述存入ruledescr中。3.新建一个string类型的字符串buffer,并从reledescr中的methodname以及methodhead部分都存放到buffer中。4.将buffer的值存放到dialect中ruleclass中。5.将buffer赋值为空,并从reledescr中的className以及classhead部分都存放到buffer中。6.将buffer的值添加到dialect中ruleclass中。1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在CplusplusDialect类中被调用。1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法voidTCplusplusRuleClassBuilder::buildRule(TRuleBuildContext*context)的程序逻辑流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个CplusplusRuleclassBuilder类型的对象,检测其build方法是否正确。1.1.1.2DeclarationTypeFixer1.1.1.2.1程序特征描述一个辅助的工具类。第423页共423页 1.1.1.1.1程序功能性能描述辅助工具类,主要有一个方法,主要是根据declaration取出fieldType。1.1.1.1.2输入/输出项这个类中的方法只有一个。std::stringTDeclarationTypeFixer::fix(TDeclaration*declaration)功能:根据参数中的declaration取出相应的fieldType。入口参数:TDeclaration*declaration。返回结果:String类型。主要流程:1.定义一个string类型的字符串。2.从declaration中取出extractor,再从extractor中取出fieldType并赋值给上边定义的string类型的字符串。3.返回这个字符串。1.1.1.1.3数据结构说明无1.1.1.1.4接口定义在CplusplusDialect类中被调用。1.1.1.1.5算法见输入/输出项。1.1.1.1.6程序逻辑流程图方法std::stringTDeclarationTypeFixer::fix(TDeclaration*第423页共423页 declaration)的程序逻辑流程图如下:1.1.1.1.1测试要点定义一个DeclarationTypeFixer类型的对象,检测其fix方法是否正确。1.1.1.2ErrorHandler1.1.1.2.1程序特征描述对错误处理的描述。1.1.1.2.2程序功能性能描述主要用来对是否存在错误进行判断,如果有错误,将错误信息加入到一个统一的list中。1.1.1.2.3输入/输出项boolTErrorHandler::isInError()第423页共423页 功能:返回其成员变量inError的值。入口参数:无。返回结果:Bool类型。主要流程:返回其成员变量inError的值。voidTErrorHandler::addError(TDroolsError*err)功能:将错误信息加入到成员变量list类型的errors中。入口参数:TDroolsError*err//TDroolsError类型的指针。返回结果:无。主要流程:将错误信息加入到成员变量list类型的errors中。1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在2个地方被调用。1.在CplusplusDialect类中被调用。2.在RuleErrorHandle类中被调用。1.1.1.1.3算法见输入/输出项。第423页共423页 1.1.1.1.1程序逻辑流程图方法voidTErrorHandler::addError(TDroolsError*err)的程序逻辑流程图如下:1.1.1.1.2测试要点定义一个ErrorHandler类型的对象,检测其方法是否正确。1.1.1.2KnowledgeHelperFixer1.1.1.2.1程序特征描述辅助工具类。1.1.1.2.2程序功能性能描述辅助工具类,主要偏向于帮助方面。。1.1.1.2.3输入/输出项这个类中的方法是构造函数,析构函数。TKnowledgeHelperFixer::TKnowledgeHelperFixer()功能:构造函数。第423页共423页 入口参数:无。返回结果:TKnowledgeHelperFixer类型的对象。主要流程:自身构造函数。1.1.1.1.1数据结构说明无1.1.1.1.2接口定义在2个类中被调用。1.CplusplusConsequenceBuilder中。2.CplusplusDialect中。1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图无1.1.1.1.5测试要点定义一个KnowledgeHelperFixer类型的对象,检测其构造函数是否正确。第423页共423页 1.1.1.1PackageBuilder1.1.1.1.1程序特征描述是整个编译的入口,对package的编译。1.1.1.1.2程序功能性能描述主要是对包的操作,增加包,合并包,判断包名是否有效等方法。1.1.1.1.3输入/输出项TPackageBuilder::TPackageBuilder(TPackageBuilderConfiguration*aConfiguration)功能:构造函数。入口参数:TPackageBuilderConfiguration*aConfiguration//TPackageBuilderConfiguration类型的指针。返回结果:TPackageBuilder类型的对象。主要流程:1.将参数中的aConfiguration赋值给本对象的aConfiguration。2.定义一个set类型的变量setimport,将package中的import中的数据全部放入setimport中。3.new一个TClassTypeResolver对象,以setimport为参数,把对象放入typeResolver中。4.为dialectRegistry赋值为configuration->buildDialectRegistry()。voidTPackageBuilder::addPackage(TPackageDescr*aPackageDescr)功能:添加package对象。。入口参数:第423页共423页 TPackageDescr*aPackageDescr//tpakcage的指针。返回结果:无主要流程:1.检查packagename是否有效。2.检查rulename是否唯一。3.从dialectRegistry中取出dialect。4.循环取出TRuleDescr中的值,分别加入到规则中。5.将dialectRegistry全部编译,即:调用compileAll方法。voidTPackageBuilder::initDialectPackage(TPackage*pkg)功能:初始化dialectPackage。入口参数:TPackage*pkg//TPackage类型的指针。返回结果:无主要流程:1.循环取出dialectRegistry中的每一个dialect。2.对每一个dialect进行对package的初始化。voidTPackageBuilder::mergePackage(TPackage*aPkg,TPackageDescr*aPackageDescr)功能:将两个package进行合并。入口参数:TPackage*pkg//TPackage类型的指针。TPackageDescr*aPackageDescr//TPackageDescr类型的指针返回结果:无主要流程:1.取出他们中的import中数据进行合并。2.取出他们中的global中的数据进行合并。。第423页共423页 voidTPackageBuilder::addRule(TRuleDescr*aRuleDescr)功能:将aRuleDescr中的规则添加进去。入口参数:TRuleDescr*aRuleDescr//TPackage类型的指针。返回结果:无主要流程:1.根据对象中的成员变量new一个TRuleBuildContext对象context。2.builder调用build方法编译context。3.在dialect中存入context,4.在package中增加context中的rules。1.1.1.1.1数据结构说明TPackage*pkg;stringcurDrlFile;listresults;TPackageBuilderConfiguration*configuration;TTypeResolver*typeResolver;//noidearTClassFieldExtractorCache*classFieldExtractorCache;//noidearTRuleBuilder*builder;TDialect*dialect;TDialectRegistry*dialectRegistry;staticTPackageBuilder*INSTANCE;1.1.1.1.2接口定义在以下的几个地方都要调用这个类。第423页共423页 1.1.1.1.1算法见输入/输出项。1.1.1.1.2程序逻辑流程图方法TPackageBuilder::TPackageBuilder(TPackageBuilderConfiguration*aConfiguration)的程序逻辑流程图如下:第423页共423页 方法voidTPackageBuilder::addPackage(TPackageDescr*aPackageDescr)的程序逻辑流程图如下:第423页共423页 方法voidTPackageBuilder::initDialectPackage(TPackage*pkg)的程序逻辑流程图如下:方法voidTPackageBuilder::mergePackage(TPackage*aPkg,TPackageDescr*aPackageDescr)的程序逻辑流程图如下:第423页共423页 方法voidTPackageBuilder::addRule(TRuleDescr*aRuleDescr)的程序逻辑流程图如下:1.1.1.1.1测试要点定义一个PackageBuilder类型的对象,检测其方法是否正确。第423页共423页 1.1.1.1PackageBuilderConfiguration1.1.1.1.1程序特征描述建立package时,要用到的参数的集合。1.1.1.1.2程序功能性能描述建立package时,要用到的参数的集合。1.1.1.1.3输入/输出项voidTPackageBuilderConfiguration::init(TProperties*properties)功能:按照参数中的properties进行对package的初始化。入口参数:TProperties*properties//TProperties类型的指针。返回结果:无。主要流程:1.读入文件“packagebuilder.conf”。2.将其添加到TChainedProperties对象中。3.调用buildDialectConfigurationMap()方法。4.调用buildDumpDirectory()方法。voidTPackageBuilderConfiguration::buildDialectConfigurationMap()功能:编译dialect的配置文件。。入口参数:无。返回结果:无。第423页共423页 主要流程:1.定义一个string类型变量dialect,并赋值为:cplusplus。2.设置默认的dialect为cplusplus。3.定义一个TDialectConfiguration对象dialectConf,并初始化。4.调用addDialect方法,将dialectname和dialectconf作为pair存放到dialectConfigurations中,其中dialectConfigurations是map类型。1.1.1.1.1数据结构说明mapdialectConfigurations;stringdefaultDialect;TChainedProperties*chainedProperties;TFiledumpDirectory;1.1.1.1.2接口定义被以下几个地方调用。1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法voidTPackageBuilderConfiguration::init(TProperties*properties)的程序逻辑流图如下:第423页共423页 方法voidTPackageBuilderConfiguration::buildDialectConfigurationMap()的程序逻辑流图如下:1.1.1.1.1测试要点定义一个PackageBuilderConfiguration类型的对象,检测其方法是否正确。第423页共423页 1.1.1.1RuleBuildContext1.1.1.1.1程序特征描述将rule中的信息汇总。1.1.1.1.2程序功能性能描述将rule中的信息汇总。1.1.1.1.3输入/输出项这个类中的方法是构造函数,析构函数,剩下的全部为对其成员变量的get,set方法。TRuleBuildContext::TRuleBuildContext(TPackageBuilderConfiguration*aConfiguration,TPackage*aPkg,TRuleDescr*aRuleDescr,TDialectRegistry*aDialectRegistry,TDialect*aDefaultDialect)功能:构造函数。入口参数:TPackageBuilderConfiguration*aConfiguration//TPackage*aPkg//TRuleDescr*aRuleDescr//TDialectRegistry*aDialectRegistry//TDialect*aDefaultDialect//返回结果:TRuleBuildContext类型对象。主要流程:给其成员变量赋值。voidTRuleBuildContext::setAttributes(TRule*rule,TRuleDescr*ruleDescr,list&attributes)功能:第423页共423页 给其属性赋值。入口参数:TRule*rule//TRuleDescr*ruleDescr//list&attributes//返回结果:无主要流程:i.判断参数中的name是什么值,如果是salience,则将attributes中的值赋给salience。ii.如果name的值是no—loop,则将attributes中的值赋给no—loop。1.1.1.1.1数据结构说明TPackage*pkg;TPackageBuilderConfiguration*configuration;TRule*rule;stackbuildStack;TRuleDescr*ruleDescr;TDeclarationScopeResolver*declarationResolver;intpatternId;//patternIdinitedas-1listerrors;listmethods;mapinvokers;mapinvokerLookups;mapdescrLookups;intcounter;TDialectRegistry*dialectRegistry;TDialect*dialect;第423页共423页 1.1.1.1.1接口定义被以下地方调用。1.1.1.1.2算法见输入/输出项。1.1.1.1.3程序逻辑流程图方法voidTRuleBuildContext::setAttributes(TRule*rule,TRuleDescr*ruleDescr,list&attributes)的程序逻辑流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个RuleBuildContext类型的对象,检测其其方法是否正确。第423页共423页 1.1.1.1RuleBuilder1.1.1.1.1程序特征描述编译rule的类。1.1.1.1.2程序功能性能描述主要是对规则的编译。1.1.1.1.3输入/输出项voidTRuleBuilder::build(TRuleBuildContext*context)功能:这个函数主要对context中的rule进行编译。入口参数:无。返回结果:list类型。主要流程:1.根据context->getRuleDescr()的类型去调用相应的方法。1.1.1.1.4数据结构说明无1.1.1.1.5接口定义被以下地方调用。第423页共423页 1.1.1.1.1算法见输入/输出项。1.1.1.1.2程序逻辑流程图方法build的程序逻辑流程图如下:1.1.1.1.3测试要点定义一个rulebuilder类型的对象,检测build方法是否正确。1.1.1.2RuleErrorHandler1.1.1.2.1程序特征描述用来是进行错误处理的类。第423页共423页 1.1.1.1.1程序功能性能描述用来是进行错误处理的类。1.1.1.1.2输入/输出项TRuleErrorHandler::TRuleErrorHandler(TBaseDescr*aRuleDescr,TRule*aRule,stringaMessage)功能:处理错误。入口参数:TBaseDescr*aRuleDescr\TRule*aRule\stringaMessage\错误信息返回结果:TRuleErrorHandler类型。主要流程:1.将3个成员的初始化1.1.1.1.3数据结构说明无1.1.1.1.4接口定义被以下地方调用。第423页共423页 1.1.1.1.1算法见输入/输出项。1.1.1.1.2程序逻辑流程图无1.1.1.1.3测试要点定义一个RuleErrorHandler类型的对象,检测其是否正确。1.1.1.2SoBuilder1.1.1.2.1程序特征描述生成一个文件以便在linux下执行。1.1.1.2.2程序功能性能描述生成一个文件以便在linux下执行。1.1.1.2.3输入/输出项voidTSoBuilder::init()功能:初始化。入口参数:无。返回结果:无。主要流程:1.定义includeHeader的值。第423页共423页 2.定义includeTemplate的值。3.定义evalIncludeTemplate的值1.1.1.1.1数据结构说明无1.1.1.1.2接口定义被以下的地方调用。1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法init的程序逻辑流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个SoBuilder类型的对象,检测其方法是否正确。1.1.2添加规则信息子模块1.1.2.1PackageDescr1.1.2.1.1程序特征描述对一个drl文件的描述。1.1.2.1.2程序功能性能描述对一个drl文件所需熟悉的描述以及操作。1.1.2.1.3输入/输出项这个类主要有以下2个方法,其中1个是析构函数,1个是addRule()方法。voidTPackageDescr::addRule(TRuleDescr*aRule)功能:将新的规则加入到成员变量Rule中。.入口参数:TRuleDescr*aRule//TRuleDescr类型的一个指针。返回结果:无主要流程:1.取出TpackageDescr中的rules成员变量。2.从rules中取出attribute属性。3.将attribute中的属性与参数中aRule中的attribute中的属性对比,把rules中没有的属性加入进来。第423页共423页 1.在rules中加入新规则aRule.1.1.1.1.1数据结构说明stringname;stringdocumentation;listimports;listfunctionImports;listattributes;listglobals;listfactTemplates;listfunctions;listrules;1.1.1.1.2接口定义无1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法voidTPackageDescr::addRule(TRuleDescr*aRule)的程序逻辑流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个PackageDescr对象,测试其addRule方法是否正确。1.1.1.2PatternDescr1.1.1.2.1程序特征描述对关键字pattern的描述。第423页共423页 1.1.1.1.1程序功能性能描述对关键字pattern所需熟悉的描述以及操作。1.1.1.1.2输入/输出项这个类主要有以下17个方法,其中1个是析构函数,1个构造函数,一个tostring方法,其它都为get,set方法。TPatternDescr::TPatternDescr(conststringaObjectType,conststringaIdentifier):TBaseDescr(),objectType(aObjectType),identifier(aIdentifier),leftParentCharacter(-1),rightParentCharacter(-1)功能:自身构造函数。入口参数:conststringaObjectType//object类型conststringaIdentifier//标识返回结果:TPatternDescr类型的对象主要流程:1.给父类中的一些成员变量初始化。2.new一个TPatternDescr对象,并返回。stringTPatternDescr::toString()功能:这个类的成员变量identifier和objectType属性的值以字符串的形式展现出来。入口参数:无返回结果:String类型的字符串。主要流程:这个类的成员变量identifier和objectType属性的值以字符串的形式展现出来。第423页共423页 1.1.1.1.1数据结构说明stringobjectType;stringidentifier;TConditionalElementDescr*constraint;intleftParentCharacter;intrightParentCharacter;TPatternSourceDescr*source;1.1.1.1.2接口定义无1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图无1.1.1.1.5测试要点定义一个PatternDescr对象,测试其构造函数以及get,set方法是否正确。1.1.1.2RestrictionConnectiveDescr1.1.1.2.1程序特征描述对关联限制的描述。1.1.1.2.2程序功能性能描述对关联限制的描述所需熟悉的描述以及操作。第423页共423页 1.1.1.1.1输入/输出项这个类主要有以下3个方法,其中1个是析构函数,1个是addOrMerge(),1个为toString方法。voidTRestrictionConnectiveDescr::addOrMerge(TRestrictionDescr*restriction)功能:将限制内容加入到成员变量Restrictions中。.入口参数:TRestrictionDescr*restriction//TRestrictionDescr类型的一个指针。返回结果:无主要流程:1.New一个TRestrictionConnectiveDescr类型的指针temp;2.判断Temp类型和参数restriction类型一致,如果一致,取出restriction中的Restrictions值,把Restrictions中的每一项分别加入到本地对象的属性Restrictions中。3.如果不一致,直接把Restrictions的值加入到TRestrictionConnectiveDescr中的属性Restrictions中。4.删除Temp对象。stringTRestrictionConnectiveDescr::toString()功能:这个类的成员变量Restrictions属性的值以字符串的形式展现出来。入口参数:无返回结果:String类型的字符串。主要流程:这个类的成员变量Restrictions属性的值以字符串的形式展现出来。第423页共423页 1.1.1.1.1数据结构说明stringvariableName;listinvokers;1.1.1.1.2接口定义无1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图以下是addOrMerge方法的逻辑流程图。第423页共423页 1.1.1.1.1测试要点定义一个RestrictionConnectiveDescr对象,测试其addNotMerge方法是否正确。1.1.1.2RuleDescr1.1.1.2.1程序特征描述对规则的描述。第423页共423页 1.1.1.1.1程序功能性能描述对“规则”所需熟悉的描述以及操作。1.1.1.1.2输入/输出项这个类主要有以下22个方法,其中1个是析构函数,1个是构造函数,其它的都为对其属性的get,set方法。TRuleDescr::TRuleDescr(conststringaRuleName,conststringaDocumentation):TBaseDescr(),name(aRuleName),documentation(aDocumentation)功能:自身构造函数。.入口参数:conststringaRuleName//规则名称。conststringaDocumentation//返回结果:无主要流程:1.初始化父类的几个成员变量。2.初始化本类中成员变量lhs的值。3.new一个TRuleDescr对象并返回。voidTRuleDescr::setAttributes(constlist&aAttributes)功能:Attributes的set方法。入口参数:constlist&aAttributes返回结果:无主要流程:1.将本地对象中的Attribute中的每一个值删除。2.将参数中的aAttributes中的值赋给本地对象中的Attribute值。第423页共423页 1.1.1.1.1数据结构说明stringname;stringdocumentation;TAndDescr*lhs;stringconsequence;//本來是object類型intconsequenceLine;intconsequencePattern;intoffset;listattributes;stringsalience;stringclassName;1.1.1.1.2接口定义无1.1.1.1.3算法见输入/输出项。1.1.1.1.4程序逻辑流程图方法voidTRuleDescr::setAttributes(constlist&aAttributes)的程序逻辑流程图如下:第423页共423页 1.1.1.1.1测试要点定义一个RuleDescr对象,测试其构造函数已经其属性的get,set方法是否正确。第423页共423页

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭