管理具有对象循环的模型的制作方法

文档序号:6543544阅读:137来源:国知局
管理具有对象循环的模型的制作方法
【专利摘要】本发明涉及管理具有对象循环的模型。模型管理系统包括循环图生成器、对象注册表生成器和运行期代码生成器。循环图生成器被配置为创建循环图,对于具有多个对象的信息模型中的循环,循环图识别第二或后面的对象与第一对象的非支配关联。对象注册生成器被配置为创建对象注册表图。运行期代码生成器被配置为基于信息模型和图而生成可实例化信息模型和对象注册表。可实例化信息模型的生成包括包含第二/后面的可实例化对象的多个可实例化对象的生成,对于非支配关联,第二/后面的可实例化对象包括识别要通过对象注册表实例化的第一对象的引用对象而不是要从第二/后面的可实例化对象内实例化的包含的第一可实例化对象的对象限定符。
【专利说明】
【技术领域】
[0001] 本发明总体涉及模型驱动工程,并且特别涉及管理具有对象循环的模型。 管理具有对象循环的模型

【背景技术】
[0002] 信息模型(本文有时称为数据模型)越来越多地用在各种各样的产品、结构和设施 的设计和制造中。随着特定产品、结构或设施设计的复杂性和变化性增加,这种建模可以提 供许多益处,包括有助于设计和制造效率。
[0003] 例如,通常使用数百或数千组件(其进而包括许多单个部件或子组件)构造高度复 杂的产品、结构或设施,例如飞机、船舶、海上石油钻井平台、电力分配系统、计算机软件系 统、计算基因结构等。收集并且管理关于这些组件的数据模型形式的数据有助于使产品、结 构或设施的设计和制造过程流线型化。具有这种数据同样有助于设计变体、改进和额外的 子系统。
[0004] 此外,捕捉这种数据有助于虚拟产品设计过程,该过程可以包括在虚拟环境中(例 如,在计算机上)设计和测试产品,并且自动生成可被执行以模拟产品的计算机可读程序代 码。虚拟产品设计通常有助于减少产品的非常昂贵的物理原型设计和测试。虚拟产品设计 环境可以显著节约设计给定产品、机器或设施所需的成本和时间。
[0005] 信息模型可以使用面向对象技术描述产品及其部件。模型可以包括许多模型对 象并且描述信息关系,这些信息关系不仅支持信息集的交换而且支持它们的相互关系的交 换。信息模型可以表述为有向图,其中出于自动代码生成目的,该图必须不包含节点(对象) 之间的循环。如在图1和2中所示,丰富的信息模型通常包含简单的循环引用(A=>B=>A,其 中A和B是对象)和/或复杂的循环引用(A=>B=>C=>F=>Z=>Q=>E=>C,其中A、B、C、F、Z、Q 和E是对象)。图3示出断开图1的对象之间的有向图循环。得到的循环被去除的图被认 为是有向无环图(DAG)。
[0006] 用于生成DAG的有针对性的特定实施解决方案在历史上已经被应用于允许运行 期软件对象包含这些循环。当自动代码生成工具用于创建对象接口定义(例如IDL)时,循 环出现在生成的可实例化对象中。现有的解决方案需要去除模型内的循环,使模型的固有 丰富性(richness)和实现的数据对象中的表现力受到损失,或者需要对自动生成的可实例 化对象进行自定制重做,从而为目标语言以历史方式去除循环。


【发明内容】

[0007] 本发明的示例实施方式解决了与基于具有循环的模型生成计算机可读程序代码 有关的问题,并且总体涉及用于管理具有对象循环的模型的系统、对应的方法和计算机可 读存储介质。模型对象关联当前被丢弃或需要大量的定制以合并在运行期代码中。本发明 的示例实施方式提供了保留丰富模型关系和可实例化代码之间的折衷;不仅以自动方式保 留这些关联,而且还提供用于平台和语言之间的可移植性的手段。示例实施方式可以应用 与语言无关的技术,这可以继而提供将生成的接口端口化到多个平台和编译器的机制。
[0008] 从信息模型自动生成代码可以显著节约时间。信息模型可以在许多范畴上实现, 例如像飞机、轮船、海上石油钻井平台、电力分配系统、计算机软件系统、计算基因结构等的 产品、结构或设施(总称"产品")的设计。信息模型可以用接口生成,这些接口在多种行业和

【技术领域】中使产品和服务与合作伙伴、供应商和竞争者高度互相可操作。在电力分配的情 况下,本发明的示例实施方式可以用于提供与在电网上的仪器、传感器、数据采集等相关的 数据协议转换和数据/信息管理。类似地,示例实施方式可以为电力分配项目提供通用的 操作环境,用于公用事业传输和分配客户。其它示例使用例子包括电力质量检查、维护、设 施管理、分布式能量(微电网操作和远期规划)、联合系统管理、蓄电、需求响应、先进计量、 电力输送、分配管理和微电网设计等。
[0009] 根据示例实施方式的一个方面,提供了一种模型管理系统,其包括循环图生成器、 对象注册表生成器和运行期代码生成器。循环图生成器被配置为遍历具有多个对象的信息 模型,至少一些对象形成循环。循环图生成器还被配置为创建循环图,对于该循环,循环图 识别第二或后面的对象与第一对象的非支配关联。对象注册表生成器被配置为创建对象注 册表图,对象注册表图识别非支配关联并且包括分别针对第二或后面的对象的第二或后面 的可实例化对象的一个或多个生命周期策略。
[0010] 运行期代码生成器被配置为基于信息模型、循环图和对象注册表图而生成可实例 化信息模型和对象注册表。可实例化信息模型的生成包括信息模型的各对象的多个可实例 化对象的生成。这包括如下第二或后面的可实例化对象的生成,对于非支配关联,该第二或 后面的可实例化对象包括对象限定符,该对象限定符识别要通过对象注册表实例化的第一 对象的引用对象,而不是要从第二或后面的可实例化对象内实例化的包含的第一可实例化 对象。在一个示例中,运行期代码生成器被配置为生成包括包含的第一可实例化对象的第 二或后面的可实例化对象,并且然后移除该包含的第一可实例化对象,并且用对象限定符 取代它。
[0011] 在一个示例中,模型管理系统进一步包括模型库,其被配置为存储一个或多个信 息模型,至少一些信息模型根据加权的先入先出技术可移除。在这个示例中,循环图生成器 可以被配置为从模型库接收信息模型。
[0012] 在一个示例中,模型管理系统进一步包括适配器组件,其被配置为将信息模型从 多个不同格式中的任何格式转换为信息模型被遍历的公共格式。
[0013] 在一个示例中,运行期代码生成器被配置为使用多个面向对象设计模式生成可实 例化信息模型,面向对象设计模式包括代理模式和工厂方法模式。在该示例中,由运行期代 码生成器生成的对象注册表可以包括:对象管理器,其被配置为实现代理模式以管理引用 对象的实例化;以及对象工厂,其被配置为实现工厂方法模式以将引用对象实例化。在进一 步的示例中,面向对象设计模式还可以包括单件模式,并且对象工厂可以被配置为根据单 件模式来实现工厂方法模式,从而根据基数值限制引用模式的实例。
[0014] 在一个示例中,第一对象通过支配关联与第二对象相关,并且第二或后面的对象 通过非支配关联与第一对象返回相关。在该示例中,可实例化对象的生成包括如下第一可 实例化对象的生成,对于支配关联,该第一可实例化对象包含第二可实例化对象,以便从其 内实例化。
[0015] 在示例实施方式的其它方面,提供了一种用于管理具有对象循环的模型的方法和 计算机可读存储介质。提供了一种计算机可读存储介质,其包括存储在其中的计算机可读 程序代码部分。计算机可读程序代码响应于由处理器执行而使装置:至少遍历具有多个对 象的信息模型,至少一些对象形成循环;并且创建循环图(808),对于该循环,循环图识别 第二或后面的对象与第一对象的非支配关联;并且创建对象注册表图(812),其识别非支 配关联并且包括分别针对第二或后面的对象的第二或后面的可实例化对象的一个或多个 生命周期策略。计算机可读程序代码进一步使装置基于信息模型、循环图(808)和对象注 册表图(812)而生成可实例化信息模型和对象注册表(904)。然后可实例化信息模型的生 成包括信息模型的各对象的多个可实例化对象(902)的生成,包括如下第二或后面的可实 例化对象的生成,对于非支配关联,该第二或后面的可实例化对象包括对象限定符,该对象 限定符识别要通过对象注册表(904)实例化的第一对象的引用对象,而不是要从第二或后 面的可实例化对象内实例化的包含的第一可实例化对象。在此讨论的特征、功能和优点可 以在各种示例实施方式中独立实现,或可以在其它示例实施方式中组合,参考下面描述和 附图可以看出其进一步细节。

【专利附图】

【附图说明】
[0016] 这样概括地描述了本发明的示例实施方式之后,现在参考附图,附图未必按比例 绘制,并且其中:
[0017] 图1示出模型的两个对象之间的来自双向关联的循环对象引用;
[0018] 图2示出模型的对象之间的来自双向关联的二阶循环;
[0019] 图3示出断开图1的两个对象之间的有向图循环;
[0020] 图4示出根据一个示例实施方式的模型管理系统;
[0021] 图5示出根据一个示例实施方式的分层节点对象注册表;
[0022] 图6和图7示出根据一个示例实施方式的将循环节点分层时的两个示例情形;
[0023] 图8示出根据一个示例实施方式的代码生成系统;以及
[0024] 图9示出根据一个示例实施方式生成的运行期模型制成品。

【具体实施方式】
[0025] 现在将参考附图在下文中更全面地描述本发明的一些实施方式,在附图中示出了 一些但不是所有的本发明的实施方式。事实上,本发明的各种实施方式可以以许多不同的 形式体现,并且不应当视为限于在此阐述的实施方式;相反,提供这些示例实施方式是为了 使本发明透彻和完整,并且将向本领域技术人员完全传达本发明的范围。例如,除非另外指 出,作为第一、第二、第三等引用某物不应当解释为暗示特定的顺序,术语"八"、"8"、"(:"等也 不应当如此解释。同样,某物可以被描述为在另一物上方可以改为在下方(除非另外指出), 反之亦然;并且类似地,描述为在另一物左边的某物可以改为在右边,反之亦然。在这些附 图中,类似的参考标记指代类似的元素。
[0026] 现在参考图4,根据本发明的示例实施方式示出模型管理系统400。该系统可以包 括用于执行一个或多个功能或操作的任何数目的不同子系统(每一个是单独系统)。如图所 示,例如,该系统可以包括代码生成系统402,其通常被配置为接收产品的信息模型,并且自 动生成一个或多个运行期模型制成品。在各种示例中,模型可以用于物理或非物理产品,诸 如飞机、船舶、海上石油钻井平台、电力分配系统、计算机软件系统、计算基因结构等。产品 可以大致由多个系统、子系统、组件、子组件、部件、零件等(每一个通常是"部件")组成。模 型可以包括对产品及其部件在节点的层次划分方面的功能描述,并且可以通过节点之间的 连接或关联而反映各部件之间的功能关系或关联。在一个示例中,然后,运行期模型制成品 可以包括计算机可读程序代码,该代码可以被执行(机器代码)或被编译以便在虚拟环境中 (例如,在计算机上)执行(源代码),例如从而使得人们能够研究产品设计期间部件之间的相 互作用。
[0027] 在各种示例实施方式中,模型可以使用面向对象技术描述产品及其部件。因此,模 型可以包括用于产品的相应部件的对象,并且可以包括代表产品的功能性能的对象。运行 期模型制成品可以包括计算机可读程序代码,该代码继而可以包括用于模型的相应对象的 可实例化对象。因此,信息模型可以描述产品,并且包括多个"模型对象"(或简称"对象"), 所述多个"模型对象"描述产品的离散的物理部件或过程。并且"可实例化对象"可以指代 表示产品的相应物理部件或过程的软件对象。
[0028] 如上面所述,模型的各种对象(节点)可以通过相应对象之间的关联而相关。在各 种示例中,一个对象与另一个对象的关联可以被反映在它们相应的可实例化对象中。一个 对象的可实例化对象可以包含另一个对象的可实例化对象(所包含的可实例化对象有时简 称为"包容对象")。也就是说,一个对象与另一个对象的关联可以被反映在包含另一个对象 的可实例化对象的一个对象的可实例化对象中。在该结构中,这一个可实例化对象可以被 认为是包容对象的父对象,包容对象可以从其父对象内被实例化。例如,在模型包含具有关 联A=>B和B=>A的循环的情况中,可以生成以下可实例化对象:
[0029] A public A() {//constructor} B blnstanceObject = new B() B Public B() {//constructor} A alnstanceObject = new A();
[0030] 在前面,blnstanceObject和alnstanceObject可以被视为包容对象,每一个包容 对象可以从相应的父对象A和B内被实例化。
[0031] 在各种实例中,信息模型可以包括一个或多个循环。每一个循环可以继而包括两 个或更多相关对象的序列,这些对象中的至少一个引用(指向)另一个对象,并且由同一另 一个对象(例如图1)或其他对象(例如图2)返回引用。在该循环中,第一对象可以通过前 向支配关联与第二对象相关。然后,第二对象或后面的(例如第三)对象可以通过反向非支 配关联与第一对象返回相关。例如,考虑以下循环,其中对象A引用另一个对象B,该另一 个对象B返回引用对象A。在该情况下,A=>B (对象A引用对象B)可以描述支配关联,而 B=>A (对象B引用对象A)可以描述非支配关联。在各种示例中,非支配关联(例如B=>A) 可以视为逆关系,并且引用对象(例如对象A)可以视为逆对象(节点)。并且如上所述,术语 "第一"、"第二"、"第三"等不应当视为暗示代码内的相应对象的特定顺序。
[0032] 如在背景部分中所解释的,为信息模型自动生成代码的现有解决方案需要去除模 型内的任何循环。类似地,示例实施方式的代码生成系统402可以被配置为识别信息模型 中的任何循环,并且在每个这种情况下,确定可以在生成的代码中保留的支配关联。但是, 示例实施方式的代码生成系统并非"抛弃"非支配关联,而是可以通过可用作密钥以通过代 理访问关系的一个或多个对象属性捕获并且重新引入关系。
[0033] 根据示例实施方式,代码生成系统402可以扁平化模型对象或将模型对象分层, 以便维护丰富的对象关系,同时仍然自动生成合适的计算机可读程序代码。如上所述,循环 可以包括通过支配关联与第二对象(例如,对象B)相关的第一对象(例如,对象A),其中第 二对象或后面的对象通过非支配关联与第一对象返回相关。并且生成的代码(可实例化信 息模型)可以包括第一和第二对象中的相应对象的可实例化的第一和第二对象,并且还可 能包括后面的对象的后面的可实例化对象。
[0034] 例如如在图5中所示,通过第一可实例化对象包含第二可实例化对象以便从其内 进行实例化,支配关联可以被保留在生成的代码中。但是对于非支配关联,第二或后面的可 实例化对象可以包括识别第一对象的引用的可实例化对象(或简称"引用对象")的对象限 定符,而不是由第二或后面的可实例化对象包含第一可实例化对象。然后,对象限定符可以 用作在运行期通过共享对象注册表访问引用对象的密钥。引用对象可以与第一可实例化对 象对应,但是可以通过对象注册表而不是从第二或后面的可实例化对象(其父对象)内进行 实例化。本发明的示例实施方式可以在以下背景中更具体地描述:代码生成系统402被配 置为用第一对象的包容对象生成第二/后面的可实例化对象,并且然后从第二/后面的可 实例化对象移除相应的包容对象,并且用对象限定符取代它。在以上示例中,给定非支配关 联B=>A,包容对象alnstanceOb ject可以被移除并且用对象限定符取代。然而应该理解,代 码生成系统可以等同地被配置为简单地用对象限定符而不是第一对象的包容对象生成第 二/后面的可实例化对象。
[0035] 对象限定符可以任何数目的不同方式构造。例如,对象限定符包括JavaScript对 象表示法(JS0N)格式化的字符串,包括完全限定的引用对象、完全限定的包容对象名称和 它们的基数。在一个示例中,对象限定符可以通过唯一标识符(UID)唯一地识别引用对象, 例如新的全局WD (⑶ID)属性(例如,最简单的全局⑶ID属性可以是类名本身),其可以用 于在共享对象注册表内访问。
[0036] 代码生成系统402可以基于对象限定符通过代理建立对象注册表以包含用于运 行期实例化的对象UID。在各种示例中,代码生成系统可以使用诸如注册表模式、代理模式、 工厂方法模式、单件模式等的任何数目的面对对象设计模式来建立它。注册表模式定义对 象(注册表),其它对象可以使用该对象访问数据、设置、值和其它对象。代理模式间接通过 用作另一对象的代理的代理对象强制使对一个对象的方法调用发生,从而将方法调用委托 给该对象。工厂方法模式定义用于创建对象的工厂,该对象让实现它的类决定哪个类实例 化,并且可以允许类将实例化推迟到子类。并且单件模式将类的实例化限制到一个对象。
[0037] 对象定义可以包括WD和注册表访问器(包含符合工厂方法的代理代表,例如使 用基于单件的基数),从而通过逆对象的不透明引用而允许循环引用。除了生成对象接口定 义外,代码生成系统402可以创建对象注册表,其包括代理以有助于访问引用对象。在该方 法下,非支配关联的包容对象(逆对象)可以被移除,并且用唯一地识别相应的包容对象(例 如,通过类引用)的对象限定符取代。然后,对象注册表和代理可以允许对这些引用对象进 行实例化。
[0038] 示例实施方式中的基于工厂方法的技术可以基于在包容类的构造函数中引用对 象的实例化,消除防止类实例化的循环引用。出于说明目的,在一个类("A")包含另一个类 ("B")的对象引用,并且类B包含类A的对象引用(双向关联而没有明确的支配方向),并且 每一个类在其构造函数中将其对象引用实例化的情况下,可能产生内存泄漏。为了避免这 种情况,类A可以包含GUID和基数基本类型成员变量,以及基本类型对象限定符成员变量, 其可以提供前述注册表访问器,以便由对象注册表用来将其实例化。对象注册表可以因此 断开在对象模型中创建的关联生成的循环本质,同时保持对象之间的关系。
[0039] 当基数值被设定时,对象注册表可以保持多个关联的对象。基数可以确定可能存 在多少个包容对象的实例。例如,1:1关联可以将实例化限制到一个实例,而1:3关联可以 在运行期允许三个单独的实例。
[0040] 图6和图7表示两种示例情形。图6示出了可实例化对象A包含包容对象B并 且代码生成系统402可以处理以去除包容对象并且应用⑶ID、基数和对象限定符的情况。 图7示出了可实例化对象C不处理包容对象并且代码生成系统可以因此处理以应用⑶ID 和基数而没有对象限定符的情况。在各种示例中,该处理可以用于包容对象或其子对象中 的一个包含逆关系的情况。这可以表现为对象B拥有对象A成员,或其可以更复杂(例如, A=>B=>E=>G=>D=>A)和 / 或多路径(例如,A=>B=>C=>A 和 A=>B=>D=>E=>G=>C=>A)。
[0041] 在现有解决方案中,模型对象关联的丰富性通常被丢弃,或需要大量的手工定制 以合并在运行期代码中。示例实施方式的方法可以提供在丰富模型关系的保留和可实例化 代码之间的折衷,这不仅可以在自动方式中保留这些关联,还为平台和语言之间的可移植 性提供了手段。该方法可以提供一种在运行期保持对象模型关联的丰富性同时避免循环引 用的至少一些缺点的机制。并且作为额外的好处,与语言无关的技术可以提供将生成的接 口端口化到多个平台和编译器的机制。
[0042] 在利用注册表模式的示例中,可以在以诸如Java的语言实现自动软件生成的情 况下开发隐藏垃圾收集。在这些情况中,如果堆栈增长并且然后收缩,则从堆栈弹出的对象 (以及由该过时对象引用的任何对象)即使在它们不再被引用时也不会被垃圾收集,这可能 是由于堆栈保持对这些对象的过时引用。为了解决在Java实现中的这个问题,对象注册表 可以使这些对象为空,以避免无意的对象保留。
[0043] 图8示出代码生成系统800,其在一个示例中可以与图4的代码生成系统402对 应。代码生成系统大致可以被配置为从其电子表示中自动生成可实例化模型信息。如图所 示,代码生成系统可以包括模型库802、适配器部件804、运行期循环图生成器806和关联的 运行期循环图808、对象注册表生成器810和关联的对象注册表图812以及对象引用管理器 814。同样如图所示,代码生成系统可以包括运行期代码生成器816。
[0044] 模型库802可以被配置为存储一个或多个产品的一个或多个信息模型,其可以被 标记以便保留但是也可以从库中移除。在一个示例中,模型可以响应于移除陈旧的保留模 型的有意用户直接命令而被移除。在另一个示例中,基于资源消耗水平(其可以由系统管理 员配置),模型可以在其期满之后例如以加权的先入先出(FIFO)技术被移除。用于模型期 满的权重可以是多元的。可以基于模型使用(频率和日期)和模型大小提供额外的权重。并 且可以添加进一步的权重,例如使用标准最小规则(SMR)语法(代数)。
[0045] 适配器部件804可以配置为实现用于模型转换的一个或多个可扩展适配器,并且 由此可以将多个不同格式的信息模型转换为公共格式,以便进行处理。这些格式可以包括 例如接口描述语言(IDL)、网络本体语言(0WL)等,它们中的任何一个可以用作公共格式 (例如IDL)。在这方面,适配器部件可以为各种类型和格式的模型吸收以及不同目标编译器 和运行期的源代码的创建提供可扩展方法。
[0046] 如上所指出的,模型可以包括对产品及其部件在层次划分方面的功能描述,并且 可以反映在各种部件之间的功能关系或关联。一旦被转换为公共格式,则循环图生成器 806可以遍历模型层次结构,并且识别模型内的任何循环。循环图生成器可以确定每一个 循环的可以被保留在后面生成的运行期模型制成品中的支配关联,或可以被移除的非支配 关联。在一些情况中,循环图生成器可以被配置为识别定向对象引用,其可以指示支配关联 (以及由此指示非支配关联)。在其它情况中,可以从非定向(双向)关联导出对象引用,这可 能需要额外的属性或性质(例如,基数)来导出支配/非支配关联。例如,在一对多的关联中 (例如,可以与"许多"B对象关联的"一个" A对象),A=>B关联可以视为支配关联。
[0047] 在其它情况中,支配/非支配关联可能是不确定的,并且可能期望保留所有的双 向对象关系。在这些情况中,可以采取任何数量的不同方法。根据一个方法,可以基于一般 因素进行分配,例如对象"流行性"(例如,对象之间的连接或关联的数量)和对象复杂性(例 如,不太流行/复杂的对象可以视为逆对象)。对象复杂性可以由对象性质和关联的数量和 大小确定。使用该方法,大多数流行对象(例如,具有最多关联的对象)可以视为支配对象 (即,与非支配关联中的逆对象关联的对象),其中节点复杂性提供可以在流行性是不确定 时使用的二次加权。这可以使用一组可编程规则调整(tailor)到域,因为有时可能存在可 帮助确定支配性的域专有属性(例如,诸如序列号的性质存在、将物理资产接地(ground)作 为支配,以及因此将支配/非支配关联的源接地)。
[0048] 根据另一个方法,或在以上方法无法识别支配/非支配关联的情况中,可以随机 分配相应的关联。这可以发生在例如当基数、流行度和复杂性(以及任何的域专有标识符) 无法解析支配/非支配关联时。或在其它示例中,两种关联可以在后面生成的运行期模型 制成品中被打破,但是保留作为非支配关联。
[0049] 不管循环图生成器806确定信息模型循环中的支配性的具体方式如何,循环图生 成器都可以在循环图808中捕获它。也就是说,循环图生成器可以创建循环图,对于信息模 型中的每一个循环,该循环图识别第二或后面的对象与第一对象的非支配关联。这些非支 配关联可以包括相应的包容对象,以便移除和用对象限定符取代。
[0050] 对象注册表生成器810可以创建对象注册表图812,其识别第二或后面的对象与 第一对象的非支配关联(并且可能地识别第二或后面的对象与信息模型的一个或多个其它 对象的任何关联),并且包括相应的第二或后面对象的第二或后面的实例化对象的一个或 多个生命周期策略。这些生命周期策略可以包括例如对数量和/或老化策略的一个或多个 约束。这些老化策略可以用于当对象不被需要时对其进行优化破坏,这可以与创建(例如, 生成新对象的时间)、维护(例如,内存)和/或破坏(例如,垃圾收集)针对计算惩罚进行权衡 (trade)。在各种示例中,对象注册表图812可以仅维护唯一的对象HD (例如⑶ID),并且 在这些示例中,对象注册表图还可以管理唯一的对象计数值。对象WD的重复实例可以由 对象引用管理器814管理。
[0051] 运行期代码生成器816可以基于信息模型、循环图808、对象注册表图812以及可 能地基于来自对象引用管理器814的输入生成信息模型的运行期模型制成品。运行期代码 生成器可以使用保留在循环图中的循环来预处理模型,从而识别并且创建用于对象注册表 密钥的对象限定符。运行期模型制成品可以包括具有信息模型对象中的相应对象的多个可 实例化对象的可实例化信息模型,信息模型对象中的各个对象可以包括对象限定符。运行 期模型制成品还可以包括基于对象限定符访问引用对象的对象注册表。通过对象引用管理 器管理的对象的重复实例可以被传递给运行期代码生成器,在一个示例中,运行期代码生 成器可以根据合适的基数值限制引用对象的实例数量。
[0052] 图9示出根据一个示例实施方式的运行期模型制成品900。如图所示,制成品可以 包括具有在目标可编译或可执行语言中的可实例化对象902的可实例化信息模型,以及负 责可实例化信息模型内的引用对象的管理和实例化的对象注册表904。模型的可实例化对 象中的各个对象可以包括到对象注册表的对象限定符906。并且对象注册表可以包括对象 管理器908、工厂910和对象注册表图912 (例如,对象注册表图812)。
[0053] 对象管理器908可以被配置为实现代理模式,其负责在整个对象生命周期中维护 引用对象的实例。对象管理器可以负责实例化(创建)、对象间访问(生命)和对象破坏(死 亡)。如果主对象(已经被确定为不包含循环或已经指定为支配对象/节点的对象)请求创 建非支配对象,则对象管理器可以管理非支配对象的创建(或再使用)。
[0054] 工厂910可以被配置为实现工厂方法模式,并且可以由对象管理器908使用,以便 对引用对象进行实例化。在一个示例中,工厂可以被配置为根据单件模式实现工厂方法模 式,从而根据基数值限制引用模式的实例。并且通过使用对象注册表图912,对象管理器可 以管理可实例化对象生命周期策略--确定与由循环图808以及管理非支配对象识别和打 平的规则决定的需求有关的创建、再使用和/或破坏。
[0055] 具有用于非支配关联的对象限定符906的可实例化对象902可以使用管理器访问 器方法以及对象限定符来请求相应的引用对象的实例。当引用对象需要被实例化为包容对 象(现有的可实例化父对象的成员)时,现有的父对象可以使用对象管理器访问器方法。该 方法可以接受对象限定符作为输入参数并且返回实例化的引用对象。如果该实例化的引用 对象已经存在,则可以返回现有的实例化的引用对象(基数值可能影响可实例化的新引用 对象的数量)。
[0056] 根据示例实施方式,在修改的DAG需要表示可实例化模型对象902之间的关联的 情况中,运行期模型制成品900可以以多种不同方式与传统的自动生成的可实例化模型对 象不同。在基于DAG模型的创建中移除的循环模型引用可以被重构在可实例化模型中并且 表述为字符串类型的对象限定符。具有对象注册表关联的对象可以处理GUID,并且可能地 还处理基数值。在运行期,对象注册表904可以基于预计算基数值以及包含在对象注册表 内的对象注册表图912而管理非支配关联。在可实例化对象902请求访问引用对象的情况 中,其可以将包括对象限定符字符串在内的对象访问器密钥呈现给对象注册表。引用对象 可以在需要时由对象注册表实例化,并且被返回到相应的可实例化对象。对象注册表可以 通过返回原始对象而不是将新对象实例化来管理后向引用。以这种方式,示例实施方式的 运行期模型制成品900不必折衷地移除后向关联(逆节点)。
[0057] 根据本发明的示例实施方式,模型管理系统400及其包括代码生成系统402在内 的子系统可以由各种手段实现。类似地,代码生成系统800(包括其相应元件的每一个)的示 例可以根据示例实施方式由各种手段实现。用于实现系统、子系统和它们相应元件的手段 可以包括单独的硬件,或在来自计算机可读存储介质的一个或多个计算机程序代码指令、 程序指令或可执行计算机可读程序代码指令的引导下的硬件。
[0058] 在一个示例中,可以提供一个或多个装置,其被配置为用作或实现在此示出和描 述的系统、子系统和相应元件。在涉及多于一个装置的示例中,相应的装置可以以多种不同 方式(例如,经由有线或无线网络等直接或间接)彼此连接或通信。
[0059] 通常,本发明的示例实施方式的装置可以包含、包括或体现在一个或多个固定或 便携式电子设备中。合适的电子设备的示例包括智能电话、平板计算机、膝上型计算机、台 式计算机、工作站计算机、服务器计算机等。该装置可以包括多个部件中的每一个部件的一 个或多个,例如连接到存储器(例如,存储设备)的处理器(例如,处理器单元)。
[0060] 处理器通常是能够处理诸如数据、计算机可读程序代码、指令等(一般为"计算机 程序",例如软件、固件等)的信息和/或其它合适的电子信息的任何数量的硬件。更具体地, 例如,处理器可以配置为执行计算机程序,计算机程序可以被存储在处理器上,或被存储在 (同一或另一个装置的)内存中。处理器可以是多个处理器、多处理器核心或一些其它类型 的处理器,这取决于具体的实施方式。此外,处理器可以使用多个异构处理器系统实现,其 中主处理器与一个或多个辅助处理器存在于单个芯片上。作为另一个说明性示例,处理器 可以是包含同一类型多个处理器的对称多处理器系统。在另一个示例中,处理器可以体现 为或包括一个或多个专用集成电路(ASIC)、现场可编程门阵列(FPGA)等。因此,虽然处理 器能够执行计算机程序以执行一个或多个功能,但是各种示例的处理器能够执行一个或多 个功能而不需计算机程序辅助。
[0061] 存储器通常是能够临时和/或永久性存储诸如数据、计算机程序的信息和/或其 它合适的信息的任何数量的硬件。存储器可以包括易失性和/或非易失性存储器,并且 可以是固定的或可移除的。合适的存储器的示例包括随机存取存储器(RAM)、只读存储器 (ROM)、硬件驱动器、闪存、指状存储器、可移除计算机磁盘、光盘、磁带或以上的一些组合。 光盘可以包括压缩盘-只读存储器(⑶-ROM)、压缩盘-读/写(⑶-R/W)、DVD等。在各种实 例中,存储器可以称为计算机可读存储介质,作为能够存储信息的非暂时性设备,所述计算 机可读存储介质可以与计算机可读传输介质区分开,例如能够从一个位置到另一个位置运 送信息的电子暂态信号。如在此描述的计算机可读介质一般可以指代计算机可读存储介质 或计算机可读传输介质。
[0062] 除了存储器之外,处理器还可以连接到一个或多个接口,用于显示、发送和/或接 收信息。接口可以包括通信接口(例如,通信单元)和/或一个或多个用户接口。通信接口 可以被配置为例如到和/或自其它设备、网络等发送和/或接收信息。通信接口可以被配 置为通过物理(有线)和/或无线通信链路来发送和/或接收信息。合适的通信接口的示例 包括网络接口控制器(NIC)、无线NIC (WNIC)等。
[0063] 用户接口可以包括显示器和/或一个或多个用户输入接口(例如,输入/输出单 元)。显示器可以配置为呈现或显示信息给用户,其合适的示例包括液晶显示器(LCD)、发光 二极管(LED)、等离子体显示板(PDP)等。用户输入接口可以是有线或无线的,并且可以被 配置为从用户接收信息到装置中,例如以便进行处理、存储和/或显示。用户输入接口的合 适示例包括话筒、图像或视频捕获设备,键盘或小键盘、操纵杆、触摸敏感表面(与触摸屏分 离或集成到触摸屏)、生物传感器等。用户接口可以进一步包括用于与外围设备(例如,打印 机、扫描仪等)通信的一个或多个接口。
[0064] 如上指出的,程序代码指令可以被存储在存储器中,并且可以由处理器执行,以实 现在此描述的系统、子系统和它们相应元件的功能。如将理解的,任何合适的程序代码指令 可以从计算机可读存储介质加载到计算机或其它可编程装置上,从而产生特定的机器,使 得特定的机器变为用于实现在此指定的功能的手段。这些程序代码指令还可以被存储在计 算机可读存储介质中,计算机可读存储介质可以引导计算机、处理器或其它可编程装置以 特定的方式起作用,从而生成特定的机器或特定的制造物品。在计算机可读存储介质中存 储的指令可以产生制造物品,其中制造物品变为用于实现在此描述的功能的手段。程序代 码指令可以从计算机可读存储介质获取并且加载到计算机、处理器或其它可编程装置中, 从而配置计算机、处理器或其它可编程装置以执行要在计算机、处理器或其它可编程装置 上或由计算机、处理器或其它可编程装置执行的操作。
[0065] 程序代码指令的获取、加载和执行可以顺序执行,使得一次获取、加载和执行一条 指令。在一些示例实施方式中,获取、加载和/或执行可以并行执行,使得一起获取、加载和 /或执行多条指令。程序代码指令的执行可以产生计算机实现的过程,使得由计算机、处理 器或其它可编程装置执行的指令提供实现在此描述的功能的操作。
[0066]由处理器执行指令或在计算机可读存储介质中存储指令支持了用于执行指定功 能的操作的组合。将理解的是,一个或多个功能和功能组合可以由执行指定功能的专用的 基于硬件的计算机系统和/或处理器实现,或专用硬件和程序代码指令的组合实现。
[〇〇67] 在前面描述和关联附图中所呈现的教导的益处下,本发明涉及的本领域技术人员 将想到在此阐述的本发明的许多修改和其它实施方式。因此,应该理解,本发明不限于在 此提供的特定示例实施方式,并且修改和其它实施方式旨在包括在所附的权利要求的范围 内。此外,虽然前面描述和相关附图在元件和/或功能的某些示例组合的背景下描述了示 例实施方式,但是应该理解,元件和/或功能的不同组合可以由替代实施方式提供,而不背 离所附的权利要求的范围。在这方面,例如,与以上那些明确描述的元件和/或功能不同的 元件和/或功能的组合也被认为可以在一些所附的权利要求中阐述。虽然在此使用具体术 语,但是它们仅以通用且描述性的意义使用,而不是为了限制。
【权利要求】
1. 一种包括代码生成系统(402)的模型管理系统(400),其包括: 循环图生成器(806),其被配置为遍历具有多个对象的信息模型,所述多个对象中的至 少一些形成循环,所述循环图生成器(806)被配置为创建循环图(808),对于该循环,所述 循环图识别第二或后面的对象与第一对象的非支配关联; 对象注册表生成器(810),其被配置为创建对象注册表图(812),所述对象注册表图 (812)识别所述非支配关联并且包括相应的第二或后面的对象的第二或后面的可实例化对 象的一个或多个生命周期策略;以及 运行期代码生成器(816),其被配置为基于所述信息模型、循环图(808)和对象注册表 图(812)而生成可实例化信息模型和对象注册表(904), 其中所述可实例化信息模型的生成包括所述信息模型的相应对象的多个可实例化对 象(902)的生成,包括第二或后面的可实例化对象的生成,对于所述非支配关联,第二或后 面的可实例化对象包括对象限定符(906), 其中运行期代码生成器(816)被配置为生成包括包含的第一可实例化对象的第二或 后面的可实例化对象,并且然后移除该包含的第一可实例化对象,并且用所述对象限定符 (906 )取代它,所述对象限定符(906 )识别要通过所述对象注册表(904 )被实例化的所述第 一对象的引用对象,而不是要从所述第二或后面的可实例化对象内被实例化的包含的第一 可实例化对象,由此打破在模型中创建的关联生成的循环本质同时保持对象之间的关系。
2. 根据权利要求1所述的模型管理系统(400),其中所述对象限定符(906)用作通过对 象注册表访问引用对象的密钥。
3. 根据权利要求1所述的模型管理系统(400),其中所述第一对象通过支配关联与所 述第二对象相关,并且所述第二或后面的对象通过所述非支配关联与所述第一对象返回相 关,以及 其中所述可实例化对象(902)的生成包括所述第一可实例化对象的生成,对于所述支 配关联,所述第一可实例化对象包含所述第二可实例化对象,以便从其内进行实例化。
4. 根据权利要求1-3所述的模型管理系统(400),其中所述运行期代码生成器(816)被 配置为使用多个面向对象设计模式生成所述可实例化信息模型,所述面向对象设计模式包 括代理模式和工厂(910)方法模式,以及 其中由所述运行期代码生成器(816)生成的所述对象注册表(904)包括:对象管理 器(908),其被配置为实现所述代理模式以管理所述引用对象的实例化;以及对象工厂 (910),其被配置为实现工厂(910)方法模式以将所述引用对象实例化。
5. 根据权利要求4所述的模型管理系统(400),其中所述面向对象设计模式进一步包 括单件模式,以及 其中对象工厂(910)被配置为根据所述单件模式实现工厂(910)方法模式,从而根据 基数值限制所述引用模式的实例。
6. 根据权利要求1-5所述的模型管理系统(400),其进一步包括: 模型库(802),其被配置为存储一个或多个信息模型,所述一个或多个信息模型中的至 少一些可根据加权的先入先出技术被移除,所述循环图生成器(806)被配置为从所述模型 库(802)接收所述信息模型。
7. 根据权利要求1-6所述的模型管理系统(400),其进一步包括: 适配器部件(804),其被配置为将所述信息模型从多个不同格式中的任何格式转换为 所述信息模型被遍历的公共格式。
8. -种用于代码生成的方法,其包括: 遍历具有多个对象的信息模型,所述多个对象中的至少一些形成循环,并且创建循环 图(808),对于该循环,所述循环图识别第二或后面的对象与第一对象的非支配关联; 创建对象注册表图(812),所述对象注册表图(812)识别所述非支配关联并且包括相 应的第二或后面的对象的第二或后面的可实例化对象的一个或多个生命周期策略;以及 基于所述信息模型、循环图(808)和对象注册表图(812)而生成可实例化信息模型和 对象注册表(904), 其中所述可实例化信息模型的生成包括所述信息模型的相应对象的多个可实例化对 象(902)的生成,包括所述第二或后面的可实例化对象的生成,对于所述非支配关联,所述 第二或后面的可实例化对象包括对象限定符, 其中生成所述可实例化信息模型包括生成包括包含的第一可实例化对象的所述第二 或后面的可实例化对象,并且然后移除该包含的第一可实例化对象并且用所述对象限定符 取代它,所述对象限定符识别要通过所述对象注册表(904)实例化的所述第一对象的引用 对象,而不是要从所述第二或后面的可实例化对象内实例化的包含的第一可实例化对象, 由此打破在模型中创建的关联生成的循环本质同时保持对象之间的关系。
9. 根据权利要求8所述的方法,其中所述对象限定符(906)用作通过对象注册表访问 所述引用对象的密钥。
10. 根据权利要求8所述的方法,其中所述第一对象通过支配关联与所述第二对象相 关,并且所述第二或后面的对象通过所述非支配关联与所述第一对象返回相关,以及 其中所述可实例化对象(902)的生成包括所述第一可实例化对象的生成,对于所述支 配关联,所述第一可实例化对象包含所述第二可实例化对象,以便从其内进行实例化。
【文档编号】G06Q10/06GK104102971SQ201410146055
【公开日】2014年10月15日 申请日期:2014年4月11日 优先权日:2013年4月11日
【发明者】W·D·凯尔西, D·H·琼斯 申请人:波音公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1