CN101617292A - 面向生成器图形的编程和执行 - Google Patents

面向生成器图形的编程和执行 Download PDF

Info

Publication number
CN101617292A
CN101617292A CN200780050659A CN200780050659A CN101617292A CN 101617292 A CN101617292 A CN 101617292A CN 200780050659 A CN200780050659 A CN 200780050659A CN 200780050659 A CN200780050659 A CN 200780050659A CN 101617292 A CN101617292 A CN 101617292A
Authority
CN
China
Prior art keywords
maker
dependence
producer graph
key word
class
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN200780050659A
Other languages
English (en)
Other versions
CN101617292B (zh
Inventor
F·沙米耶
E·埃德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Murex SAS
Original Assignee
Murex SAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Murex SAS filed Critical Murex SAS
Publication of CN101617292A publication Critical patent/CN101617292A/zh
Application granted granted Critical
Publication of CN101617292B publication Critical patent/CN101617292B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4494Execution paradigms, e.g. implementations of programming paradigms data driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation

Abstract

一种用于面向生成器图形的编程和执行的方法和设备。根据本发明的一个方面,提供解释用于方法的生成器依赖性声明的运行时。生成器依赖性声明在运行时标识一组零个或多个生成器,其中生成器是运行时可实例化的结构,该结构至少包括实例和与该实例相关的方法。响应于感兴趣生成器的命名的接收,运行时自动生成和执行生成器图形,所述感兴趣生成器的方法具有生成器依赖性声明。生成器图形初始包括感兴趣生成器并基于生成器图形中已经存在的生成器的方法的生成器依赖性声明通过实例化而从感兴趣生成器到源生成器被生成。运行时对由生成器图形指示的生成器图形中的生成器的执行进行排序。

Description

面向生成器图形的编程和执行
技术领域
本发明的实施方式涉及计算机领域;且更具体地,涉及利用运行时(runtime)来编程和执行代码的领域。
背景技术
面向对象编程
面向对象编程是一种计算机编程范例。在面向对象编程的后面的理念是计算机程序可以被视为包括相互作用的单个单元(称为对象或实例)的集合,而不是传统地将程序视为函数的集合或简单视为用于计算机的指令列表。对象是用于将数据与操作该数据的方法绑定的语言机制。每一个对象能够通过方法被调用、处理数据以及向其他对象提供结果。每一个对象可以被视为具有独特角色或职责的独立机器或施动者。
反射式面向对象的语言是具有特定的特性集合的编程语言(例如,类、对象/实例、继承、反射等),但是反射式基于对象的语言有时用于标记具有这些特性的一些子集(例如对象)的编程语言。出于本文的需要,短语“面向对象源代码”以及“面向对象代码”用于指用具有这些特性的语言编写的代码(例如,用反射式面向对象的语言编写的代码、用反射式基于对象的语言编写的代码)。在过程语言、非发射式面向对象的语言以及非反射式基于对象的语言是一般不支持这些特性的编程语言的情况下,转换技术可以用于将这些特性提供给(例如,通过仿真)适合用这些语言编写的代码;且由此,这些技术将这些语言转换成反射式基于对象的语言或反射式面向对象的语言。(这些技术不需要仿真面向或基于对象的语言的所有特性,而是可以只仿真对本文剩余部分感兴趣的这些特性)。出于本文的需要,短语“面向对象源代码”和“面向对象代码”还可以用于指这些转换后的过程语言代码、非反射式面向对象、以及非反射式基于对象的语言代码。通过示例的方式而并非限定,本文主要描述用反射式面向对象的语言编写面向对象源代码。同样,术语对象和实例在这里可以互换使用。
在面向对象编程中主要使用的术语方法指专门与类(称作类方法、静态方法或工厂方法(factory method))或对象(称为实例方法)相关联的一段代码。如同过程编程语言中的过程,方法通常包括执行动作的语句序列、将这些动作参数化的输入参数的集合以及可能还有返回的一些种类的输出值。
当程序员使用面向对象语言写程序时,产生的代码从概念上可以视为包括四种基本类型的代码。第一种类型包括操作输入的实例以提供输出实例的命令(这里称为“转换”代码);一般被写为方法(这里称为“转换”方法)。第二种类型包括引起运行时以实例化类实例的实例实例化命令(这里被称为“实例实例化”代码)。第三种包括调用以上实例的属性方法(存取程序、转变器(mutator)等)的属性操作命令(这里称为“数据准备”代码)。第四种包括命令序列,该命令序列使用合适的实例(其中合适的实例包括用作参量(argument)的实例、实例方法使用的实例以及类方法使用的元类实例)启动方法调用排序,以规定什么实例的什么转换方法被调用,以什么顺序,以及利用哪些实例的哪些参数响应于数据准备代码做出的改变(这里称为“手动调用排序”代码)。手动调用排序代码有时被编写为与转换方法分开的方法,且从而手动调用排序代码包括用于转换方法的调用命令序列。程序一般在数据准备代码与手动调用排序代码(其还可以提取(dip into)实例实例化代码)之间重复,所述手动调用排序代码可以再调用转换代码(其也可以提取实例实例化代码和数据准备代码)。应当理解这是程序的概念性描述,因此,不应当认为在看待程序上是绝对的。
运行时
术语运行时在这里用于指运行用相同和/或不同语言编写的其他代码的基本代码的程序或库。由此,运行时是在程序运行时(包括与操作系统一起工作以提供功能诸如数学函数、输入和输出)支持程序的效用函数的集合。这些使程序员没有必要不断地重新编写在编程语言中规定的或操作系统提供的基本能力。由于运行时与操作系统之间的区分可能模糊,因此术语运行时在这里用于指与操作系统分开的代码和/或是操作系统一部分的代码。
早期运行时,例如FORTRAN的运行时,提供诸如数学运算的特征。其他语言添加了更复杂的特征——例如存储器无用信息集合,通常与对象支持相关联。最近的语言倾向于具有相当大的具有相当多功能的运行时。许多面向对象的语言还包括已知为“调度程序”和“类装载器”的系统。Java VirtualMachine(JVM)是这种运行时的一个示例:其还在运行时解译或汇编可动二进制Java程序(字节代码)。公共语言运行时(CLR)框架是运行时的另一个示例。
编程和执行框架
一种框架包括三个基本区域,在该框架中向终端用户提供应用。第一个区域包括操作系统和运行时的创建。该第一个区域由具有非常高级编程技能的程序员来执行。当在该区域工作时,程序员分别被称为操作系统程序员和运行时程序员。当创建面向对象语言的运行时的时候,运行时程序员支持执行在转换代码、实例实例化代码、数据准备代码以及手动调用排序代码中使用的各种类型的命令(例如,实例实例化命令、数据准备命令以及方法调用命令)。
第二个区域包括由运行时运行的面向对象应用源代码的创建。第二个区域再次由具有非常高级编程技能以及能理解应用的业务目的的程序员来执行。当在该区域中工作时,程序员被称为应用程序员。当用面向对象的编程语言创建应用时,应用程序员为要被创建的特定应用编写特定的转换代码、实例实例化代码、数据准备代码以及手动调用排序代码。作为这些的一部分,如果应用需要图形用户界面,则应用程序员还为特定应用设计图形用户界面并编码;从而还被称为应用设计者。
第三个区域包括由运行时运行的应用程序的使用。第三个区域由不需要具有任何编程技能的终端用户来执行。
手动调用排序代码
与应用的创建相关联的最大的开销一般包括手动调用排序代码的调试和/或优化。对于数据改变的每次时机,应用程序员必须考虑其影响并编写手动调用排序代码以使合适实例的合适转换方法随着合适的输入以合适的顺序被调用。应用程序员犯的典型错误包括:1)以错误的顺序调用合适实例的合适转换方法;2)响应于一些改变的数据忘记包括使一个或多个所需的实例转换方法被调用的命令;3)响应于一些改变的数据包括使不需要的实例转换方法被调用的命令(例如,包括调用不受数据改变影响的实例转换方法的命令)等。
通过举例的方式,生成手动调用排序代码的一种技术是使用观察者模式(有时称为“发布订阅”)以观察程序中实例的状态。在该观察者模式中,一个或多个实例(称为观察者或监听者)被注册(或自己注册)以观察被观察对象(主体)可能引发的事件。可以引发事件的被观察实例通常保留注册的观察者的集合。当事件被引发时,每一个观察者从被观察实例接收回调(被观察实例调用注册的观察者中的“通知”方法)。通知功能可以传递一些观察者可以使用的参数(一般是关于发生的事件的信息)。每一个观察者执行通知功能,最后在通知出现时定义其自身的行为。
被观察实例一般具有用于添加新观察者的注册方法和用于在事件被引发时从将被通知的实例列表中移除观察者的非注册方法。此外,被观察实例还可以具有用于暂时停止然后重新启动调用以防止多个相关更新低效层叠的方法。具体地,响应于属性值的改变而被调用的回调还常常改变一些其他属性的值,触发另外的回调等。
当使用观察者模式技术时,编写手动调用排序代码的应用程序员通过将观察者注册、注销、停止以及重新启动到不同的被观察实例以及为每一个实例编写通知方法和回调方法来规定调用什么示例、用哪种顺序以及通过注册来利用哪个输入。更具体地,观察者与被观测实例之间的关系在观察者模式内被本地管理(仅由被观测实例单独管理,不需要与其他被观测实例同步),从而需要根据多个被观察实例来同步事件的手动调用排序代码一般是每一个观察者的特定回调方法的一部分。
重写易失性调用栈(Overwriting,Volatile Call Stack)
一般的运行时使用重写、易失性调用栈来堆积当前调用的未完成的调用。重写、易失性调用栈的重写在于:当每一次调用完成时,该栈出栈并抛弃项,而易失性在于该栈在每一次执行都被抛弃并重建。一般的运行时使用重写、易失性调用栈是因为一般的运行时响应于手动调用排序代码的执行来将重写、易失性调用栈的建立与具有合适输入的合适实例的合适转换方法的实际调用相结合。总之,响应于手动调用排序代码的执行,一般的运行时一个调用一个调用地(在做出每一个调用时)确定转换方法/实例排序并保留重写,易失性调用栈以只跟踪当前调用的未完成的调用。
对象关系映射
对象关系映射是链接关系数据库与面向对象语言概念的编程技术,(有效地)创建了“虚拟对象数据库”。一些对象关系映射程序自动保持存储器中装载的实例与数据库稳定同步。具体地,在构建了对象到SQL的映射查询之后,首先返回的数据被复制到正在处理的实例的字段中,例如任意的对象-SQL映射包。一旦这样,实例必须查看这些值是否改变,然后谨慎地使进程逆向以将数据写回到数据库外部。
Hibernate 3.0是用于Java和CLR的对象关系映射方案(乔治亚州亚特兰大市的
Figure A20078005065900401
公司)。从而,Hibernate提供用于将面向对象域模型映射到传统的关系数据库的框架。其目标是将开发者从一些公共数据持续性相关的编程任务中解脱出来。Hibernate处理从类到数据库表的映射(且从面向对象数据类型到SQL数据类型)以及提供数据查询和获取功能。Hibernate是以实例为中心并且建立表示实例之间关系的图形。
控制倒置和依赖倒置原理
控制倒置,也被称为IOC,是可以被用于减少计算机程序中固有的耦合性(每个程序模块依赖另一个模块的程度)的面向对象编程原理。IOC还被称为依赖倒置原理。在IOC中,如果以下任意一个适用,则类x依赖类y:1)x具有y并调用y;2)x是y;或者3)x依赖某个类z,而z依赖y(传递性)。值得注意x依赖y并不意味着y依赖x;如果两种情况为真,则称为循环依赖性;那么x在没有y的情况下不能被使用,反之亦然。
实际上,如果(类x的)对象x调用(类y的)对象y的方法,则类x依赖y。通过引入第三个类即接口类I来倒置依赖性,该接口类I必须包括x可以在y上调用的所有方法。此外,y必须被改变从而使得y实施接口I。x和y现在都依赖接口I以及类x不再依赖y(假定x没有实例化y)。通过引入接口I来消除类x对y的依赖性被称为控制倒置(或依赖倒置)。必须注意y可能依赖其他类。在应用转换之间,x依赖y并由此x间接依赖y所依赖的所有类。通过应用控制倒置,所有这些间接依赖性也被打破了。新引入的接口I不依赖任何类。
Spring Framework是用于使用IOC和依赖倒置的Java平台的开放资源应用框架。具体地,Spring Framework的核心是控制容器的倒置,所述控制容器提供配置并管理Java对象的工具。该容器还被称为BeanFactory、ApplicationContext或Core容器。该容器操作的示例为:创建对象、配置对象、调用初始化方法并将对象传递到注册的回调对象。由容器创建的对象还被称为被管理对象(Managed Objects)或Bean。通常通过装载包含Bean定义的XML文件来配置容器。这些提供创建对象所需的所有信息。一旦在没有产生错误的条件下创建并配置对象,则对象可使用。通过依赖性查找或依赖性注入可以得到对象。依赖性查找是调用程序向容器对象请求具有特定名称或特定类型的对象的方式。依赖性注入是容器经由构造器、属性或工厂(factory)方法按名称将对象传递给其他对象。因此,Spring Framework是以存储器为中心的,并建立表示实例之间关系的图形。
图形工具
JavadocTM是解析一组Java资源文件中的声明和文件注释并产生对应的一组的HTML页的工具,该HTML页表示(默认地)公共和受保护类、套嵌类(不是匿名内部类)、接口、构造器、方法以及字段(加利福尼亚州,圣克拉拉市的Sun
Figure A20078005065900411
公司)。Javadoc可以用于生成API(应用编程接口)文件或用于一组源文件的执行文件。Javadoc是类和方法为中心的并建立表示类的组合及其方法之间的关系的图形。
用于设计软件应用的另一个系统包括由解释器分析的用于表示并复制计算机应用的对象的图形。该系统使用存储在代码库中的预写编程类,该类可以被编写以遵循在以下文档中描述的设计模式:Addison Wesley1995年出版的Gamma等人的“Design Pattern”、Computer Publishing1998年出版的Grand,Wiley的“Pattern in Java”、和/或高级计算机辅助软件工程(CASE)工具。更具体地,一些这样的类基于观察者行为方式。预编写的代码库表示应用状态节点、处理逻辑以及不同应用状态间的系统数据流(即,预编写的应用数据元素),从而用户在创建软件应用时不需要编写、编辑或编译代码。而是,用户通过编辑与当前应用状态节点相关联的可视对象(例如应用状态节点中的数据或在应用状态节点中执行的进程)来手动编辑图形用户界面中的软件应用。之后,基于用户对当前应用状态节点做出的改变,解释器针对刚被编辑的应用状态向用户显示更新后的应用状态。系统然后可以沿着用户定义的过渡边缘过渡到另一个应用状态,在该另一个应用状态用户可以编辑下一个应用状态或过度边缘。在软件应用运行时可以对解释器执行的图形实例做出图形改变。
用于设计软件应用的系统可以包括运行软件应用的可视表示,该运行软件应用可以被制定为利用应用控制器“可以被用”。当用户改变表示运行软件应用的可视对象时,控制器使用输入来促使解释器改变图形。然后控制器等待更多的改变。此外,这种软件应用的可视表示可以作为XML文件被输入或输出,该XML文件描述应用的可视表示从而描述软件应用。
为了以节点、定向的边缘以及应用状态的可视表示的形式编辑和/或创建软件应用,系统还可以包括应用程序接口和应用编辑器。来自预编写的代码库中的关键词和相关定义使应用开发者能手动定义软件应用、处理步骤,以及通过在编辑器中提供图形应用的图形表示得到的软件应用的可视表示,所述图形应用与实际应用结构密切相关。用户通过“应用定义向导”定义新应用,该“应用定义向导”在完成某些初步事情后将新应用显示为编辑器工作区中的图形组件。用户还通过使用电脑鼠标和键盘从显示的预先创建的可能应用组件列表中选择并将组件拖动并放入工作区来与应用交互。用户可以选择组件并在已有的组件上“拖动”组件。当新组件“落到”已有组件上,则该新组件成为应用图形中已有组件的子组件。应用中的组件的关系由编辑器中的用户选择手动定义。因此用户建立表示应用的树结构。当应用被创建,用户可以选择应用导航视窗来显示构建的应用的树视图,该树视图能够选择并编辑应用的任何组件。编辑器界面处理用户输入和选择,包括创建或删除应用元素、更新组件属性以及更新应用的显示属性。
上述的系统在使用软件应用的可视表示时还可以用作定义并更新相关数据库的可视编程工具。系统使用软件应用的可视表示的XML描述。工具解析并解释XML描述以产生等价的关系数据库表图示以及该图示的改变。当数据在软件应用的可视表示内发生改变时,该改变的描述与其他改变一起被存储在日志文件中且之后被作为分组处理。中间程序(在其自身的线程上操作的java应用程序)执行软件应用的可视表示与关系数据库之间的事务。Java应用程序轮询(即,检查)可视表示(即数据库中的数据)的节点改变的日志,且如果存在改变,就对数据库做出更改。因此,通过更换可视表示中的数据,系统可以更新数据库。相似的应用程序在软件应用程序的可视表示与处理来自数据库的数据请求的数据库之间也是有效的。
用于分析软件的另一种系统称为代码树分析器(CTA)。CTA分析用面向对象编程语言编写的静态源代码。CTA从静态源代码中生成符号表和调用树。使用符号表,CTA生成类图。类似地,使用调用树,CTA生成序列图。类图阐释用户选择的类和与所述用户选择的类相关的类之间的关系。序列图阐释不同方法被调用的顺序。通过使用类图和序列图,CTA生成表示静态源代码的设计制品。当用户修改所述设计制品时,CTA使用序列图来标识源代码的受影响的部分。所述设计制品用于代码维护和/或静态源代码的逆向工程。
发明内容
描述了用于面向生成器图形编程和执行的方法和设备。根据本发明的一个方面,提供了为方法解释生成器依赖性声明的运行时。所述生成器依赖性声明在运行时标识一组零个或多个生成器,其中生成器是运行时可实例化的结构,包括至少实例和与实例相关的方法。运行时响应于对要被实例化的感兴趣生成器的命名(designation)的接收而自动生成和执行,所述感兴趣生成器的方法具有生成器依赖性声明和生成器图形。生成器图形初始包括感兴趣生成器,并从感兴趣生成器到源生成器,通过基于已经在生成器图形中的生成器的方法的生成器依赖性声明来实例化生成器从而生成生成器图形。
附图说明
通过参照以下描述和附图可以更好地理解本发明,附图用于图示本发明的实施方式,其中:
图1A是示出了根据本发明一个实施方式的对面向对象源代码中类的方法的生成器依赖性声明与包括类、该类的给定实例和该类的方法的生成器的关系的框图;
图1B示出了根据本发明一个实施方式的生成器110A与父生成器114A.1之间的示例性关系;
图1C示出了根据本发明一个实施方式的生成器110A与子生成器112A.1之间的示例性关系;
图1D示出了根据本发明的一个实施方式的父生成器114和子生成器112到生成器110A的示例性关系组合;
图1E示出了根据本发明的一个实施方式的相同类的不同实例可以具有基于相同和/或不同方法的生成器;
图2是示出了根据本发明的一个实施方式的具有面向生成器图形编程支持的运行时的可重复使用性的框图;
图3A是示出了根据本发明的一个实施方式的具有面向生成器图形编程支持的运行时的框图;
图3B是示出了根据本发明的一个实施方式的具有面向生成器图形的编程支持的运行时的框图,该支持还支持增量执行(incremental execution)和被覆盖(override)的生成器的输出;
图4A是示出了根据本发明的一个实施方式的示例性生成器图形的发现和建立的框图;
图4B是示出了根据本发明的一个实施方式的图4A中生成器图形的初始执行的框图;
图4C是示出了根据本发明的一个实施方式的图4B中的生成器图形的增量执行的框图;
图4D是示出了根据本发明的一个实施方式的在相关生成器2被覆盖后的图4B中生成器图形的增量执行的框图;
图4E是示出了根据本发明的一个实施方式的在相关生成器2被覆盖且无关源生成器3被修改后图4B中生成器图形的增量执行的框图;
图5A是示出了根据本发明的一个实施方式的包括未解析的依赖性的示例性生成器图形的发现和建立的框图;
图5B是示出了根据本发明的一个实施方式的图5A中生成器图形的初始执行以及对未解析依赖性的解析的框图;
图5C是示出了根据本发明的一个实施方式的图5A中生成器图形的初始执行和/或图5B中生成器图形的重新执行的框图;
图5D是示出了根据本发明的一个实施方式的图5A中生成器图形的初始执行和/或图5B或5C中生成器图形的重新执行的框图;
图6是示出了根据本发明的一个实施方式的运行时客户端的逻辑执行流以及其与具有面向生成器图形编程支持的运行时的关系的流程图;
图7A示出了根据本发明的一个实施方式的使用快捷被声明依赖性的方法的生成器依赖性声明的伪代码;
图7B是根据本发明的一个实施方式的示例性生成器的框图;
图7C示出了使用非快捷被声明依赖性的方法的生成器依赖性声明的伪代码,并示出了示例性生成器的框图;
图7D示出了根据本发明的一个实施方式的使用非快捷依赖性的方法的生成器依赖性声明的伪代码;
图7E是根据本发明的一个实施方式的示例性生成器的框图;
图7F是根据本发明的一个实施方式的通过使用具有依赖性确定生成器的向上依赖性的示例性依赖性的框图;
图7G是根据本发明的一个实施方式的通过使用具有依赖性确定生成器的弱约束依赖性(WeaklyConstrainedDependency)的可能的示例性依赖性的框图;
图7H示出了根据本发明的一个实施方式的标准生成器的示例性生成器图形;
图7I示出了生成器依赖性以及用于发现、解析并建立图7H中的生成器图形的依赖性确定生成器的一个示例;
图8A是示出了根据本发明的一个实施方式的第一示例性框架的框图,其中在该框架中应用被提供给终端用户;
图8B是示出了根据本发明的一个实施方式的第二示例性框架的框图,其中在该框架中应用被提供给终端用户;
图8C示出了根据本发明的一个实施方式的具有可配置的交互式生成器输出布局的图形用户界面模块840的自由单元选择的示例性屏幕截图以及使用;
图8D示出了根据本发明的一个实施方式的具有可配置的交互式生成器输出布局的图形用户界面模块840的自由单元选择的另一个示例性屏幕截图以及使用;
图8E示出了根据本发明的一个实施方式的具有可配置的交互式生成器输出布局的图形用户界面模块840的表格创建的示例性屏幕截图以及使用;
图8F示出了根据本发明的一个实施方式的具有可配置的交互式生成器输出布局的图形用户界面模块840的表格创建的另一个示例性屏幕截图以及使用;
图9A是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第一方案的框图;
图9B是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第二方案的框图;
图9C是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第三方案的框图;
图10是根据本发明的一个实施方式的示例性实施的框图;
图11A是根据本发明的一个实施方式的图10中类跟踪结构1092的示例的框图;
图11B是根据本发明的一个实施方式的图10中实例跟踪结构1065的示例的框图;
图11C是根据本发明的一个实施方式的图10中生成器图形结构1060的示例的框图;
图11D是根据本发明的一个实施方式的图10中方法跟踪结构1058的示例的框图;
图12是示出了根据本发明的一个实施方式的支持偶然(contingent)和订阅类型的动态生成器依赖性的图10中另外细节的框图;
图13A示出了根据本发明的一个实施方式的使用非快捷被声明、非动态(非偶然、非订阅)的依赖性的方法的生成器依赖性声明的伪代码;
图13B是示出了根据本发明的一个实施方式的示例性非快捷被声明、非动态(非偶然、非订阅)的生成器依赖性的生成器的框图;
图13C示出了根据本发明的一个实施方式的使用非快捷被声明、偶然、非订阅的生成器依赖性的方法的生成器依赖性声明的伪代码;
图13D是示出了根据本发明的一个实施方式的示例性非快捷被声明、偶然、非订阅的生成器依赖性的生成器的框图;
图13E示出了根据本发明的一个实施方式的使用非快捷被声明、偶然、非订阅的生成器依赖性和快捷被声明、偶然、非订阅的生成器依赖性的方法的生成器依赖性声明的伪代码;
图13F是示出了根据本发明的一个实施方式的非快捷被声明、偶然、非订阅的生成器依赖性和快捷被声明、偶然、非订阅的生成器依赖性的生成器的框图;
图13G示出根据本发明的一个实施方式的使用快捷被声明、偶然、非订阅的生成器依赖性和快捷被声明、非偶然、非订阅的生成器依赖性的方法的生成器依赖性声明的伪代码;
图13H是示出了根据本发明的一个实施方式的示例性快捷被声明、偶然、非订阅的生成器依赖性和快捷被声明、非偶然、非订阅的生成器依赖性的生成器的框图;
图13I示出了根据本发明的一个实施方式的使用快捷被声明、非动态(非偶然、非订阅)的生成器依赖性的方法的生成器依赖性声明的伪代码;
图13J是示出了根据本发明的一个实施方式的示例性快捷被声明、非动态的生成器依赖性的生成器框图;
图14A是根据本发明的一个实施方式的图12中的订阅日志1250的示例的框图;
图14B是示出了根据本发明的一个实施方式的非偶然、吸收订阅(absorbing subscription)的生成器依赖性的示例性生成器的框图;
图14C是示出了根据本发明的一个实施方式的非偶然、粘附订阅(stickysubscription)的生成器依赖性的示例性生成器的框图;
图14D示出了根据本发明的一个实施方式的基于由粘附订阅创建的父依赖性确定生成器的父生成器的选择;
图14E示出了根据本发明的一个实施方式的基于由子依赖性确定生成器创建的父依赖性确定生成器的父生成器的选择,所述子依赖性确定生成器通过对依赖性排序而被链接;
图15是根据本发明的一个实施方式的实例化新实例的流程图;
图16是根据本发明的一个实施方式的实例化新生成器且不覆盖生成器的流程图;
图17是根据本发明的一个实施方式的图16中的块1650的流程图;
图18是根据本发明的一个实施方式的图17中的块1745的流程图;
图19是根据本发明的一个实施方式的图16中的块1630的流程图;
图20是根据本发明的一个实施方式的图16中的块1635和块1670的流程图;
图21是根据本发明的一个实施方式的覆盖生成器的流程图;
图22A是根据本发明的一个实施方式的当前生成器图形的执行的流程图的一部分;
图22B是根据本发明的一个实施方式的当前生成器图形的执行的流程图的另一部分;
图23是根据本发明的一个实施方式的图22中的块2205的流程图;
图24是根据本发明的一个实施方式的图22中的块2225的流程图;以及
图25是根据本发明的一个实施方式的图22的块2260的流程图。
具体实施方式
在以下的描述中,例如逻辑执行、操作码、规定操作数的方法、资源划分/共享/复制执行、系统组件的类型和相互关系以及逻辑划分/集成选择的多个具体细节被提出以为本发明提供更全面的理解。但是,本领域技术人员应当理解,在没有这些具体细节的情况下本发明也能实施。在其它的情况,没有具体示出控制结构、数据结构以及全软件指令序列以避免使本发明晦涩。本领域技术人员在有了这些描述后能够在没有不适当的实验的情况下能实现合适的功能。
除非另有规定,否则图中的虚线(虚分界线除外)用于表示图中可选项。但是不应该认为所有的可选项都是使用虚线来显示的,而是用虚线显示的这些项由于各种原因被选择(例如,它们可以很容易地被显示以提供更好的清晰度等)。
说明书中的引用“一个实施方式”、“实施方式”、“示例性实施方式”等表示所述的实施方式可以包括特定的特征、结构或特性,但是每一个实施方式不用必须包括所述特定的特征、结构或特性。此外,这些短语不一定是指同一个实施方式。再者,当结合实施方式描述特定的特征、结构或特性时,可以理解,无论是否明确描述,改变与实施方式有关的这些特征、结构或特性是本领域技术人员所了解的。
在下面的描述和权利要求中,可能使用了术语“耦合”和“连接”以及它们的派生词。应当理解这些术语不是彼此的同义词。而是,在特定实施方式中,“连接”可以用于表示两个或多个元件彼此直接接触。“耦合”可以表示两个或多个元件直接连接。但是“耦合”还可以表示两个或多个元件彼此没有直接连接,但仍然互相合作或相互作用。
在一些情况下,参考其他框图的示例性实施方式来描述流程图的操作。然而,应当理解,流程图的操作可以被本发明的实施方式执行而不是被参考其他框图论述的实施方式来执行,且参考其他框图论述的本发明的实施方式可以执行与参考流程图而论述的操作不同的操作。
可以使用存储在一个或多个计算机上并在该一个或多个计算机上执行的代码和数据来执行图中所示的技术。该计算机使用诸如机器存储介质(例如,磁盘、光盘、随机存取存储器、只读存储器、闪存装置)的机器可读介质来存储代码和数据并使用机器通信介质(例如,电、光、声或其他形式的传播信号-例如载波、红外信号、数字信号等)传送(在内部和通过网络与其他计算机)该代码和数据。此外,该计算机通常包括一组一个或多个处理器,该处理器与一个或多个其他组件耦合,例如存储装置、多个用户输入/输出装置(例如键盘和显示器)以及网络连接。该组处理器与其他组件的耦合一般通过一个或多个总线和桥(也称为总线控制器)。存储装置和网络流量分别表示一个或多个机器存储介质和机器通信介质。因此,给定计算机系统的存储装置一般存储用于在该计算机的所述一组一个或多个处理器上执行的代码和数据。当然,可以使用软件、固件和/或硬件的不同组合来实施本发明的实施方式的一个或多个部分。
概述
根据本发明的一个方面,生成器是至少一个特定实例(或对象)和特定方法,从而如果在运行时期间执行该生成器,则该特定方法在特定实例上被执行。由此,给定的生成器根据给定实例以及与该实例相关联的给定方法而被实例化。如类、实例和方法,生成器是运行时处理的基本元素和结构。因此运行时解释并跟踪生成器的实例化,且由此运行时跟踪由生成器表示的实例和方法的组合。换句话说,生成器是由运行时跟踪、执行的运行时可实例化的结构,且包括至少一个实例和与该实例相关联的方法,从而运行时执行生成器使该生成器的方法在生成器的实例上被执行。此外,生成器的方法与其生成器依赖性声明相关联,该声明为给定生成器标识一组零个或多个生成器依赖性、一组零个或多个生成器。具体地,使用生成器依赖性声明来为方法声明生成器依赖性,用于给定方法的生成器依赖性声明可以包括零个或多个生成器依赖性,且每一个生成器依赖性标识一组零个或多个生成器。因此,生成器依赖性声明以及该声明定义的生成器依赖性由运行时来解释并跟踪,且由此运行时跟踪生成器依赖性声明指示的生成器之间的关系。
当给定生成器依赖于一组一个或多个其他生成器时,运行时将确保在给定生成器之前执行所述一组其他生成器。因此,生成器依赖性声明表示生成器之间的执行关系,而生成器表示将被执行的操作(方法)和实例。当在本发明的一些实施方式中,允许子生成器上的父生成器的生成器依赖性在与父生成器的方法相关联的生成器依赖性声明中被声明(父生成器的生成器依赖性声明标识任意子生成器——这里称为向下声明),本发明的其他实施方式还允许依赖性在与子生成器的方法相关联的生成器依赖性声明中被声明(子生成器的生成器依赖性声明标识一个或多个父生成器-这里称为向上声明)。
在本发明的不同实施方式中,生成器标识另外的事情。例如,当在本发明的某些实施方式中,生成器是至少一个实例和与该实例相关联的方法,在本发明的其他实施方式中,生成器是类、类的实例以及与该实例相关联的方法(例如,生成器可以直接包括类、实例以及方法;生成器可以直接包括实例和方法,而通过引用(例如,实例中的引用)间接标识该实例的类)。在本发明可以用于用不同编程语言(例如,用反射式面向对象的语言编写的面向对象代码;用反射式基于对象的语言编写的面向对象代码;用过程、非反射式面向对象、非反射式基于对象的语言编写并转换成面向反射对象语言代码的代码)编写的代码上下文中的同时,参考反射式面向对象编程语言并参考直接包括类、实例和方法的生成器,以举例而非限定的方式来描述本发明的实施方式。此外,虽然在本发明的一个实施方式中生成器的方法是实例方法(除了作为参量被接收的任何输入,还可以使用实例字段的方法),本发明的可替换实施方式还可以或可替换地支持为类方法的生成器的方法(接收所有输入作为参量和/或使用实例无关变量的方法)(当生成器的方法是实例方法时,生成器的实例是类实例;而当生成器的方法是类方法时,该生成器的实例是表示该类的元类实例)。
图1A是示出了根据本发明的一个实施方式的对面向对象源代码中类的方法与生成器的生成器依赖性声明的关系的框图,所述生成器包括类、该类的给定实例以及该类的方法。在图1A中,显示了面向对象源代码100,其包括类102,而类102包括方法104以及用于方法104的生成器依赖性声明106。当然类102一般包括一个或多个字段(未显示)和另外的方法(未显示)。另外,面向对象源代码100一般包括另外的类。
在运行时期间,类102的实例108被实例化。实例108包括类102的字段数据。另外,生成器110被实例化,其中生成器110标识类102、类102的实例108(与类102的方法104相关联)以及类102的方法104。生成器依赖性声明106向运行时标识一组零个或多个生成器112(称为生成器110的子生成器),该一组零个或多个生成器112在执行生成器110之前必须被执行。换句话说,生成器110依赖一组零个或多个生成器112。除了或代替使用一组生成器112的输出,生成器110可以使用实例108的数据。此外,生成器110提供至少一个输出,输出可以在实例108的内部(从而修改实例108的数据)和/或外部;任何一种方式,生成器110的输出可以被一组零个或多个其他生成器114(称为生成器110的父生成器)使用。如之前所示和之后所详细描述的,在本发明的一些实施方式中,生成器依赖性声明106还可以向运行时标识零个或多个生成器114。
应当理解生成器的输入和输出是基于方法的输入和输出,这些生成器基于该方法。这样,这些输入和输出可以表示具有各种数据结构的多个参数。
用于给定方法的生成器依赖性声明在运行时标识被实例化并执行的一组零个或多个生成器。通过示例的方式,如果用于给定方法(例如方法104)的生成器依赖性声明(例如生成器依赖性声明106)在给定生成器(例如该组生成器112中的一个)(该给定生成器标识第一类、该类的第一实例以及该第一类的第一方法)上标识生成器依赖性,则给定方法的生成器依赖性声明向运行时标识第一实例将被实例化(如果还没有)和第一方法将用于实例化第一实例的给定生成器(在这些示例中,第一不是指位置或顺序)。
在操作中,当在运行时期间给定的一组一个或多个生成器被指定为感兴趣的且具有为它们声明的生成器依赖性时,则运行时:1)基于生成器依赖性声明从指定为感兴趣的给定的一组生成器向下至源生成器,自动生成(发现、建立以及可选地解析)一组一个或多个图形,该图形可以是多级和各种形状(例如,链形、树形);2)顺序执行所述一组图形的生成器以生成指定为感兴趣的给定的一组生成器的输出。因此,运行时使用生成器依赖性声明来确定在哪些实例上执行具有哪些参量的哪些方法以及何时用于同步。
因而,生成器依赖性向运行时表示生成器的执行顺序。但是,在本发明的不同实施方式中,除了指示执行顺序,生成器依赖性还表示不同的输入与输出的关系。例如,本发明的不同实施方式可以支持一个或多个参量生成器依赖性、字段生成器依赖性以及仅排序的(sequencing only)生成器依赖性(仅排序的生成器依赖性这里称为速记排序生成器依赖性)。当每一个参量生成器依赖性、字段生成器依赖性以及排序生成器依赖性表示生成器之间的执行顺序关系时,参量和字段生成器依赖性还表示运行时知道的数据。具体地,参量生成器依赖性使运行时将作为输入参数的子生成器的输出映射到父生成器,而字段生成器依赖性指示实例的字段的使用。不管生成器依赖性表示的输入与输出的关系如何,恰当使用生成器依赖性能确保生成器访问信息在影响该信息的生成器之后被排序。
排序依赖性可以用于多种目的,包括确保以运行时不知道的方式修改数据的生成器与使用该数据的生成器之间的执行顺序(子生成器可以以需要父生成器的方法来包括代码以访问输出的方式来编写其输出(例如,通过影响不是常规生成器输出且不被运行时检测的输出来影响环境的方法,不检测该方法-例如设定全局变量的方法、设定不是生成器输出的实例中的字段的方法、影响外部数据源的方法等))。因此,排序依赖性在子生成器上反映父生成器的依赖性,但是需要被提供的输出(如果有),该输出通过编写代码一次又一次产生而被提供(例如,写入输出到给定机制(例如设定全局变量、影响外部数据源、设定不是生成器输出的实例的字段等)的子生成器的方法中的代码和从给定机制读出该输出的父生成器的方法中的代码)。以这种方式,排序依赖性允许运行时对依赖运行时不能检测的输出的任意父生成器的执行进行同步。
在本发明的一个实施方式中,用于给定方法的生成器依赖性声明在生成器上只标识直接依赖性(例如,直接继承(子),与间接继承不一样(孙子、曾孙子等))。在这样的实施方式中,每一个生成器依赖性声明只提供生成器的一个等级或层,该生成器的输出可以被根据给定方法实例化的生成器直接使用;将生成器图形的另外层的发现/建立/解析留给其他生成器依赖性声明的运行时处理。
示例性关键字
生成器可以被视为一组多个标识符,一个标识符用于每一个指定粒度(granularity)的另外等级(类、实例和方法等)。此外,本发明的一些实施方式将每一个标识符实施为单独的关键字,而其他实施方式具有共享关键字的某些标识符。通过示例的方式,本发明的一些实施方式将生成器实施为类、实例以及方法三元组并实施关键字,从而三元组的每一个部分由单独的关键字来标识(类关键字、实例关键字以及方法关键字)且生成器由类关键字、实例关键字以及方法关键字的组合(生成器关键字)来标识。
使用关键字的本发明的实施方式可以改变使用的关键字的唯一性。例如,在本发明的一个实施方式中,每一个类关键字是唯一的,每一个实例关键字在所有类的所有实例中是唯一的,且每一个方法关键字在所有类的所有方法中是唯一的。作为另一个示例,在本发明的另一个实施方式中,每一个类具有唯一的关键字,每一个给定类的实例具有唯一的关键字(在类实例中),以及每个类的方法具有唯一的关键字(在类方法中);但是不同类的实例可以具有相同的实例关键字,且不同类的方法可以具有相同的方法关键字;后者的方法可以以举例而非限定的方式用于本文的后面的部分。例如,假定第一类包括方法并具有用于这些方法中每一个的在第一类中是唯一的关键字,则该类的实例(每一个实例具有的关键字相较于另一个是唯一的)具有与其相关联的相同的方法关键字。作为另一个示例,假定不同的第二类包括方法(与第一类的方法有一些、全部或没有相同),该方法具有与用于第一类的关键字相同的关键字;这样,该不同类的实例可以与和第一类的实例相关联的相同的方法相关联。
关键字的使用允许多个特征,包括:1)生成器标识符标识的每一个实体的跟踪(例如,每一个类、实例和方法的跟踪);2)基于父生成器的生成器依赖性声明(该声明使用生成器关键字规定生成器依赖性)连接到相同子生成器的一些父生成器(不知道相互的存在);等等。在本发明的一个实施方式中,实例关键字是拥有两个元素的类的实例(实例关键字):实例关键字性质,指示关键字指示符是否是对实例或对另一个对象(例如,字符串)的引用;以及关键字指示符,该关键字指示符可以是实例或另一个对象(例如,字符串)的引用。在实例关键字中存储实例引用可以让程序员不用为标识这些实例而起名字。
示例性关系
在关于生成器被视为一组多个标识符(一个标识符用于所规定粒度的每一个另外层)的上述上下文中,在本发明的一个实施方式中,生成器及其子生成器和父生成器之间的各种支持的关系是:至少一个所述标识符在生成器和其一组零个或多个父生成器之间不同,且至少一个所述标识符在生成器和其一组零个或多个子生成器的每一个之间不同。通过提供一些示例性关系,假定第一生成器被实例化,如果第一生成器是第一类的第一实例和第一类的第一方法,并假定用于该第一方法的生成器依赖性声明在运行时将第二生成器标识为子生成器,那么第二生成器可以是:1)第一类的第一实例和该第一类的第二方法;2)第一类的第二实例和该第一类的第二方法;3)第一类的第二实例和该第一类的第一方法;或4)第二类的实例和该第二类的方法。这种情况,第一生成器依赖于第二生成器-由此,在第二生成器上表示第一生成器的输入与输出的关系。以下对使用面向对象语言的本发明的一个实施方式描述各种关系和这些关系的组合,且其中生成器标识至少一个类、实例和方法。
图1B-1D示出了根据本发明的一个实施方式的给定生成器、其一组父生成器以及其一组子生成器之间的示例性关系。图1B-1D每一个示出了:1)类定义102A,包括方法104A-C和分别用于这些方法的每一个的生成器依赖性声明106A-C;2)类定义102B,包括方法104D-E和分别用于这些方法的每一个的生成器依赖性声明106D-E;3)类定义102C,包括方法104F和用于该方法的生成器依赖性声明106F;4)类102A的实例108A;5)生成器110A,该生成器112A标识类102A、实例108A以及方法104A;以及6)生成器112A.1和生成器114A.1,分别表示一组生成器112和一组生成器114中的一个。图1B-1D中在其上具有带框的字母的虚线用于表示示例性关系。因此,在其上具有带框的A的虚线的集合表示一种关系。图1B中的关系可以与图1C中的关系结合;这样,这些结合表示父生成器114A和子生成器112A到生成器110A之间的关系的组合。此外,图1D示出了父生成器114A和子生成器112A到生成器110A之间的关系的一些另外的示例性组合。
图1B示出了根据本发明的一个实施方式的生成器110A与父生成器114A.1之间的示例性关系。图1B还包括实例108B。一组生成器114由相同类的不同方法、相同类的不同实例和/或不同类的方法的其他生成器依赖性声明来标识;且由此,一组生成器114的每一个可以是:1)与生成器110A相同的实例(类102A的实例108A)和与该实例相关的不同方法(由从实例108A到生成器114A.1以及从方法104B到生成器114A.1的虚线上的带框的A示出);2)类102A的不同实例和与该实例相关的不同方法(由从类102A到实例108B,从实例108B到生成器114A.1以及从方法104B到生成器114A.1的虚线上的带框的B示出);3)不同类的实例和与该实例相关的方法(由从类102B到实例108B,从实例108B到生成器114A.1以及从方法104D到生成器114A.1的虚线上的带框的C示出);或4)类102A的不同实例(不是实例108A)和该实例的相同方法(方法104A)(例如,具有偶然依赖性——在后面描述)(由从类102A到实例108B,从实例108B到生成器114A.1以及从方法104A到生成器114A.1的虚线上的带框的D示出);此外,如果一组生成器114中有多个生成器,则生成器本身可以是类102A的相同实例、类102A的不同实例、不同类的实例和/或以上的混合中的一部分。
图1C示出了根据本发明的一个实施方式的生成器110A与子生成器112A.1之间的示例性关系。图1C还包括实例108C。一组生成器112A的每一个可以是:1)与生成器110A相同的实例(类102A的实例108A)和与该实例相关的不同方法(由从实例108A到生成器112A.1和从方法104C到生成器112A.1的虚线上带框的E示出);2)类102A的不同实例和与该实例相关的不同方法(由从类102A到实例108C,从实例108C到生成器112A.1以及从方法104C到生成器112A.1的虚线上带框的F示出);3)不同类的实例和与该实例相关的方法(由从类102C到实例108C,从实例108C到生成器112A.1以及从方法104F到生成器112A.1的虚线上的带框的G示出);或类102A的不同实例(不是实例108)和该实例的相同方法(例如,具有后面描述的偶然依赖性)(由从类102A到实例108C,从实例108C到生成器112A.1以及从方法104A到生成器112A.1的虚线上的带框的H示出)。因此,一组生成器112A的每一个可以是与生成器110A相同的实例、与类102A不同的实例或不同类的实例;此外,如果在一组生成器112A中存在多个生成器,则生成器112A本身可以是类102A的相同实例、类102A的不同实例、不同类的相同实例、不同类的不同实例和/或以上的混合中的一部分。
图1D示出了根据本发明的一个实施方式的父生成器114和子生成器112到生成器110A的关系的一些另外的示例性组合。图1D还包括实例108B和实例108C。图1D的组合如以下表1中所示:
表1
  带框字母   用于父生成器114A.1的虚线,从   用于子生成器112A.1的虚线,从
  I   从实例108A到生成器114A.1以及从方法104B到生成器114A.1   从实例108A到生成器112A.1以及从方法104B到生成器112A.1
  J   从实例108A到生成器114A.1以及从方法104B到生成器114A.1   从类102A到实例108C,从实例108C到生成器112A.1,以及从方法104B到生成器112A.1
  K   从类102A到实例108B,从实例108B到生成器114A.1,以及从方法104B到生成器114A.1   从实例108A到生成器112A.1以及从方法104B到生成器112A.1
  L   从类102B到实例108B,从实例108B到生成器114A.1,以及从方法104E到生成器114A.1   从类102B到实例108B,从实例108B到生成器112A.1,以及从方法104E到生成器112A.1
  M   从类102B到实例108B,从实例108B到生成器114A.1,以及从方法104E到生成器114A.1   从类102B到实例108C,从实例108C到生成器112A.1,以及从方法104E到生成器112A.1
  N   从类102A到实例108B,从实例108B到生成器114A.1,以及从方法104A到生成器114A.1   从类102A到实例108C,从实例108C到生成器112A.1,以及从方法104A到生成器112A.1
  O   从类102A到实例108B,从实例108B到生成器114A.1,以及从方法104A到生成器114A.1   从类102A到实例108B,从实例108B到生成器112A.1,以及从方法104A到生成器112A.1
  P   从实例108A到生成器114A.1以及从方法104B到生成器114A.1   从类102A到实例108C,从实例108C到生成器112A.1以及从方法104A到生成器112A.1
  Q   从类102A到实例108B,从实例108B到生成器114A.1,以及从方法104A到生成器114A.1   从类102A到实例108B,从实例108B到生成器112A.1,以及从方法104B到生成器112A.1
  R   从类102B到实例108B,从实例108B到生成器114A.1,以及从方法104D到生成器114A.1   从类102B到实例108B,从实例108B到生成器112A.1,以及从方法104E到生成器112A.1
图1E示出了根据本发明的一个实施方式的相同类的不同实例可以具有基于相同和/或不同方法的生成器。图1E显示:1)类定义102A,包括方法104A-C和分别用于所述方法的每一个的生成器依赖性声明106A-C;2)类102A的实例108A和实例108B;3)生成器110A是类102A的实例108A的方法104A;4)生成器110B是是类102A的实例108A的方法104B;5)生成器110C是类102A的实例108B的方法104A;6)生成器110D是类102A的实例108B的方法104C。此外,图1D显示:1)用于方法104A的生成器依赖性声明106A在运行时标识生成器110A和生成器110C的子生成器;2)用于方法104B的生成器依赖性声明106B在运行时标识生成器110B的子生成器;以及3)用于方法104C的生成器依赖性声明106C在运行时标识生成器110D的子生成器。
示例性运行时
图2是示出了根据本发明的一个实施方式的具有面向生成器图形编程支持的运行时的可重复使用性的框图。在图2中,多个面向对象应用程序(具有生成器依赖性声明210A-I的面向对象应用代码)由具有面向生成器图形编程支持的相同运行时220运行。
图3A是示出了根据本发明的一个实施方式的具有面向生成器图形编程支持的运行时的框图。在图3A中,具有面向生成器图形编程支持的运行时335包括自动生成器图形生成模块340和生成器图形执行模块345。另外,运行时335用于执行面向对象源代码,以及从而包括未显示的另外的模块。
此外,图3A显示了用于面向对象源代码中的方法的生成器依赖性声明320、当前组一个或多个其输出是感兴趣输出的生成器325(这里也称为当前选择的感兴趣生成器)以及源生成器的输出330(在后面描述)。自动生成器图形生成模块340接收生成器依赖性声明320和当前组的感兴趣生成器325。
自动生成器图形生成模块340尝试基于生成器依赖性声明发现具有直接或间接促成(contribute)当前选择的感兴趣生成器的输入的输出的子生成器(在支持向上声明依赖性的本发明的一些示例中,是父生成器),并建立一组一个或多个当前的生成器图形,该图形表示从当前选择的感兴趣生成器,通过任意所发现的为非源(non-source)生成器的生成器,到为源生成器的所发现的生成器的这些生成器对彼此的依赖性。当前的生成器图形被存储在生成器图形结构380中。而本发明的实施方式可以将生成器图形作为图形的集合来存储和处理,本发明的其他实施方式将生成器图形作为彼此链接起来以形成图形的生成器的集合(与图形的集合不同)来存储和处理,从而便于生成器图形的合并和拆分。以示例而非限制的方式,在这里描述了将生成器图形作为生成器的集合来存储和处理的本发明的实施方式。
生成器图形执行模块345从自动生成器图形生成模块340和源生成器330的输出接收当前生成器图形,并执行当前生成器图形的生成器以确定当前选择的感兴趣生成器的当前输出。生成器图形执行模块345缓存生成器输出缓存384示出的生成器图形结构380中的当前生成器输出。
在执行期间对生成器图形的生成器输出的缓存允许同步。例如,执行依赖于多个子生成器的父生成器的合适时间是在所有多个子生成器已经被执行之后;换句话说,每一次执行完它的子生成器后执行父生成器是很浪费的(并且,在一些情况下是不可能的)。对生成器输出的缓存不但允许推迟父生成器的执行直到其所有的子生成器被执行完,而且允许当所有的子生成器被执行完且它们的输出被缓存时,确定用于执行父生成器的合适时间。因此,运行时通过检查其子生成器的执行状态来为程序员做出这种同步决定;换句话说,这种同步是自动的(程序员不需要包括用于确定标识实例和在该实例上执行与该实例相关的给定方法的合适时间的单独源代码)。通过另一个示例,如果某些父生成器依赖于相同的子生成器以及其他不同子生成器,则执行所述某些父体生成器的每一个的合适时间通常是不同的;运行时依据父生成器的一组子生成器的输出的可用性来自动确定执行所述某些父生成器的每一个的合适时间。
如在后面详细描述的,因为生成器图形的一些部分由于动态生成器依赖性而可能不是当前可发现的,因此自动生成器图形生成模块340“尝试”发现并建立整个生成器图形,但是初始可能不能完成整个生成器图形直到一些生成器被执行。这样,生成器图形执行模块345可以在当前生成器图形执行期间调用具有所需生成器输出的自动生成器图形生成模块340以完成当前生成器图形中任何未解析的余项(这在图3A中由从生成器图形执行模块345到自动生成器图形生成模块340的虚箭头线示出;使用虚箭头线是因为这种支持是可选的)。
图4A是示出了根据本发明的一个实施方式的示例性生成器图形的发现和建立的框图。图4A显示了当前组的感兴趣生成器包括生成器1。基于生成器1及其生成器依赖性声明,生成器2和生成器3被发现。换句话说,生成器1的生成器依赖性声明标识生成器1的输入需要生成器2和生成器3的执行。这样,生成器1是相关的生成器(具有一个或多个生成器依赖性的生成器)。图4A还显示了当生成器3是无关生成器(不具有生成器依赖性的生成器,且因此是源生成器),生成器2是相关生成器。因此,基于生成器2的生成器依赖性声明,生成器4和生成器5被发现。在图2A中,生成器4和生成器5是无关生成器(因此,是源生成器)。
图4B示出了是根据本发明的一个实施方式的图4A中生成器图形的初始执行的框图。在图4B中,弯曲的箭头线示出执行一个生成器以生成被提供作为另一个生成器输入的输出。如图3A中所示,源生成器330的输出被提供给生成器图形执行模块345;相反,如图4B所示相关生成器1-2的输出通过执行这些生成器来被确定。因此,在图4B中,发生:1)源生成器4和源生成器5的输出被提供给相关生成器2;2)相关生成器2被执行;3)相关生成器2和源生成器3的输出被提供给生成器1;以及4)生成器1被执行且其输出被提供作为当前感兴趣输出。值得注意,图4B的生成器图形是在数据在图形上从一个生成器流向另一个生成器的情况上被驱动的数据。
因此,生成器依赖性声明320限制(bound)可能被生成的可能的生成器图形;而当前选择的一组感兴趣生成器325标识要生成的当前生成器图形的起始节点。根据这两点,自动生成器图形生成模块340发现并建立生成器图形。发现和建立的自动化在于自动生成器图形生成模块340没有被提供生成器图形(例如,其不需要由程序员手动标识)或甚至在生成器图形中的生成器列表。而是,自动生成器图形生成模块340解析当前选择的一组感兴趣生成器的生成器依赖性声明以发现它们的子生成器(在支持向上声明依赖性的本发明的一些实施方式中,是父生成器),然后向下解析这些所发现的生成器的生成器依赖性声明等直到源生成器(在后面描述的本发明的一些实施方式中,这可以借助生成器图形执行模块345来完成)。在生成器图形是树的情况下,当前选择的感兴趣生成器通常是根节点,且生成器依赖性声明被解析直到发现叶节点(源生成器)。
被覆盖的生成器和增量执行
图3B是示出了根据本发明的一个实施方式的具有面向生成器图形编程支持的运行时的框图,该支持还支持增量执行和被覆盖的生成器输出。应当理解,增量执行和被覆盖的生成器输出是各自无关的可选特征,且因此本发明的不同实施方式可以实施一者或两者。
在图3B中,具有面向生成器图形的编程支持的运行时360包括自动生成器图形生成模块365、生成器图形执行模块370以及覆盖生成器输出模块390。运行时360用于执行面向对象源代码,且从而包括未显示的另外的模块。
此外,图3B显示用于面向对象源代码320中的方法的生成器依赖性声明、当前组的一个或多个具有感兴趣输出的生成器325(这里也称为当前选择的感兴趣生成器)和源生成器的输出350。源生成器的输出350包括源代码中的无关生成器组的输出352(例如,常数、默认值等)和当前替换的生成器输出354(无关生成器的输出和/或其输出当前被覆盖的相关生成器的输出)。
在本发明的一些实施方式中,可以用当前提供的值显式(explicitly)覆盖生成器的输出(即,不是执行生成器以基于其当前输入来确定其输出,用于生成器的输出值被显示提供)。除了生成器图形的任意无关生成器,生成器图形的源生成器包括任意当前被覆盖的生成器。
覆盖生成器输出模块390接收被覆盖的生成器输出354(标识哪些生成器被覆盖且用什么输出值来覆盖)。在本发明的一个实施方式中,生成器可以被分类为属性生成器或方法生成器。属性生成器是基于属性方法(例如,获得和设定)。方法生成器是基于非属性方法。覆盖生成器输出模块390包括用于被覆盖的属性生成器的覆盖属性生成器输出模块392和用于被覆盖的方法生成器的覆盖方法生成器输出模块394。覆盖属性生成器输出模块392促使被覆盖的值被存储在生成器输出缓存384和实例的数据中,而覆盖方法生成器输出模块394促使被覆盖的值被存储在生成器输出缓存384中。根据本发明的实施方式,这种促使可以是直接或间接的。图3B示出了通过使用覆盖日志396的间接促使,该覆盖日志396收集覆盖生成器输出模块390的输出且由生成器图形执行模块370来使用。为了优化,覆盖日志396允许覆盖的延迟以为批处理收集多个覆盖。
与自动生成器图形生成模块340类似,自动生成器图形生成模块365:1)接收生成器依赖性声明320和当前组感兴趣生成器325;以及2)尝试基于生成器依赖性声明发现具有直接或间接促成当前选择的感兴趣生成器的输入的输出的子生成器(在支持向上声明依赖性的本发明的一些实施方式中,是父生成器),并建立一组一个或多个当前生成器图形,该当前生成器图形表示从当前选择的感兴趣生成器通过任何所发现的无源生成器到为源生成器的所发现的生成器(无关生成器和当前被覆盖的生成器)的这些生成器彼此的输入依赖性。生成器图形被存储在生成器图形结构380中。
与生成器图形执行模块345类似,生成器图形执行模块370从自动图形模块365和源生成器350的输出接收当前生成器图形,并执行当前生成器图形的生成器以确定当前所选择的感兴趣生成器的当前输出。生成器图形执行模块370缓存如生成器输出缓存384示出的生成器图形结构380中的生成器的当前输出。
如之前所述,在执行期间对生成器输出的缓存允许同步(例如,不需要编写单独的源代码以确定何时图4B中的生成器2应当被执行,但是运行时通过检查生成器输出缓存384中所需输出的可用性来为程序员做出同步决定;换句话说,该同步是自动的)。此外,该生成器输出缓存384用于增量执行。更具体地,在生成器图形被初始生成和执行后,当前生成器图形中的生成器的覆盖需要某种层次的再执行。虽然本发明的一些实施方式简单地再执行整个图形,但本发明的可替换实施方式支持增量执行(只再执行生成器图形的被覆盖所影响的这些部分)。支持增量执行的一些示例性实施方式使用生成器图形结构380中的增量执行标记382来帮助确定哪些生成器需要再执行。因此,维持生成器图形是指需要时在多个执行中修改生成器图形的链接从而使生成器图形保持为当前的(最新的),而增量执行是指维持生成器图形并使用当前的(最新的)生成器图形来只再执行生成器图形中被覆盖所影响的这些部分。
与图3A类似,存在从生成器图形执行模块370到自动生成器图形执行模块365的虚箭头线,用于表示对动态依赖性的可选支持。应当注意动态依赖性可以在生成器图形的再执行期间改变。
图4C是示出了根据本发明的一个实施方式的图4B的生成器图形的增量执行的框图。在图4C中,生成器5的输出被显式修改,但是生成器3和生成器4的输出没有被显式修改。基于跟踪生成器图形中输出到输入的依赖性和只有生成器5的输出被显式修改,可以确定该修改只影响生成器2和生成器1。因此,更新后的生成器1的输出的确定只需要用生成器5的新的输出和生成器4以及生成器3的之前输出来再执行生成器2和生成器1。在图4C生成器图形的部分再执行可以由从生成器5到生成器2以及从生成器2到生成器1(而不是从生成器4到生成器2或从生成器3到生成器1)的弯曲的箭头线示出。缺少从生成器4到生成器2以及从生成器3到生成器1的弯曲的箭头线不是表明生成器3和生成器4的输出不需要,而是表明如果它们之前的输出可用(例如从生成器图形的先前执行中缓存)则不需要再执行生成器3和生成器4。
图4C的相对简单的示例示出了在增量执行产生的处理资源中存在节约。该节约依赖多个因素(例如,不需要被再执行的生成器的数量、这些生成器需要的处理量等)。虽然本发明的一个实施方式示出执行增量执行,但可替换实施方式可以以不同的方式被实现(例如,可替换实施方式可以响应于修改而再执行所有的生成器)。
图4D是示出了根据本发明的一个实施方式的在相关生成器2被覆盖后图4B的生成器图形的增量执行的框图。在图4D中,生成器2的输出被显式修改,但是生成器3的输出则没有。基于生成器图形和只有生成器2的输出被显式修改,可以确定只有生成器1受该修改影响。结果,确定生成器1的更新后的输出仅需要用生成器2的被覆盖的输出和生成器3的之前输出来再执行生成器1。该生成器图形的部分再执行可以在图4D中由从生成器2到生成器1(而不是从生成器4和5到生成器2或从生成器3到生成器1)的弯曲的箭头线示出。
图4E是示出了根据本发明的一个实施方式的在相关生成器2被覆盖且无关源生成器3被修改之后图4B中的生成器图形的增量执行的框图。基于生成器图形和只有生成器2和生成器3的输出被修改,可以确定只有生成器1受该修改的影响。因此,生成器1的更新后的输出的确定仅需要用生成器2的被覆盖的输出和生成器3的修改后的输出来再执行生成器1。生成器图形的该部分再执行可以在图4E中由从生成器2和3到生成器1(不是从生成器4和5到生成器2)的弯曲的箭头线示出。
虽然支持覆盖的生成器输出的本发明的一个实施方式还支持不BEI覆盖的生成器输出,但是本发明的可替换实施方式可以不支持。虽然支持不覆盖的生成器的本发明的一个实施方式在生成器明确地不被覆盖之前覆盖掉被覆盖的生成器,但是本发明的可替换实施方式可以以不同方式实施(例如,当替换的生成器的继承中的一个被覆盖时不覆盖该被覆盖的生成器)。
生成器图形建立和执行
本发明的不同实施方式可以被实施以在不同程度发现并扩建生成器图形(例如,建立生成器图形直到来自根节点的所有图形在无关生成器处结束(在这种情况下,生成器图形的端节点是无关生成器,可能任何替换的生成器是中间节点);扩建生成器图形直到来自根节点的每一个路径在被替换的生成器或无关生成器中终止,无论哪条首先到达(这种情况,生成器图形的每一个端节点是无关生成器或被覆盖的生成器))。
“执行开始生成器”是指生成器图形的给定执行从其开始的生成器图形的生成器。为了生成器图形的初始执行,不同的实施方式可以从不同的生成器开始(例如,在本发明的实施方式中,建立生成器图形直到来自根节点的所有路径在无关生成器处终止,执行可以从端节点处(该端节点为无关生成器)开始、从源生成器处(该源生成器包括无关生成器节点和任意被覆盖的生成器节点)开始、从源生成器的子集开始(该子集包括在其间具有至少一条路径和不包括被覆盖的生成器的根生成器的任意无关生成器与任意被覆盖的生成器的组合),或从源生成器的子集开始(该子集包括任意没有任何被覆盖的继承的被覆盖的生成器与在其间具有至少一条路径和不包括被覆盖的生成器的根生成器的任意无关生成器的组合);在本发明的实施方式中,如果且直到生成器没有被覆盖,则被覆盖的生成器下的生成器图形没有被建立,执行可以从端节点处开始(端节点可以是无关生成器和/或被覆盖的生成器)等)。
为了生成器图形的后续执行,不同的实施方式可以从不同的生成器开始(例如,从生成器图形的无关生成器(例如,在不支持增量执行的本发明的实施方式中);从生成器图形的源生成器(例如,在不支持增量执行的本发明的实施方式中);从源生成器的子集,该子集包括自从上一次执行开始被覆盖的和/或添加的源生成器(例如,在支持增量执行的本发明的实施方式中);是自从上一次执行开始被覆盖的和/或添加的源生成器,从不具有被覆盖的继承的任意这种被覆盖的生成器与在其间具有至少一条路径和不包括被覆盖的生成器的根生成器的任意这种被添加的生成器的组合(例如,在支持增量执行的本发明的实施方式中)等)。以示例而非限制的方式,在下面会描述执行以下动作的本发明的实施方式:1)如果且直到生成器没有被覆盖,则被覆盖的生成器下的生成器图形没有被建立;2)对于生成器图形的初始执行,从端节点处开始执行(端节点可以是无关生成器和/或被覆盖的生成器);3)实时增量执行;4)对于生成器图形的后续执行,从包括再从上次执行后被覆盖和/或添加的那些源生成器的源生成器子集开始执行。关于以上执行开始生成器的概念,生成器图形的执行的处理流在不同的实施方式之间也可以不同。例如,在本发明的一个实施方式中,执行开始生成器的前身(ancestry)被确定并被放置在集合中,执行开始生成器被执行,且针对生成器(对于该生成器所有的依赖性被执行)该集合被反复扫描——最后达到根节点。作为另一个示例,在本发明的一个实施方式中,执行开始生成器被执行,执行开始生成器的父体(parents)被标识,这些父体被执行,且该父体的父体被标识并执行等。以下以举例而非限定的方式使用后面的本发明的实施方式。
示例性类型的依赖性
示例性动态生成器依赖性
动态生成器依赖性是在运行时期间可以改变的生成器依赖性。应当理解用于解析生成器依赖性的准则在源代码中,且由此生成器依赖性可以被解析的生成器是有限的。参考图3A,从生成器图形执行模块345到自动生成器图形生成模块340的虚箭头线表示支持当前生成器图形中一个或多个生成器的执行,该生成器对发现并建立整个当前生成器图形是必须的。换句话说,支持动态生成器依赖性的本发明的实施方式可以在自动生成器图形生成模块340和生成器图形执行模块345之间重复直到整个生成器图形被发现、建立、解析并执行(即,在以下之间重复:1)调用自动生成器图形生成模块以发现并建立在此时能被解析的当前生成器图形的这些部分;以及2)调用生成器图形执行模块以执行当前生成器图形的生成器)。在这个意义上,发现是指访问生成器依赖性声明并确定该生成器依赖性声明所标识的生成器;建立是指对生成器进行实例化并将它们添加到生成器图形;以及解析是指确定当前未解析的动态生成器依赖性。
图5A是示出了根据本发明的一个实施方式的包括未解析的依赖性的示例性生成器图形的发现和建立的框图。图5A示出包括生成器1的当前组的感兴趣生成器。基于生成器1及其生成器依赖性声明,生成器2和生成器3被发现。换句话说,用于生成器1的依赖性声明标识生成器1需要生成器2和生成器3的输出作为输入。图5A还示出生成器3是无关生成器(因此,是源生成器)而生成器2不是。由此,基于生成器2的依赖性声明,生成器4和生成器5被发现。此外,图5A示出生成器4是无关生成器(因此,是源生成器)而生成器5不是。由此,基于生成器5的依赖性声明,生成器6和当前未解析的依赖性被发现。图5A还示出当前未解析的依赖性可以用于生成器7A和/或生成器7B。
图5B是示出了根据本发明的一个实施方式的图5A中的生成器图形的初始执行和对未解析依赖性的解析的框图。图5B用弯曲的箭头线示出图5A的生成器图形,该弯曲的箭头线显示了生成器的执行和提供生成器的输出给相关父生成器。此外,图5B示出生成器5的未解析的依赖性被解析为生成器7A的依赖性,且生成器7A是无关生成器。
图5C是示出了根据本发明的一个实施方式的图5A中生成器图形的初始执行和/或图5B中生成器图形的再执行。图5C示出图5A中的生成器图形,弯曲的箭头线示出生成器的执行和提供该生成器的输出给相关父生成器。此外,图5C示出生成器5的未解析依赖性被解析为生成器7B的依赖性,且生成器7B是相关生成器。由此,基于生成器7B的依赖性声明,生成器8被发现。生成器8是无关生成器(因此,是源生成器)。假定图5C表示图5A中生成器图形的初始执行,图5C中所有的弯曲的箭头线可以被使用。但是,假定图5C表示图5B中生成器图形的再执行,则该再执行导致动态依赖性以不同方式被解析(从生成器5依赖于生成器7A转换到生成器7B)。此外,如果再执行在没有增量执行的情况下被执行,则图5C中所有的弯曲的箭头线可以被使用;但是,如果使用了增量执行,则只有不是虚线的弯曲的箭头线可以被使用(生成器8到生成器7B、生成器7B到生成器5、生成器5到生成器2、以及生成器2到生成器1)。还应当理解,图5C中所示的依赖性中的动态改变是示例性的,且由此任意数量的不同情况可以出现(例如,动态改变可以永远不发生;生成器5首先依赖于生成器7B然后改变到生成器7A;生成器5可以首先依赖于生成器7B且曾经没有动态改变发生;生成器5可以被发现依赖于生成器7A和生成器7B两者,如图5D中所示,等等),而不同的实施方式可以以不同方式解析动态生成器依赖性,一些示例会在后面被提供。
因此,生成器图形的自动再执行不能限定为生成器被修改以及其直接的父体被再执行;而是改变通过生成器图形由运行时自动使其波动(ripple),影响任意合适的生成器和依赖性,因为生成器图形被保持(在支持的情况下使用增量执行)。这样,改变导致任何必须的另外的发现、建立、解析以及执行。因此,在用户/程序员不需要确定生成器图形的哪一个生成器受影响且可能手动校正图形的情况下,生成器图形的再执行被自动执行。
静态生成器依赖性
静态依赖性是在运行时期间不能改变的依赖性。因此,在支持偶然和订阅动态依赖性(在后面描述)的本发明的实施方式中,非偶然、非订阅依赖性是静态依赖性。图4A中的示例性生成器图形示出了静态依赖性的生成器图形。
生成器图形形状
由于生成器至少是实例以及与该实例相关的方法,因此生成器图形表示实例和与这些实例相关的方法的图形,因而,生成器图形至少是以实例和方法为中心的。在生成器至少是类、方法和实例的本发明的事实方式中,生成器图形至少是以类、方法和实例为中心的。
应当理解,生成器图形可以采取各种不同形状(例如,生成器的单链、树等)。图5B的示例性生成器图形是具有生成器1的根节点的树,从根节点开始具有两个分支-一个分支到达生成器2和生成器3的每一个。其中生成器3是叶节点,生成器2具有从其延伸的两个分支-一个到达生成器4和生成器5的每一个。生成器5具有从其延伸的两个分支-一个到达生成器6和生成器7A的每一个。图5B中的示例性生成器图形为多级,等级1包括根节点生成器1,等级2包括生成器2和生成器3,等级3包括生成器4和生成器5,等级4包括生成器6生成器7A(在图5C中,等级4包括生成器7B,等级5包括生成器8)。在图5B中,当考虑具有生成器2的从生成器1开始的分支时,该分支上的一个生成器是生成器2且该分支的最后一个生成器是生成器4、生成器6以及生成器7A。
虽然图5B示出了生成器图形,其中当前组的感兴趣生成器包括单个生成器,但支持多于一个的当前感兴趣生成器的本发明的实施方式可以为每一个生成器发现并建立生成器图形。应当理解如果同时存在多个感兴趣生成器,则产生的生成器图形可以是无关的或可以交叉。如果生成器图形交叉,则本发明的实施方式可以被实施以:1)复制生成器以保持独自的生成器图形;或2)避免这种复制并保持交叉的生成器图形。还应当理解这种交叉的生成器图形可以包括是另一个生成器图形的子集的生成器图形。例如,如果生成器5和生成器1被包括在当前组的感兴趣生成器中,则存在具有生成器5的根节点的第一生成器图形和具有生成器1的根节点的第二生成器图形,其中该第二生成器图形包括第一生成器图形。例如,如果生成器7B和生成器1以及生成器5被包括在当前组的感兴趣生成器中,则存在与第一和第二生成器图形分开的具有图5B中的生成器7B的根节点的第三生成器图形。进一步地,如果生成器5的动态依赖性从生成器7A变到生成器7B(图5C),则该改变使第三生成器图形成为保留的第二生成器图形的子集,并且第二生成器图形成为第一生成器图形的子集。如之前所述,虽然本发明的实施方式可以把生成器图形作为图形的集合来存储和处理,但本发明的其他实施方式可以把生成器图形作为彼此链接起来以形成图形的生成器的集合(与图形的集合不同)来存储和处理,从而便于生成器图形的合并和拆分。以示例而非限制的方式,在这里描述了将生成器图形作为生成器的集合来存储和处理的本发明的实施方式。
示例性执行流
图6是根据本发明的一个实施方式的运行时客户端的逻辑执行流以及其与具有面向生成器图形编程支持的运行时的关系的流程图。在图6中,虚分界线600将运行时客户端610的逻辑执行流与具有面向生成器图形编程支持的运行时640分开。
运行时客户端610的逻辑执行流包括块615,620,625以及630,而具有面向生成器图形编程支持的运行时640包括块645,650,660以及可选的655。实箭头线表示从块630到块660的直接因果关系。相比之下,点状箭头线表示分别从运行时客户端610的逻辑执行流中的块615和625到具有面向生成器图形支持的运行时640中的块645和650的因果关系;根据本发明的实施方式,该因果关系可以是直接的或间接的。例如,图6通过使用在虚线600具有面向生成器图形支持的运行时640侧的虚线椭圆中的命令日志665示出可选间接原因。命令日志665收集由运行时客户端610的逻辑执行流的块615和625产生的命令;且命令日志665响应于块630而被处理块660使用。因此,为了优化,命令日志665允许延迟命令以将多个命令收集在一起并对其进行批处理。因此,命令日志665与图3B的覆盖日志396类似,且在本发明的一些实施方式中实际上可以包括覆盖日志396。
在块615中,一组一个或多个感兴趣生成器可以被确定为当前组的感兴趣生成器并且控制传到块620。响应于块615和645之间的因果关系,块645显示当前组的感兴趣生成器被实例化并尝试为每一个生成器发现、建立以及解析(如果动态依赖性被支持且在生成器图形中发现一个或多个)生成器图形,包括基于运行时客户端610中的生成器依赖性声明,在需要时实例化任意的实例以及实例的生成器。参考图3A和3B,自动生成器图形生成模块340和365分别被调用。
在块620中,确定是否存在任意生成器输出覆盖。如果存在,则控制传到块625;否则,控制传到块630。
在块625中,为一组一个或多个生成器接收一个或多个生成器输出覆盖并且控制传到块630。响应于块625和块650之间的因果关系,块650显示当前组的被替换的生成器被实例化(如果在块645中没有被实例化),其输出被修改并被跟踪。因为被覆盖的生成器已经被发现是块645中的生成器图形的一部分,因此该被覆盖的生成器可以已经被实例化。但是,由于未解析的动态依赖性,被覆盖的生成器可以在块645中没有被发现。这样,该被覆盖的生成器被实例化并被覆盖,除了当动态依赖性被解析时该被覆盖的生成器可以被添加到生成器图形。此外,如前所示,图3B的覆盖日志396如果被实施,则会存在于块625与块650之间并成为命令日志665的一部分。再者,所述一组被覆盖的生成器在支持增量执行的本发明的一些实施方式中被跟踪。而在支持覆盖日志396/命令日志665的本发明的实施方式中,跟踪是日志的一部分,在本发明的可替换实施方式中,使用不同的机制在块650中单独执行跟踪。
在块630中,生成器图形执行模块被调用并可选地控制返回到块615和/或块625。响应于块630与块660之间的因果关系,块660显示了当前生成器图形被巡视(walk)以及基于跟踪执行需要执行的任意生成器。之前已经论述了用于执行生成器图形的生成器并在这里适用的各种技术。参考图3A和3B,生成器图形执行模块345和370分别被调用。此外,在本发明的实施方式中,命令日志665被实施,因果关系包括使用命令日志665并在块660之前执行处理块645和650。此外,在支持未解析依赖性的可能性的本发明的实施方式中,当需要时控制从块660流到块655。
在块655中,尝试解析未解析的依赖性并发现和建立生成器图形中的余项,包括实例化任意实例及其生成器。从块655控制流回到块660。
生成器依赖性声明的示例性形式
图7A-图7F示出了根据本发明的实施方式的生成器依赖性声明的一些示例性形式。虽然图7A-图7F示出了支持参量、字段以及排序依赖性的实施方式,但是应当理解不同的实施方式可以支持三种依赖性形式中的仅一种或两种。在本图7A-图7F中示出的本发明的实施方式中,生成器依赖性声明由生成器依赖性声明陈述和可选的显式生成器依赖性声明代码组成。非快捷被声明生成器依赖性是在其中使用显式生成器依赖性声明代码的生成器依赖性,而快捷被声明生成器依赖性是在其中没有使用显式生成器依赖性声明代码的生成器依赖性(而是,运行时没有使用生成器依赖性声明代码和/或基于生成器依赖性声明陈述中的信息即时地(on the fly)执行该代码)。
本发明的不同实施方式可以使用不同的语法来声明生成器依赖性。例如,本发明的不同实施方式可以包括在生成器依赖性声明陈述中使用的不同语法,该语法强约束、弱约束和/或不约束可以被创建的生成器依赖性的类型。强约束的生成器依赖性是为其在生成器依赖性声明陈述中使用基本限定可以被创建的生成器依赖性的类型的语法的生成器依赖性;弱约束生成器依赖性是为其在生成器依赖性声明陈述中使用不完全限定可以被创建的生成器依赖性的类型的语法的生成器依赖性;而未约束的生成器依赖性是为其在生成器依赖性声明陈述中使用不限定可以被创建的生成器依赖性的类型的语法的生成器依赖性。
通过举例而非限定的方式,下面描述的本发明的实施方式包括以下:1)用于参量的强约束生成器依赖性的语法(参量依赖性(ArgumentDependency)=强约束向下声明的参量[静态或动态,且如果是动态、偶然和/或吸收订阅]依赖性);2)用于字段的强约束生成器依赖性的语法(字段依赖性(FieldDepencency)=强约束向下声明的字段[静态或动态,且如果是动态、偶然和/或吸收订阅]依赖性);3)用于排序依赖性的强约束生成器依赖性的语法(排序依赖性(SequencingDependency)=强约束向下声明的排序[静态或动态,且如果是动态、偶然和/或粘附订阅]依赖性);4)用于参量、字段或排序依赖性的弱约束向上声明的生成器依赖性的语法(向上依赖性(UpwardDependency)=弱约束的向上声明的字段、参量或排序[静态或动态,且如果是动态、偶然]依赖性);以及5)弱约束生成器依赖性的语法(弱约束依赖性=a)仅向下声明的排序(静态或动态,且如果是动态、偶然和/或粘附订阅)依赖性;或b)向上声明[参量、字段或排序][静态或动态,且如果是动态、偶然]依赖性)。应当理解虽然本发明的一些实施方式支持生成器依赖性声明陈述的语法,所述语法区分向下声明参量依赖性、向下声明字段依赖性、向上声明依赖性(可以返回向上声明参量、字段或排序依赖性),和弱约束依赖性(可以返回向下声明排序依赖性、向上声明参量、字段或排序依赖性),本发明的可替换实施方式可以采用不同的语法(例如,具有语法,该语法使所有依赖性是具有可以返回任意支持的依赖性(向下和向上声明的参量、字段以及排序依赖性)的确定生成器的未限制的依赖性;具有区分所有支持的依赖性的语法;具有区分向下和向上声明的参量和字段依赖性和区分仅返回向上和向下声明的排序依赖性的语法;区分向下声明的参量和字段依赖性并区分仅返回向上声明的排序依赖性的向上声明的依赖性的语法;区分向下声明的参量、字段和排序依赖性(不支持粘附订阅和向上声明的依赖性)的语法等等)。
应当理解生成器依赖性声明陈述的语法不必等于在生成器图形中创建的生成器依赖性(例如,链接)(例如,ArgumentDependency创建参量依赖性;而UpwardDependency可以创建参量、字段或排序依赖性)。这样,如果理解适当,限定词(例如,参量、字段或排序)和词“依赖性”之间的空间可以用于指由运行时创建的依赖性,而缺少该空间可以用于指语法。
图7A示出了根据本发明的一个实施方式的使用快捷被声明依赖性的方法的生成器依赖性声明的伪代码;而图7B是根据本发明的一个实施方式的示例性生成器的框图。图7A显示1)生成器依赖性声明陈述705,包括参量依赖性1-N、字段依赖性1-M、排序依赖性1-L、向上依赖性1-P以及弱约束依赖性1-Q;和2)方法α(alpha)710,具有来自生成器依赖性声明陈述705的参量1-N。在本发明的一个实施方式中,生成器依赖性声明陈述的参量被计数以为每一个参量提供参量ID,以用于跟踪。图7B显示生成器720,具有以下的子依赖性:1)参量ID 1的生成器725;2)参量ID N的生成器730;3)字段依赖性1-M的生成器740-745;4)排序依赖性1-L的生成器746-747;以及5)向上依赖性1-P的生成器748-749(注意,弱约束依赖性1...Q未显示,但将参考图7G更详细地描述)。因此生成器依赖性声明陈述705的参量对应于方法α710的参量,且生成器依赖性声明陈述705中的参量的参量ID关于其标识的子生成器而被跟踪。
图7C示出了根据本发明的一个实施方式使用非快捷被声明依赖性的方法的生成器依赖性声明的伪代码,并示出了示例性生成器的框图。图7C显示了图7A的生成器依赖性声明陈述705和方法α710以及图7B的生成器720和725。此外,图7C包括与参量依赖性1相关联的生成器依赖性声明代码715。在运行时期间,运行时响应于生成器依赖性声明陈述705的参量依赖性1来访问并执行生成器依赖性声明代码715。生成器依赖性声明代码715的执行返回生成器725作为参量依赖性1的生成器依赖性。因此,图7C示出了本发明的实施方式,其中生成器依赖性声明代码715可以是方法的一部分(不是方法α710)而不是生成器的一部分。
图7D示出了根据本发明的一个实施方式的使用非快捷被声明依赖性的方法的生成器依赖性声明的伪代码;而图7E是根据本发明的一个实施方式的示例性生成器的框图。图7D显示了图7A的生成器依赖性声明陈述705和方法α710,而图7E显示了图7B的生成器720和725。此外,图7D包括:1)生成器依赖性声明代码750;以及2)方法β(beta)755包括生成器依赖性声明代码760。图7D还显示了生成器依赖性声明陈述705的参量依赖性1基于将返回参量依赖性1的依赖性的方法β755来标识生成器(图7E中显示为生成器765)。在运行时期间,运行时响应于生成器依赖性声明陈述705的参量依赖性1,执行生成器765以返回参量依赖性1的生成器依赖性是生成器725的标识。这样,生成器765被称为依赖性确定生成器(其输出是生成器依赖性-因此由具有面向生成器图形编程支持的运行时使用为特殊处理(生成器图形的处理)而被监控的类/实例来返回该输出),而生成器725称为标准生成器(其输出,如果有的话,不由处理生成器图形的运行时直接处理;但是其输出,如果有的话,可以由父生成器(可以是依赖性确定生成器或其他标准生成器)使用和/或被提供作为生成器图形的输出(如果标准生成器是感兴趣生成器,由此是根节点))。
因此,图7D-图7E示出了本发明的实施方式,其中生成器依赖性声明代码715是被称为依赖性确定生成器的另一个生成器的一部分。虽然在图7D-图7E中面向对象源代码包括方法中显式的生成器依赖性声明代码,根据所述方法依赖性确定生成器在运行时被非快捷被声明依赖性的运行时实例化,本发明的可替换实施方式另外或替代地执行运行时以包括通用生成器依赖性声明代码,该代码为快捷被声明依赖性即时地(on the fly)调用作为一个或多个通用依赖性确定生成器。另外,虽然图7C-图7E参考参量依赖性被示出,但是示出的技术适用于其他类型的向下声明的依赖性。此外,图7F-图7G示出了为向上依赖性和弱约束依赖性使用依赖性确定生成器。
图7F是根据本发明的一个实施方式的通过使用具有依赖性确定生成器的向上依赖性的示例性依赖性的框图。图7F显示了具有排序生成器依赖性的生成器720到依赖性确定生成器772。依赖性确定生成器可以在生成器720上返回父生成器748的非订阅向上声明的参量、字段或排序依赖性。此外,该依赖性确定生成器可以执行动态依赖性(即,根据数据值在以上之间选择的偶然依赖性,包括在不同的参量ID之间,如后面所述)。虽然本发明的一些实施方式支持所有的这些可能性,但是本发明的可替换实施方式可以仅支持子集(例如,仅非订阅向上声明的排序依赖性)。
图7G是根据本发明的一个实施方式的通过使用具有依赖性确定生成器的弱约束依赖性的可能的示例性依赖性的框图。图7G显示了具有排序生成器依赖性的生成器720到依赖性确定生成器775。在本发明的一些实施方式中,依赖性确定生成器可以返回任意以下各项:1)在子生成器780上的非订阅向下声明的排序依赖性;2)在生成器720上的父生成器785的非订阅向上声明的参量、字段或排序依赖性;以及3)粘附订阅(在后面描述)。此外,该依赖性确定生成器可以执行动态依赖性(例如,根据数据值在以上之间选择的偶然依赖性,包括在不同的参量ID之间,如后面所述)。虽然本发明的一些实施方式支持所有的这种可能性,但是本发明的可替换实施方式仅支持子集(例如,仅非订阅向上声明的排序依赖性)。
如之前所示,排序依赖性可以用于不同的目的,包括确保修改数据的生成器与使用数据的生成器之间的执行顺序,该修改数据的生成器以运行时不知道的方式修改数据(子生成器可以以需要父生成器的方法来包括访问该输出的代码的方式来编写子生成器的输出(例如,通过影响不是常规生成器输出这样不被运行时检测的输出来影响环境的方法-例如设定全局变量的方法、设定不是生成器输出的实例中的字段的方法、影响外部数据源的方法,等))。
不同的实施方式可以支持一种或多种关于属性生成器来声明生成器依赖性的方式。具体地,在本发明的一些实施方式中,读取字段的生成器依赖于获取属性生成器,而获取属性生成器应当依赖于设定获取属性方法所负责的字段的任何生成器。处理这种情况的一种技术可以在支持排序生成器依赖性的本发明的实施方式中使用,用于为获取属性方法提供依赖性声明陈述,该陈述在设定获取属性方法负责的字段的每一个方法上创建排序生成器依赖性(例如,关于图7G,生成器780是设定字段的生成器而生成器720是负责该字段的获取属性生成器,依赖性确定生成器775被写入以在生成器780上返回生成器720的向下声明的排序依赖性)。处理该情况的第二种技术可以在支持排序生成器依赖性和向上声明的生成器依赖性的本发明的实施方式中使用,该技术在用于设定字段的任何方法的生成器依赖性声明陈述/代码中包括在负责该字段的获取方法上的向上声明排序生成器依赖性(例如,使用向上依赖性或限制依赖性)(例如,关于图7G,生成器720是设定字段的生成器而生成器785是负责该字段的获取属性生成器,依赖性确定生成器775被写入以在生成器720上返回父生成器785的向上声明的排序依赖性)。该第二种技术允许设定字段方法的程序员负责提供生成器依赖性给合适的获取方法,而不需要程序员进入获取方法并修改其生成器依赖性声明陈述/代码。
在使用排序依赖性的情况下,当给定的生成器依赖给定的变量时,该变量应当在生成器图形的给定执行中被多于一个生成器的继承生成器修改(应当注意通过偶然依赖性(在后面描述),不同的继承生成器可以在当前生成器图形的不同执行期间修改变量)。例如,在当前生成器图形的给定执行中,获取属性生成器可以仅依据设定该获取属性生成器负责的字段的另一个生成器。
应当理解,本发明的不同实施方式可以实施图7A-图7F中所示的一个或多个本发明的实施方式。例如,本发明的一个实施方式支持快捷和非快捷被声明依赖性,这两种都使用依赖性确定生成器;具体地,在本发明的该实施方式中:1)面向对象源代码包括方法中的显式生成器依赖性声明代码,根据该方法运行时为非快捷被声明依赖性在运行时实例化依赖性确定生成器;2)运行时包括通用生成器依赖性声明代码,该代码为快捷声明即时地调用偶然依赖性(在后面描述)作为一个或多个通用依赖性确定生成器;以及3)运行时包括直接链接到快捷声明、非偶然的生成器依赖性的支持(在后面描述)。
作为另一个示例,本发明的一个实施方式支持使用依赖性确定生成器的非快捷和快捷被声明生成器依赖性;具体地,在该本发明的实施方式中:1)面向对象源代码包括方法中的显式生成器依赖性声明代码,根据该方法运行时为非快捷被声明依赖性在运行时实例化依赖性确定生成器;2)运行时包括通用生成器依赖性声明代码,该代码为快捷被声明依赖性(不管类型)调用作为一个或多个通用依赖性确定生成器。该后一个实施方式允许一致处理生成器依赖性,因此可以简化运行时。
此外,虽然在本发明的一个实施方式中用于方法的生成器依赖性声明陈述只位于面向对象源代码中的方法的上面,但是在在本发明可替换实施方式中,该陈述可以位于任何位置(例如,用于类的所有方法的生成器依赖性声明陈述在该类中组合到一起,用于所有类中的所有方法的生成器依赖性声明陈述组合一起作为单独的数据表,等等)。另外,虽然在本发明的一个实施方式中,生成器依赖性声明代码与生成器依赖性声明陈述分开,但是在本发明的可替换实施方式中,它们可以结合起来(例如,生成器依赖性声明代码在生成器依赖性声明陈述的插入语中,生成器依赖性声明代码直接置于生成器依赖性声明陈述下面并由运行时当做单个单元来处理,等)。
图7H-图7I示出了由于依赖性确定生成器导致的存在于生成器图形中的不同子图形之间的区别。图7H示出了根据本发明的一个实施方式的标准生成器的示例性生成器图形。具体地,图7H显示了具有根节点S1的生成器图形、具有根节点S5的生成器图形、以及具有根节点S11的生成器图形。标准生成器S1具有作为子体的标准生成器S2、S3以及S4;标准生成器S2和S3具有作为子体的标准生成器S7和S8;标准生成器S5具有作为子体的标准生成器S4和S6;以及标准生成器S11具有作为子体的标准生成器S6和S10。图7H的示例性生成器图形可以通过使用任意数量的生成器依赖性和依赖性确定生成器而被发现、建立以及解析。图7I示出了用于发现、解析以及建立图7H中的生成器图形的生成器依赖性和依赖性确定生成器的一个示例。具体地,图7I显示图7H中的图形是一大组的成器图形的子图形。换句话说,图7I的生成器图形包括图7H中的图形(称为“目标子图形”并使用实箭头线和实椭圆示出)和辅助发现、解析以及建立目标子图形的图形(称为“决定子图形”并用虚箭头线和虚椭圆示出)。图7H中的决定子图形包括依赖性确定生成器(DDP)1-11和标准生成器S9-10。在图7H中,S1被显示为益来与DDP 1-3,DDP 1-3分别在S2、S3和S4上返回S 1的向下声明的生成器依赖性;S4被显示为依赖于DDP 4依赖性,该DDP 4在S4上返回S5的向上声明的生成器依赖性S5被显示为依赖于DDP 5,DDP 5在S6上返回S5的向下声明的生成器依赖性;S3被显示为依赖于DDP 6,而DDP 6依赖于DDP 8,DDP 8在S9和S10上返回DDP 6的向下声明的生成器依赖性,这使DDP 6在S7上返回S3的向下声明的依赖性;S3被显示为依赖于DDP 7,DDP7在S8上返回S3的向下声明的生成器依赖性;S8被显示为依赖于DDP 9,DDP 9返回粘附订阅,对于该粘附订阅S6是触发生成器而S11是被创建的父体(由此,在S6上的S11的生成器依赖性);S2被显示为依赖于DDP 10,DDP 10在S7和S8上返回S2的向下声明的生成器依赖性的集合;以及S11被显示为依赖于DDP 11,DDP 11在S10上返回S11的向下声明的生成器依赖性。应当理解标准生成器可以既是目标子图形的部分也是决定子图形的部分(例如,见S10)。值得注意的是在图形上数据从一个标准生成器流到另一个标准生成器的情况下,目标子图形是被驱动的数据。
示例性编程和执行框架
图8A是示出了根据本发明的一个实施方式的第一示例性框架的框图,在该框架中应用被提供给终端用户。图8A所示的框架包括三个基本分区,第一个分区包括具有面向生成器图形编程支持810的运行时的创建。该第一个分区由具有高级编程技能的程序员执行。当在该分区中工作时,程序员称为运行时程序员。当创建具有面向生成器图形编程支持时,运行时程序员包括生成器图形支持和执行各种类型的在转换代码、实例化代码以及数据准备代码中使用的命令的支持。
第二个分区包括运行时执行的面向对象应用源代码820的创建。面向对象应用源代码820包括两个基本分区:1)类定义,包括具有生成器依赖性声明822的在方法中表达的业务逻辑(这可以可选地包括其他功能,例如图形用户界面-在该情况下,使用生成器和生成器依赖性声明来编写图形用户界面);以及2)类定义,包括在方法824中表达的客户端代码,包括实例化代码824A(类、实例以及感兴趣生成器,以促使生成器图形的生成)、数据准备代码824B(例如,设定命令,例如触发生成器输出的覆盖的设定命令)、导致生成器图形的执行的总的执行命令824C(例如执行并获取命令)以及任何所需的图形用户界面824D(未包括在822中)。生成器依赖性声明用于在定义包括业务逻辑的类期间(而不是在创建这些类的实例之后)定义生成器之间的联系。面向对象源代码820是被编译和执行的硬编码的类、实例以及方法。
虽然在本发明的一个实施方式中执行全局执行命令,所述命令的执行促使尝试执行当前在生成器图形结构380中的所有生成器图形,但是本发明可替换实施方式可替换地或还能执行图形特定执行命令,该图形特定执行命令需要当前被执行的生成器图形的给定图形的标识。此外,全局执行命令根据运行时的执行可以是显式的(例如,设定、设定、设定、执行、获取、获取)或隐式的。例如,隐式全局执行命令可以:1)被感兴趣生成器上的第一获取命令触发(例如,设定、设定、设定、获取(隐式执行)、获取);2)被每一个数据处理触发(设定(隐式执行)、设定(隐式执行)、设定(隐式执行)、获取、获取);等等。
第二分区也由具有高级编程技能且了解应用的商业目的的程序员执行。当在该分区中工作时,程序员称为应用程序员。作为该分区的一部分,如果应用需要图形用户界面,则应用程序员还为该特定应用设计并编码该图形用户界面;且由此也称为应用设计者。
第三个分区包括使用由运行时运行的应用程序。该第三个分区由不需要具有任何编程技能的终端用户执行。应用程序可以以各种方式被分配(例如,作为源代码;源代码的转换,例如字节代码;二进制等)。此外,应用程序可以被分配用于独立使用(stand alone use)830(在该情况下,全部应用程序(以及运行程序(和运行时(如果还没有))被提供给计算机系统)和/或客户端/服务器使用。在本发明的一个实施方式中,客户端/服务器分配包括:为服务器使用832分配类定义,该类定义包括在具有生成器依赖性声明822的方法(和运行时(如果还没有))中表达的业务逻辑;以及分配类定义,该类定义包括在方法824(和运行时(如果还没有))中表达的客户端代码,其中计算机系统上的客户端使用834促使与服务器系统上的服务器使用832的通信。
图8A还示出了为独立使用830和客户端使用834而提供的可选可配置交互生成器输出布局图形用户界面模块840。面向对象源代码820可以由运行时来运行以生成生成器图形,且可配置交互生成器输出布局图形用户界面模块840允许以图形方式显示来自生成器图形的输出并与生成器图形交互。具体地,可配置交互生成器输出布局图形用户界面模块840包括:1)配置和映射图形用户界面模块844,用于允许选择的生成器输出的布局和映射的配置(例如,使用的屏幕的区域,怎样显示数据等);以及2)显现和交互图形用户界面模块846,用于显现配置的布局并允许生成器输出的覆盖(导致通过全局执行命令更新生成器图形)。应当理解可配置交互生成器输出布局图形用户界面模块840可以或不可以由编写运行时810的同一个实体来创建。
图8B是示出可根据本发明的一个实施方式的第二示例性框架的框图,在该框架中应用被提供给终端用户。图8B与图8A一样,除了以下不同:1)独立使用830不存在;2)面向对象源代码820被提供给服务器使用832,而客户端代码824没有提供给客户端使用834;3)可配置交互生成器输出布局图形用户界面模块840被提供给服务器使用832而没有提供给客户端使用834;以及4)通用可配置交互生成器输出布局客户端界面885被提供给客户端使用834。可配置交互生成器输出布局客户端界面885用于与可配置交互生成器输出布局图形用户界面模块840接口。
不管是否使用框架,在本发明的一个实施方式中,面向生成器图形编程框架提供与未写入生成器依赖性声明的程序进行接口的能力。该与未写入生成器依赖性声明的程序进行接口的能力包括:1)调用器部分(例如,没有根据面向生成器图形编程而编写的图形用户界面);以及2)调用的部分(例如没有根据面向生成器图形编程而编写的外部数据源)。调用器部分可以通过客户端代码发布面向生成器图形编程命令。调用的部分可以被执行作为封包(wrap)被调用的部分的生成器的一部分(称为“封包生成器(wrappingproducer)”)。执行调用的部分(例如从数据源读取数据或订阅外部数据源中的数据改变)可以一次触发实例的修改。这种改变可以通过调用封包生成器的代码中的属性设定方法来发生。获取属性生成器(获得者)被促使在这些封包生成器上具有依赖性,以确保在外部数据源中发生的由改变触发的实例修改通过生成器图形被合适地传播。如之前所述,不同的实施方式可以支持一个或多个声明关于属性生成器的生成器依赖性的方式。例如,在支持排序生成器依赖性的本发明的一些实施方式中,排序依赖性可以用于声明封包生成器上非订阅向下声明的排序生成器依赖性。作为另一个示例,在支持排序生成器依赖性和非订阅向上声明的生成器依赖性的本发明的一些实施方式中,向上依赖性和/或弱约束依赖性可以位于封包生成器的生成器依赖性声明中,从而为属性生成器创建非订阅向上声明的排序生成器依赖性。
图8C-图8F示出了根据本发明的一个实施方式的可配置交互生成器输出布局图形用户界面模块840的示例性截屏和使用。虽然将参考可配置交互生成器输出布局图形用户界面模块840来描述本发明的实施方式,所述可配置交互生成器输出布局图形用户界面模块840提供配置、映射以及以电子表格的形式与选择的当前生成器图形的输出的交互,但是本发明的可替换实施方式可以被执行以另外或可替换地提供另一种形式的支持。此外,虽然根据一些实施方式描述了执行配置、映射以及电子表格形式的交互的示例方式,但是本发明的其他实施方式可以以其他方式执行这些操作,具有不同的界面和/或不同的屏幕布局。此外,电子表格可以支持任意已知的与电子表格相关联的功能(例如,色彩选择、字体选择、条形/饼形/线形图、数据透视表、保存布局、装载布局,等)。
图8C-图8D示出了根据本发明的一个实施方式的自由单元选择的示例性截屏和使用,而图8E-图8F示出了根据本发明的一个实施方式的表格创建的示例性截屏和使用。图8C-图8F中的每一个包括屏幕上方的菜单条850、当前生成器图形中的生成器的类列表852和其在屏幕左下侧的输出、以及用电子表格似的布局填充屏幕的剩余部分的配置和映射视窗854。另外,图8C-图8F还显示具有列表852中类的获取属性方法的类的示例性列表,如下:1)类PERSON(人);2)类PERSON的获取属性方法,包括FIRSTNAME(名)(例如,字符串)、LASTNAME(姓)(例如,字符串)、GENDER(性别)(例如,字符串)、HOMEADDRESS(家庭住址)(类地址的实例)、PROFESSIONALADDRESS(工作地址)(类地址的实例)、DATEOFBIRTH(出生日期)(例如,日期)以及AGE(年龄)(例如,整数);3)类地址;4)类ADDRESS的获取属性方法,包括CITY(城市)(例如,字符串)、STATE(州)(例如,字符串)、ZIPCODE(邮编)(例如,字符串)。这样,当前生成器图形包括类PERSON和类ADDRESS的生成器以及其输出是类PERSON和ADDRESS的生成器。还值得注意,获取属性方法AGE基于获取属性方法DATEOFBIRTH的输出而计算年龄;这样,根据获取属性方法AGE实例化的生成器与根据获取属性方法DATEOFBIRTH实例化的生成器相关。
图8C-图8D示出了输入到视窗的第一列的连续单元的自由文本,如下:顾客、名、姓、出生日期以及年龄;而图8E-图8F显示如下:1)输入到视窗的第一行的自由文本——顾客列表;以及2)输入到视窗的第二行的连续单元的自由文本:名、姓、出生日期以及年龄。
图8C示出了根据本发明的一个实施方式具有可配置交互生成器输出布局图形用户界面模块840的自由单元选择的示例性截屏和使用。图8C显示了类PERSON和选择的类PERSON的获取属性方法到视窗不同单元的一组映射。具体地,类PERSON映射到自由文本“顾客”右边的单元。作为该动作的一部分,本发明的一些实施方式提示用户从多个支持的过滤器中的一个中做出选择(显示为过滤器选择858)(例如,下拉列表,形成滚动箭头等)。这些过滤器能够选择的被选择的类的生成器的一个或多个实例关键字,或选择其输出类是被选择的类的生成器的一个或多个实例关键字。虽然本发明的一些实施方式支持多个过滤器,但是本发明的其他实施方式默认为一个(且允许用户选择是否选择其他不同的)或仅支持一个且不需要执行过滤器选择858。映射856还显示类PERSON的获取属性方法FIRSTNAME、LASTNAME、DATEOFBIRTH以及AGE分别被映射到与具有对应自由文本的单元邻近的单元。这种映射可以用任意数量的公知技术来执行,包括在GUI领域拖放、键入等。
图8D示出了根据本发明的一个实施方式的具有可配置交互生成器输出布局图形用户界面模块840的自由单元选择的另一个示例性截屏和使用。图8D显示了类PERSON所映射到的单元允许实例选择854。具体地,基于用于该单元的过滤器,给用户机会从包括类PERSON的生成器的实例关键字和产生类PERSON的生成器的实例关键字的列表中选择类PERSON的实例。类PERSON的实例的选择(或单个实例的存在)致使用该实例的对应的获取属性方法的输出自动填充类PERSON的获取属性方法被映射到的单元。基于类PERSON的实例的表格填充被标记为858。在图8D中的示例中,类PERSON的获取属性方法FIRSTNAME、LASTNAME、DATEOFBIRTH以及AGE被映射到的单元分别被填充JOHN、SMITH、7/20/1990以及16。
图8D还显示了获取属性方法已经被映射到的视窗的单元可以被覆盖。通过举例的方式,图8D显示如果获取属性方法DATEOFBIRTH被映射到的单元被覆盖,则该单元使其输出当前正填充该单元的生成器的输出的覆盖、全局执行命令的调用(这导致其输出当前正填充该单元的生成器的再执行,获取属性方法AGE被映射到该单元)以及任意显示的所需更新。
图8E示出了根据本发明的一个实施方式的具有可配置交互生成器输出布局图形用户界面模块840的表格创建的示例性截屏和使用。图8E显示了区域和方向选择864被执行以标识具有自由文本——名、姓、出生日期以及年龄——的单元正下方的三行垂直的表格(用围绕这些单元的粗虚线示出)。本发明的不同实施方式可以以各种方式支持用户执行该操作,(包括:1)用如鼠标的输入装置来选择区域;以及2)用如弹出式菜单的界面在竖直表格、水平表格或数据透视表之间选择——假定支持多个方向)。图8E还显示被选择的类PERSON的获取属性方法到视窗的不同单元的一组映射866。具体地,映射866显示类PERSON的获取属性方法FIRSTNAME、LASTNAME、DATEOFBIRTH以及AGE分别被映射到具有对应自由文本的单元的正下方的单元。
图8F示出列入根据本发明的一个实施方式的具有可配置交互生成器输出布局图形用户界面模块840的表格创建的另一个示例性截屏和使用。映射866导致类的实例的相应的获取属性方法的输出自动填充表格的列,类PERSON的获取属性方法被映射到该列。基于类PERSON的实例的表格填充被标记为868。在图8D的示例中,类PERSON的获取属性方法FIRSTNAME、LASTNAME、DATEOFBIRTH以及AGE被映射到的列用以下行的数据来填入:1)史蒂夫,柯林斯,7/20/1990以及16;2)珍妮弗,亚当斯,7/20/1990和16;以及3)约翰,史密斯,7/20/1985,和21。
如图8D中一样,图8F显示了获取属性方法已经映射到的视窗的单元可以被覆盖。通过举例的方式,图8F显示如果获取属性方法DATEOFBIRTH被被映射到的列的第二行的单元被覆盖,则该覆盖导致其输出当前填充该单元的生成器的输出的覆盖、全局执行命令的调用(这导致其输出当前正填充该单元的生成器的再执行,获取属性方法AGE被映射到该单元)以及任何显示的所需更新。
图8C-图8F示出了由配置和映射图形用户界面模块842生成的示例性屏幕。通过显现和交互图形用户界面模块846生成的屏幕是相同的,不同在于通过类列表(具有其获取属性方法)852,配置和映射视窗854被显现和交互视窗(未显示)替代,该显现和交互视窗包括与显示的配置和映射视窗854相同的图像(不同的是映射特性不再可用)。
示例性运行时分配方案
图9A-图9C示出了分配具有面向生成器图形编程支持的运行时的各种方案。应当理解这些分配方案是示例性的,因此其他方案也在本发明的范围中。
图9A是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第一方案的框图。在图9A中,面向对象源代码905(其包括生成器依赖性声明)被显示在具有面向生成器图形编程支持的运行时910的上面,该运行时910在具有类装载、动态类实例化、动态单方法调用以及类/方法自省(introspection)的运行时915的上面,运行时915在操作系统920的上面。在图9A中,运行时910与运行时915一起工作。尽管任意数量的机制可以用于允许运行时910与运行时915一起工作,但元数据功能以举例的方式被描述。元数据功能允许附加信息被添加到源代码,所述信息被开发工具使用。例如,用于Java的元数据功能规范将用于注释字段、方法以及类的API定义为具有特定属性,该特定属性指示它们应当以特殊方式由开发工具、部署工具或运行时库来处理(Java规范请求175)。在该示例中,对面向对象源代码905进行编程的程序员可以将注释以生成器依赖性声明的形式添加到方法。由于这些注释由运行时915切换到运行时910,因此运行时910指示生成器依赖性声明的语法。在图9A中,运行时910和运行时915可以由不同的机构开发和/或分配。
图9B是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第二方案的框图。在图9B中,面向对象源代码925(其包括生成器依赖性声明)被显示在运行时930(具有类装载、动态类实例化、动态单方法调用和类/方法自省,以及面向生成器图形编程支持)的上面,运行时930在操作系统935的上面。与图9A比较,运行时910和915被合并成单个运行时930。这种合并的结果是,运行时930指示生成器依赖性声明的语法。因此,对面向对象源代码925进行编程的程序员可以将生成器依赖性声明添加到所需语法中。
图9c是示出了根据本发明的一个实施方式的用于分配具有面向生成器图形编程支持的运行时的第三方案的框图。在图9C中,面向对象源代码940(其包括生成器依赖性声明)被显示在运行时945(具有类装载、动态类实例化、动态单方法调用和类/方法自省,以及面向生成器图形编程支持)的上面。与图9B比较,运行时920和935被合并成单个实体。这种合并的结果是,操作系统945指示生成器依赖性声明的语法。因此,对面向对象源代码940进行编程的程序员可以将生成器依赖性声明添加到所需语法中。
虽然描述了实施方式,其中运行时具有类装载、动态类实例化、动态单方法调用以及类/方法自省,但是可替换实施方式可以包括更多或更少的特征(例如,实例克隆、动态代理、原始类型转换等)。
示例性优点
在本发明的一个实施方式中,为方法声明生成器依赖性,作为指定使用合适实例而不是用手动调用排序代码的方法调用排序(其中合适的实例包括作为参量使用的实例、实例方法使用的实例以及类方法使用的元类实例)的方式。有效地,生成一些或所有手动调用排序代码的工作被替换为:1)应用程序员为编写生成器依赖性声明所完成的工作;以及2)运行时为发现并建立生成器图形以及执行这些生成器图形的生成器所完成的工作。换句话说,之前包含在手动调用排序代码中的逻辑基于生成器依赖性声明在运行时期间是可被运行时发现的。因此,生成器依赖性声明告知运行时具有什么样的参量的什么实例的什么方法被执行以及为了同步何时执行。尽管编写运行时的工作相对较大,但是只需要编写一次就能用于执行为运行时编写的任何面向对象应用;相反,为了典型应用,编写生成器依赖性声明的工作与编写手动调用排序代码相比相对较少。
减少编程错误
面向生成器图形编程一般降低与手动调用排序代码的调试和/或性能调节相关的耗费。这至少因为应用程序的基础结构从概念上是操作特定输入的对象的转换方法(与对象相关的一个方法的输出是另一个的输入,等)的一组非格式化图形的原因是真实的。生成器依赖性声明和具有面向生成器图形编程支持的运行时将这些图形格式化为生成器图形。因此,对于每一次改变数据的机会,应用程序员不需要考虑其影响,并编写手动调用排序代码以利用合适的输入使合适的实例的合适的转换方法以合适的顺序被调用。换句话说,对于每一次改变数据的机会,应用程序员不需要考虑哪些图形受影响,和在这些图形内的实例的哪些转换方法受影响。而是,自动生成器图形生成模块发现并建立生成器图形且生成器图形执行模块再执行需要反映数据改变的生成器图形。该自动化帮助应用程序员避免如下错误,例如:1)以错误顺序调用合适实例的合适转换方法;2)忘记包括使图形中实例的一个或多个所需的转换方法响应于一些改变的数据而被调用的命令;3)包括使实例的不必要的转换方法响应于一些改变的数据而被调用的命令(例如,包括用于调用不是受数据改变的影响的图形一部分的实例的转换方法的命令;包括用于调用是受数据改变的影响但自身没有被影响的图形一部分的实例的转换方法的命令,等等)。
同步化
如之前所述,在执行期间的生成器输出的缓存允许同步化。因此,根据与观察者模式的比较,生成器依赖性声明向具有面向生成器图形编程支持的运行时通知依赖性,且该运行时确定何时回调哪个生成器。
完全解释任意结果的能力
在本发明的一个实施方式中,操练(drilling)/查看模块(未显示)被包括作为运行时的一部分。操练/查看模块提供图形用户界面,该图形用户界面通过终端用户的交互允许向下操练生成器图形(从根节点下行到生成器图形)以查看生成器图形的各种生成器的输出。这允许终端用户观察分配到感兴趣生成器的输出的各种输出,包括数据值和依赖性(由依赖性确定生成器返回)。此外,在本发明的一个实施方式中,操练/查看模块给终端用户提供查看生成器的方法内的代码、生成器的实例的值和/或生成器的类的内容的能力。
因此,操练/查看模块提供多种后置处理活动,包括调试、输出解释等。
示例性实际应用/技术效果/工业适用性
存在不同方面的多种示例性实际应用和本发明的实施方式。例如,运行时作为执行应用程序的一部分,促使从机器存储介质中取得信息(例如,访问面向对象源代码,包括生成器依赖性声明)、将信息存储到机器存储介质(例如,存储像生成器图形结构的数据结构等)、硬件处理资源的操作、提供感兴趣生成器的输出(例如,通过图形用户界面、存储到机器存储介质、传输等)等。在某个意义上,预处理行为包括编写这样的应用程序和/或提供数据(数据可以表示任意数量的物理和/或实际项,例如金融值、地理值、气象值、保险统计值、统计值、物理测量、机器状态值等),而后置处理行为包括结果的提供(所述结果可以表示任意数量的物理和/或实际项,例如金融值、地理值、气象值、保险统计值、统计值、工业测量、机器控制信息等)。通过具体示例的方式,后置处理行为可以由以下来提供:1)图10的生成器图形视窗模块1062,用于以图形方式显示显示运行时生成的当前生成器图形的表示;和/或2)可配置交互生成器输出布局图形用户界面模块840(同样见图10的可配置交互生成器输出布局图形用户界面模块1085),用于以图形方式显示来自生成器图形的输出并与该生成器图形交互。
作为另一个示例,自身具有生成器依赖性声明的应用程序在被运行时执行时表示物理/实际项并促使上述操作。通过具体示例的方式,这些生成器依赖性声明响应于运行时对它们的执行而促使数据结构在机器存储介质中被形成。而且,生成器依赖性声明和应用程序一起被存储并从机器存储介质中和应用程序一起被取得。此外,这些生成器依赖性声明表示生成器之间的关系,而生成器表示执行的操作(方法)和实例。面向对象编程中的实例可以用于表示物理和/或实际项,而生成器表示在这些描述上被执行的操作。
通过另一个示例,一组一个或多个应用程序和运行时实施交叉资产风险管理软件,包括外币兑换、资产净值、利率、信贷、膨胀、商品以及交叉资产复合产品。这些产品范围从现金和实际普通产品到特殊且复杂的衍生产品。还包括的是一组用于这些产品的数学估价模型,以及它们相关的市场数据、支付和记账项生成例程和它们的相关可观察的标定模型以及它们相关的原始输入。
通过另一个示例,一组一个或多个应用程序和运行时可以实施文字处理器、电子数据表、通信/电子邮件软件、照片查看软件、病毒扫描软件、媒体播放器、数据库服务器、游戏、工业应用、计算机辅助设计工具应用和/或操作系统。当然,应用程序可以被实施以执行各种其他任务。
示例性实施
通过图示的方式,本发明的示例性实施方式将被描述,其支持依赖性、动态依赖性(包括偶然依赖性和订阅依赖性)、用于快捷被声明依赖性和非快捷被声明依赖性的显式依赖性确定生成器、用于快捷被声明依赖性、类关键字、实例关键字、方法关键字、生成器覆盖/不覆盖命令(其是设定命令类型)以及全局执行命令的即时依赖性确定生成器。此外,示例性实施方式可选地支持生成器图形交互视窗模块和增量执行。当然,本发明的可替换实施方式可以实施更多、更少和/或不同的特征。
图10是根据本发明的一个实施方式的示例性实施的框图。在图10中,虚分界线1000将运行时客户端1002与具有面向生成器图形编程支持的运行时间1004隔开。
运行时客户端1002的逻辑执行流包括块1010、1020、1025、1030以及1035,且具有面向生成器图形支持的运行时间1004分别包括对应的块1095、1098、1040、1045以及1070;实箭头线表示从运行时客户端1002的逻辑执行流的块1035到具有面向生成器图形编程支持的运行时间1004的块1070的直接因果关系,而点箭头线示出了从运行时客户端1002的块1010、1020、1025和1030到具有面向生成器图形编程支持的运行时间1004的块1095、1098、1040和1045的因果关系。根据本发明的实施方式,这些后来的因果关系可以是直接或间接的。例如,与图6类似,通过使用命令日志(未显示)和/或覆盖日志1047可选间接因果关系可以被使用。此外,块1095和1098是虚线,因为根据本发明的实施方式它们可选地可以是不同块的一部分(例如,块1095可以是块1098的一部分;块1098可以是块1040的一部分;块1095和1098可以是块1040的一部分)。类似的,块1045是虚线,是因为根据本发明的实施方式它可选地可以是不同块的一部分(例如,块1045可以是块1070的一部分)。
在图10中,运行时1002包括类定义1010,该类定义包括具有数据1012、方法1014、生成器依赖性声明1016以及可选的类关键字1090的业务逻辑。类定义1010是面向对象编程语言的类,因此包括用于数据1012和方法1014的定义。此外,这些类定义1010包括如前所述的用于方法1014的生成器依赖性声明1016。此外,在本发明的一个实施方式中,每一个类具有用于跟踪的类关键字1090。
运行时1004的新的类模块1095装载并自省类定义1010(例如,响应于新的类命令)。该装载和自省可以使用任意数量的公知或将来开发的技术来完成,包括为了优化而选择性地装载类的技术。新的类模块1095装载类通过运行时1004的类1054来示出。作为装载和自省类1054的一部分,新的类模块1095还装载并自省生成器依赖性声明1016,如通过类1054中的方法和生成器依赖性声明1056所示的。新的类模块1095还保持类跟踪结构1092,该类跟踪结构1092用于使用类关键字来跟踪类。因此,类跟踪结构1092保持类关键字与类1054的引用之间的对应。而且,新的类模块1095还保持用于使用方法关键字跟踪方法的方法跟踪结构1058。因此,方法跟踪结构1058保持方法关键字与方法的引用以及关于生成器依赖性声明的信息之间的对应。
运行时客户端1002还包括具有实例关键字1020的实例实例化命令。运行时1004新的实例模块1098对由具有实例关键字1020的实例实例化命令指定的实例(例如,响应于新的实例命令)进行实例化。该实例的实例化可以使用任意数量的公知或将来开发的技术来完成,包括为了优化而选择性地对实例的技术进行实例化。作为该实例实例化的一部分,新的实例模块1098使用类关键字访问类跟踪结构1092从而访问来自类1054的合适的类。新的实例模块1098对实例进行实例化可以通过运行时1004的实例1052来示出。新的实例模块1095还保持用于使用实例关键字来跟踪实例的实例跟踪结构1065。因此,实例跟踪结构1065保持实例关键字与实例1052的引用之间的对应。如之前所示,新的类模块1095可以是新的实例模块1098的一部分,其中类1054可以响应于实例实例化命令1020(而不是单独的新的类命令)被实例化。
运行时客户端1002还包括具有生成器关键字1025的生成器实例化命令。运行时1004的自动生成器图形生成模块1040对由具有生成器关键字1025的生成器实例化命令指定的生成器(例如,响应于指定当前组的感兴趣生成器的新的生成器命令)进行实例化。此外,自动生成器图形生成模块1040还响应于之前所述的当前组的感兴趣生成器发现、建立并可选地解析生成器图形。在本发明的一个实施方式中,生成器关键字包括类关键字、实例关键字以及方法关键字。作为该生成器实例化的一部分,自动生成器图形生成模块1040:1)使用类关键字来访问类跟踪结构1092以访问来自类1054中的合适的类;2)使用实例关键字来访问实例跟踪结构1065以访问来自实例1052中的合适实例;3)使用方法关键字访问方法跟踪结构以访问合适的生成器依赖性声明陈述。具有生成器关键字1025的生成器实例化命令指定的生成器的实例化和任意被发现的生成器和建立生成器图形的实例化通过运行时1004的生成器图形结构1060来示出。因此,在本发明的一个实施方式中,由具有生成器关键字1025的生成器实例化命令标识的生成器关键字和通过生成器图形生成而被发现的关键字与表示当前生成器图形的附加信息一起被存储在生成器图形结构1060中。
如之前所述,块1095和1098可以是块1040的一部分,因此,关于装载/实例化哪些类、实例以及生成器的决定由当前生成器图形中有什么生成器来驱动。在该本发明的实施方式中,类、实例以及生成器的装载/实例化可以被优化且是以生成器为中心的。
运行时客户端1002还包括数据准备命令,包括生成器输出覆盖/不覆盖命令1030。覆盖/不覆盖命令包括被覆盖/不被覆盖的生成器的生成器关键字,以及被覆盖时的覆盖值。运行时1004的覆盖生成器输出模块1045使由生成器覆盖/不覆盖命令指定的生成器被覆盖/不被覆盖。该因果关系可以间接或直接的。
在间接因果关系的情况,覆盖生成器输出模块1045填充覆盖日志1047以用于生成器图形执行模块1070的使用。在直接因果关系的情况,覆盖生成器输出模块1045访问生成器图形结构1060的生成器输出缓存1097和实例1052。具体地,如参考覆盖生成器输出模块390所描述的,在一个实施方式中,生成器可以被分类为属性生成器或方法生成器;因此,覆盖生成器输出模块1045可以包括用于被覆盖的属性生成器的覆盖属性生成器输出模块(未显示)和用于被覆盖的方法生成器的覆盖方法生成器输出模块(未显示);属性方法的覆盖使覆盖值被存储在生成器图形结构1060的生成器输出缓存1097中且被存储在实例1052的合适实例的数据中,而方法生成器的覆盖使覆盖值被存储在生成器输出缓存1097中。
在本发明的一个实施方式中,生成器在生成器图形初始被执行前可以不被覆盖,其中生成器将是该生成器图形的一部分(因此,生成器已经被实例化,从而被自动生成器图形生成模块1040指定为感兴趣生成器或被发现)。但是,在图10所示的实施方式中,生成器可以通过使用生成器覆盖命令来实例化并覆盖而在初始执行之前被覆盖。该被覆盖的生成器一般通过发现进程来最后成为生成器图形的一部分(例如,当动态依赖性被解析时)。在本发明的一些实施方式中,该数据准备还可以包括其他类型的设定命令。覆盖生成器输出模块1045被显示为虚线框,这是因为该覆盖生成器输出模块1045在本发明的可替换实施方式中可以不出现。
生成器图形结构1060还可选地包括用于支持增量执行的本发明的一些实施方式的增量执行标记1080。如之前参考图3B的增量执行标记382所述,增量执行标记1080用于辅助在初始执行之外的执行上的生成器图形的增量执行。本发明的不同实施方式以不同的方式使用增量执行标记382。例如,在具有命令日志的本发明的一个实施方式中,日志用于跟踪被添加和/或被修改的生成器,而增量执行标记382用于标记受影响的生成器(被修改或添加的生成器的前身(ancestor),以由此依赖于所述前身)。作为另一个示例,在不具有命令日志的本发明的一个实施方式中,增量执行标记382用于标记被添加或修改的生成器和被修改或添加的生成器的前身(由此与该生成器相关)。作为另一个示例,在不具有命令日志的本发明的一个实施方式中,生成器的修改和添加立即被完成且增量执行标记382用于标记为是修改或添加的生成器的前身(因此依赖于所述前身)的生成器。虽然本发明的实施方式已经被描述支持增量执行并使用增量执行标记,但是本发明的其他实施方式支持不适用增量执行标记的增量执行(例如,命令日志用于跟踪被添加或修改的生成器,且执行开始生成器的列表被保留在执行开始日志中;其中生成器图形执行模块1070从执行开始生成器开始,且以生成器图形的前身向上到顶部的方式工作;通过举例而非限定的方式,本发明的该实施方式在后面参考图15-25被描述)。
运行时客户端1002还包括全局执行命令1035。运行时1004的生成器图形执行模块1070执行生成器图形。这样,生成器图形执行模块1070修改生成器输出缓存1097(在属性生成器和方法生成器的情况)、使用增量执行标记1080(如果存在)以及修改实例1052的数据(在属性方法的情况)。
之前已经论述过用于执行生成器图形的生成器并这里可适用的各种技术。例如,在实施命令日志的实施方式中,命令日志被使用然后生成器图形被执行。此外,在支持未解析依赖性的可能性的本发明的实施方式中,生成器图形执行模块1070包括动态依赖性模块1075,该动态依赖性模块1075可以调用自动生成器图形生成模块1040。
图10还示出了提供机制(例如图形用户界面)的可选生成器图形视窗模块1062,通过该模块1062程序员/用户可以查看生成器图形和生成器图形结构的生成器输出。此外,图10示出了可选的可配置交互生成器输出布局图形用户界面模块1085,用于提供图形用户界面(包括块1030和1035的动态调用),该图形用户界面表示可配置交互生成器输出布局图形用户界面模块840。
在使用命令日志的本发明的实施方式中,不同的触发用于触发不同的动作。例如,响应于显式命令(开始记录和结束记录)、显式全局执行命令(记录在启动且在每个显式总执行命令后自动开始,且响应于接下来的显式总执行命令处理每一个日志)、显式数据准备命令等,生成器实例化命令可以被记录并批处理。类似地,响应于显式全局执行命令、第一获取命令、每一个获取命令等,数据准备命令可以被记录并批处理。
示例性跟踪结构
图11A-图11D是示出了根据本发明的一个实施方式的图10中的数据结构的示例性内容的框图。虽然图11A-图11D将这些数据结构作为表格示出,但是应当理解可以使用合适的数据结构(例如,哈希映射表(hash map)、集合、列表)。
图11A是根据本发明的一个实施方式的图10中的类跟踪结构1092的示例的框图。在图11A中,类关键字列1110和类引用列1115被显示为分别用于存储类关键字和装载的类的对应的引用。
图11B是根据本发明的一个实施方式的图10中的实例跟踪结构1065的示例的框图。在图11B中,实例关键字列1120和实例引用列1125被显示用于分别存储实例关键字和对应的实例引用。在本发明的实施方式中,其中实例关键字在所有的类之间不需要是唯一的,实例跟踪结构还包括类关键字或实例的类的引用。
图11C是根据本发明的一个实施方式的图10中的生成器图形结构1060的示例的框图。在图11C中,类引用列1135、实例引用列1140以及方法引用列1145被显示为分别用于存储组成当前生成器图形的当前生成器的引用。这些引用可以采用各种形式。例如,这些列可以分别存储类1054(或可替换的1092)的引用、实例1052(或可替换的1065)的引用和方法1056(或可替换的1058)的引用。虽然在本发明的一个实施方式中,这些列存储引用,但在本发明的可替换实施方式中,这些列中的一个或多个可以存储关键字。
另外,图11C包括父生成器链接列1150(对每一条链接包括父生成器引用和依赖性确定生成器引用)和子生成器链接列1160(对每一条链接包括子生成器引用、依赖性确定生成器引用、链接模式以及粘附链接指示符)。每一个生成器在列1160中可以具有0个或多个子生成器链接。列1160中的每一个子生成器链接包括:1)子生成器引用,该子生成器引用是生成器图形结构的其他行的引用,用于根据生成器依赖性声明表示生成器依赖性;2)依赖性确定生成器引用,其是生成器图形结构的另一行的引用,并表示已经创建子链接的依赖性确定生成器;以及3)具有生成器依赖性类型的链接模式,用于标识生成器依赖性是否是参量、字段或排序依赖性的结果(见关于图7A-图7F的论述),且如果是参量,则为生成器依赖性的参量ID;和4)粘附指示符,用于指示链接模式是向上声明依赖性的结果(在支持向上声明依赖性的本发明的实施方式中)或粘附订阅的结果(在支持粘附订阅的本发明的实施方式中)且不能通过该生成器的生成器参量依赖性声明被修改(即,生成器存储在包含粘附指示符的列的行中)。每一个生成器在列1150中具有0个或多个父生成器链接。列1150中每一个父生成器链接包括:1)父生成器引用,该父生成器引用依照另一个生成器的子生成器引用存储回引用(即,生成器图形结构的另一行的引用,用于表示依赖于该生成器的父生成器);以及2)依赖性确定生成器引用,其是生成器图形结构的另一行的引用并表示已经创建父体链接的的依赖性确定生成器。因此,当链接被创建时,子生成器行的父生成器链接列和父生成器行的子生成器链接列被修改以表示链接(且依赖性确定生成器引用在这两者中相同)。在本发明的实施方式中,由于一个生成器图形中或不同的生成器图形中的多条路径可以包括给定的生成器,因此对于给定生成器可以有多条父生成器链接。
此外,图11C包括生成器输出缓存和覆盖生成器输出修改列1170,用于存储当前生成器输出和生成器是被覆盖的还是不被覆盖的输出值的指示。另外,图11C包括增量执行标记1180用于存储增量执行标记,如之前所述。
图11D是根据本发明的一个实施方式的图10中方法跟踪结构1058的示例的框图。在图11D中,方法关键字列1190和方法引用列1192被显示用于分别存储方法关键字和被装载类的方法的对应引用。此外,图11D还包括参量依赖性列1194、字段依赖性列1196、排序依赖性列1195、向上依赖性列1193、弱约束依赖性列1199、输出类列1197和可选的附加注释列1198。参量依赖性列1194、排序依赖性列1195、向上依赖性列1193、弱约束依赖性列1199和字段依赖性列1196存储从方法的生成器依赖性声明陈述中解析的生成器依赖性信息(例如,见图7A的705),而输出类列1197存储关于方法的输出的输出类的信息(通过方法的签名可确定-例如,见图7A的710)。在本发明的一些实施方式中使用的参量依赖性列1194、字段依赖性列1196、排序依赖性列1195、向上依赖性列1193、弱约束依赖性列1199的示例性内容在后面提供。
动态生成器依赖性
如之前所述,本发明的一个实施方式支持非动态和动态生成器依赖性。在不同的实施方式可以支持不同类型的动态生成器依赖性的情况下,本发明的一个实施方式支持偶然和订阅类型的动态生成器依赖性。因此,非偶然、非订阅依赖性是非动态(静态)依赖性。
图12是示出了根据本发明的一个实施方式的支持偶然和订阅类型的动态生成器依赖性的图10的另外的细节的框图。图12包括来自图10的虚分界线1000;类定义,该类定义包括业务逻辑1010(包括数据1012、方法1014以及生成器依赖性声明1016);新的类模块1095;类1054(包括方法和生成器依赖性声明1056);新的实例模块1098;实例1052、实例跟踪结构1065、自动生成器图形生成模块1040、生成器图形结构1060、以及生成器图形执行模块1070(包括动态依赖性模块1075)。
图12显示生成器依赖性声明1016可选地包括偶然依赖性1210、订阅依赖性1220和多个生成器1215。这里,多个生成器1215是指返回生成器集合的生成器依赖性的能力。另外,图12包括自动生成器图形生成模块1040中的订阅模块1240和偶然性模块1230,用于处理偶然依赖性1210和订阅依赖性1220。图12还显示订阅模块1240访问订阅日志1250。此外,动态依赖性模块1075包括偶然性模块1260和订阅模块1265,用于处理偶然依赖性1210和订阅依赖性1220。订阅模块1265访问订阅日志1250。
偶然和订阅依赖性的以下描述在使用类DEP(依赖性的简写)的本发明的实施方式的上下文中完成,实例从所述类DEP被依赖性确定生成器返回并被具由面向生成器图形编程支持的运行时分析。类DEP包括以下字段:1)TYPE,可以被设定成订阅、非订阅向下声明(不是订阅的子生成器)或非订阅向上声明(不是订阅的父生成器);2)PROD,用于非订阅向下声明的依赖性并是子生成器的集合(这样,其可以存储0个或多个生成器);3)SUBTYPE,用于订阅依赖性且被设定成指示订阅依赖性的类型(用于支持多种类型的订阅的本发明的实施方式;而这里描述的本发明的实施方式支持两种类型一粘附和吸收,可替换实施方式可以支持更多、更少和/或不同的订阅类型);4)SUB CRIT,用于订阅依赖性并被设定成指示订阅标准;5)PAR LINKMODE,用于粘附订阅依赖性和非订阅向上声明依赖性并被设定成指示应当是父生成器的什么链路模式;6)PAR CLASS,用于粘附订阅依赖性和非订阅向上声明依赖性并被设定成指示应当是父生成器的什么类(例如,类关键字);7)PAR METHOD,用于粘附订阅依赖性和非订阅向上声明依赖性并被设定成指示应当是父生成器的什么方法(例如,方法关键字);以及8)PARINSTANCE,用于粘附订阅依赖性和非订阅向上声明依赖性且被设定成指示应当是父生成器的什么实例(例如,实例关键字)(如果PAR INSTANCE是左空白,则子生成器的实例关键字用于父生成器)。可替换实施方式在粘附订阅依赖性和/或非订阅向上声明依赖性的情况下可以使用父生成器的集合(集合中的每一项保持PAR_CLASS,PAR_INSTANCE,PAR_METHOD,PAR_LINK_MODE)。当然,本发明的其他可替换实施方式可以使用不同的结构来返回依赖性。
偶然依赖性
在本发明的一个实施方式中,非偶然和偶然的生成器依赖性都被支持。非偶然生成器依赖性是不依赖于其他生成器的输出的依赖性,而偶然生成器依赖性是依赖于其他生成器的输出的依赖性。虽然本发明的一个实施方式支持非偶然和偶然的生成器依赖性,但是可替换实施方式仅支持非偶然或偶然的(偶然生成器依赖性可以最初由默认值驱动)。
如之前所述,生成器可以被视为多个标识符的集合,一个标识符用于每一个指定粒度的附加层。在本发明的一个实施方式中,在一组标识符中的任意一个或所有的标识符可以基于当前数据值有条件地被确定的情况下,偶然生成器依赖性可以是偶然的。例如,第一偶然生成器依赖性可以仅使实例标识符被有条件确定(类和方法标识符是固定的),而第二偶然生成器依赖性可以使类、实例和方法标识符被有条件确定。虽然在本发明的一个实施方式中,偶然生成器依赖性的多个标识符的所有标识符是有条件的,但是本发明的可替换实施方式可以以不同的方式被实施(例如,只允许多个标识符的子集是有条件的)。
图13A-图13J是示出了根据本发明的一个实施方式的伪代码和示例性生成器的框图。此外,图13A-图13J中所示的实施方式使用用于偶然和非偶然依赖性的相同的依赖性确定机制。这样,出于解释的目的,图13A-图13J中的一些示例是非偶然生成器依赖性的示例,而其他是偶然生成器依赖性的示例。而且,非偶然生成器依赖性是其中依赖性是关于依赖性确定生成器的生成器依赖性,所述依赖性确定生成器为无关生成器(例如,在本发明的一个实施方式中,依赖性类型由于其生成器依赖性声明为空而是可标识的);而偶然生成器依赖性是其中依赖性是关于依赖性确定生成器的生成器依赖性,所述依赖性确定生成器为相关生成器(例如,在本发明的一个实施方式中,依赖性类型由于其生成器依赖性声明不为空而是可标识的)。
此外,图13A-图13J中带圈的数字和字母用于示出根据本发明的实施方式执行操作的顺序。另外,图13A-图13J中的注释X::Y::Z用于表示生成器关键字,所述生成器关键字由类关键字(X)、实例关键字(Y)以及方法关键字(Z)组成。另外虚线圈和虚箭头线表示在本发明的一些实施方式中没有被执行的操作。特别地,如果用于给定依赖性的无关依赖性确定生成器的执行经常返回相同的依赖性(例如,无关依赖性确定生成器),则本发明的一些实施方式中的该依赖性确定生成器在生成器图形中被执行但是不被实例化和链接。
显式依赖性确定生成器
图13A示出了根据本发明的一个实施方式的使用非快捷被声明、非动态(非偶然、非订阅)依赖性的方法的生成器依赖性声明的伪代码;而图13B是示出了根据本发明的一个实施方式的示例性非快捷被声明、非动态(非偶然、非订阅)生成器依赖性的框图。图13A显示:1)方法α1305的生成器依赖性声明陈述1300,其中该生成器依赖性声明陈述1300包括到生成器CW::IY::BETA的生成器依赖性;以及2)方法β1315的生成器依赖性声明陈述1310,其中该生成器依赖性声明1310为空,且方法β1315返回类DEP的实例作为参量。方法β1315包括生成器依赖性声明代码1320,该代码1320将依赖性类型(DEP.TYPE)设定成非订阅向下声明,将依赖性生成器(DEP.PROD)设定成生成器13,并返回DEP。
在图13A中,带圈的1指示生成器依赖性声明1300被访问(例如,由于基于方法α1305的生成器(感兴趣生成器)的命名、由于基于方法α1305的生成器(作为感兴趣生成器的子代)的自动发现,等)。图13B中带圈的2显示生成器C0::I0::ALPHA基于方法α1305被实例化。图13A中带圈的3指示到生成器CW::IY::BETA的生成器依赖性被处理以确定生成器依赖性,且由此带圈的4指示生成器依赖性声明1310被访问。图13中带虚线圈的5显示生成器CW::IY::BETA被实例化为依赖性确定生成器1380。图13B中带虚线圈的6指示生成器C0::I0::ALPHA在生成器图形中被链接以指示生成器CW::IY::BETA是子生成器。图13B中带圈的7指示生成器CW::IY::BETA被执行并返回DEP以标识生成器13。带圈的8指示生成器13被实例化,而带圈的9指示生成器13在生成器图形中作为子生成器被链接到生成器C0::I0::ALPHA。在图13B中,生成器C0::I0::ALPHA和生成器13是标准生成器1385(不是依赖性确定生成器)。
图13C示出了根据本发明的一个实施方式的使用非快捷被声明、偶然、非订阅的生成器依赖性的方法的生成器依赖性声明的伪代码;而图13D是示出了根据本发明的一个实施方式的示例性非快捷被声明、偶然、非订阅的生成器依赖性的生成器的框图。此外,图13D涉及图5A的生成器5、7A和7B,以及生成器5至生成器7A的动态依赖性的解析。
图13C显示:1)用于方法α1305的生成器依赖性声明陈述1300,其中生成器依赖性声明陈述1300包括生成器CW::IY::BETA的生成器依赖性;2)用于方法β1315的生成器依赖性声明陈述1325,其中该生成器依赖性声明陈述1325包括到生成器CU::IV::DELTA的生成器依赖性,且其中方法β1315返回作为参量的类DEP的实例;3)用于方法δ(delta)1334的生成器依赖性声明陈述1332,其中生成器依赖性声明陈述1332为空,且方法δ1334返回作为参量的类DEP的实例;以及4)用于方法γ(gamma)1340的生成器依赖性声明陈述1338,其中生成器依赖性声明陈述1338为空,且方法γ1340返回变量X(其中X来自外部源、默认值(显式或类中的常量))。方法β1315包括生成器依赖性声明代码1330,该代码1330将DEP.TYPE设定成非订阅向下声明,依据生成器CX::IZ::GAMMA的输出将DEP.PROD设定成生成器7A或7B,并返回DEP。方法δ1332包括生成器依赖性声明代码1336,该代码1336将DEP.TYPE设定成非订阅向下声明,将DEP.PROD设定成生成器CX::IZ::GAMMA,并返回DEP.PROD。
在图13C中,带圈的1指示生成器依赖性声明1300被访问(例如,由于基于方法α1305的生成器(作为感兴趣生成器)的命名、由于基于方法α1305的生成器(作为感兴趣生成器的子代)的自动发现,等等)。图13D中带圈的2显示生成器5基于方法α1305被实例化。图13C中带圈的3指示到生成器CW::IY::BETA的生成器依赖性被处理以确定生成器依赖性,且由此带圈的4指示生成器依赖性声明1325被访问。图13D中带圈的5显示生成器CW::IY::BETA被实例化作为依赖性确定生成器1380。图13D中带圈的6指示生成器5在生成器图形中被链接以指示生成器CW::IY::BETA是子生成器。
图13C中带圈的7指示到生成器CU::IV::DELTA的生成器依赖性被处理以确定生成器依赖性,且由此带圈的8指示生成器依赖性声明1332被访问。图13D中带虚线圈的9显示生成器CU::IV::DELTA被实例化作为依赖性确定生成器1380。图13D中带虚线圈的10指示CW::IY::BETA在生成器图形中被链接以指示生成器CU::IV::DELTA是子生成器。图13D中带圈的11指示生成器CU::IV::DELTA被执行并返回DEP以标识CX::IZ::GAMMA。带圈的12指示生成器CX::IZ::GAMMA被实例化,而带圈的13指示生成器CX::IZ::GAMMA作为子生成器在生成器图形中被链接到生成器CW::IY::BETA。
在图13D中,带圈的A指示生成器CX::IZ::GAMMA被执行并返回X到生成器CW::IY::BETA,而带圈的B指示生成器CW::IY::BETA返回DEP以标识生成器7A;带圈的C指示未解析的余项(方法β)1390现在被解析,且生成器7A被实例化,而带圈的D指示生成器5到生成器7A的链接。在图13D中,生成器CX::IZ::GAMMA、5以及7A是标准生成器1385。
即时(On the fly)依赖性确定生成器
图13E示出了根据本发明的一个实施方式的使用非快捷被声明、偶然、非订阅的生成器依赖性和快捷被声明、偶然、非订阅的生成器依赖性的方法的生成器依赖性声明伪代码;而图13F是示出了根据本发明的一个实施方式的非快捷被声明、偶然、非订阅的生成器依赖性和快捷被声明、偶然、非订阅的生成器依赖性的生成器的框图。与图13D类似,图13F涉及图5A的生成器5、7A和7B以及生成器5到生成器7A的动态依赖性的解析。
图13E-图13F与图13C-图13D相同,不同之处在于:1)生成器依赖性声明陈述1342替换生成器依赖性声明陈述1325;2)方法fly 1344替换方法δ1334;以及3)生成器CW::IY::FLY替换生成器CU::IV::DELTA。生成器依赖性声明陈述1342包括到CX::IZ::GAMMA的快捷被声明生成器依赖性。因此,图13E中带圈的4现在指示生成器依赖性声明1342被访问。图13E中带圈的7现在指示到生成器CX::IZ::GAMMA的快捷被声明生成器依赖性被处理以确定生成器依赖性,且由此运行时基于方法fly 1344即时调用依赖性确定生成器CW::IY::FLY。带圈的8现在指示生成器依赖性声明1332被访问。图13F中带虚线圈的9现在显示生成器CW::IY::FLY被实例化。图13F中带虚线圈的10指示生成器CW::IY::BETA在生成器图形中被链接以指示生成器CW::IY::FLY是子生成器。图13F中带圈的11指示生成器CW::IY::FLY被执行且返回DEP以标识CX::IZ::GAMMA。图13E-图13F中的余项与图13C-图13D中的相同。
依赖性确定生成器CW::IY::FLY的运行时生成即时减轻了应用程序员必须编写显式生成器依赖性声明代码并基于该代码实例化依赖性确定生成器的麻烦。此外,其还允许程序员为方法β1315在生成器依赖性声明陈述中直接规定生成器CX::IZ::GAMMA的依赖性,而不是规定依赖性确定生成器CU::IV::DELTA。
快捷技术可以用于多种情况,且可以另外具有多种格式。例如,虽然在图13E-图13F中快捷被声明依赖性是非偶然依赖性(其直接标识子生成器)且是在用于方法的生成器依赖性声明陈述中,其中依赖性确定生成器基于该方法,但是其他情况和格式可以被显示如下:1)图13G-图13H示出两个快捷的使用,其中一个是偶然的且是用于方法的生成器依赖性声明陈述的一部分,其中标准生成器基于所述方法,以及另一个是非偶然的且是用于方法的生成器依赖性声明陈述的一部分,其中依赖性确定生成器基于该方法;以及2)图13I-图13J示出了快捷的使用,所述快捷是非偶然的且在用于方法的生成器依赖性声明陈述中,其中父标准生成器基于所述方法。
图13G示出根据本发明的一个实施方式的使用快捷被声明、偶然、非订阅的生成器依赖性和快捷被声明、非偶然、非订阅的生成器依赖性的方法的生成器依赖性声明的伪代码;而图13H是示出根据本发明的一个实施方式的示例性快捷被声明、偶然、非订阅的生成器依赖性和快捷被声明、非偶然、非订阅的生成器依赖性的生成器的框图。图13G显示:1)用于方法α1305的生成器依赖性声明陈述1345,其中生成器依赖性声明陈述1345包括到生成器<P>GETC1::I1::M1的快捷被声明、偶然生成器依赖性;2)用于方法fly11355的生成器依赖性声明陈述1350,其中生成器依赖性声明陈述1350包括到生成器C0::I0::GETC1的快捷被声明、非偶然生成器依赖性,且方法fly11355返回作为参量的DEP的实例;3)用于方法fly2 1362的生成器依赖性声明陈述1332,其中方法fly2 1362返回作为参量的DEP的实例;以及4)用于方法getc1 1370的生成器依赖性声明陈述1365,其中方法getc1 1370返回具有值CX或CY的C1。
响应于快捷被声明依赖性<P>GETC1::I1::M1(指示该快捷被用于类关键字)运行时提供方法FLY1 1355及其生成器依赖性声明陈述1350。方法fly11355包括生成器依赖性声明代码1360,该代码1360将DEP.TYPE设定成非订阅向下声明,依据生成器C0::I0::GETC1的C1输出值将DEP.PROD设定成生成器CX::I1::M1或CY::I1::M1,并返回DEP。虽然在图13H的示例中<P>用于指定其是偶然的生成器的类关键字,但是本发明的可替换实施方式可以使用其他语法。此外,虽然在图13H的示例中,<P>用于指定其是偶然的生成器的类关键字,但是本发明的一个实施方式支持具有多个和/或不同的标识符,所述标识符组成以这种方式被指示为偶然的生成器关键字。
在图13G中,带圈的1指示生成器依赖性声明1345被访问(例如,由于基于方法α1305的生成器(作为感兴趣生成器)的命名,由于基于方法α1305的生成器(作为感兴趣生成器的子代)的自动发现,等等)。图13H中带圈的2显示生成器C0::I0::ALPHA基于方法α1305被实例化。图13G中带圈的3指示快捷被声明生成器依赖性被处理以确定生成器依赖性且运行时提供方法fly1 1355;且由此,带圈的4指示生成器依赖性声明1350被访问。
图13H中带圈的5显示生成器C0::I0::FLY1被实例化作为依赖性确定生成器1380。图13H中带圈的6指示生成器C0::I0::ALPHA在生成器图形中被链接以指示生成器C0::I0::FLY1是子生成器。图13G中带圈的7指示到生成器C0::I0::GETC1的快捷被声明生成器依赖性被处理以确定生成器依赖性且运行时提供方法fly2 1362,且由此,带圈的8指示生成器依赖性声明1332被访问。图13H中带虚线圈的9显示生成器C0::I0::FLY2被实例化。图13H中带虚线圈的10指示生成器C0::I0::FLY1在生成器图形中被链接以指示生成器C0::I0::FLY2是子生成器。
图13H中带圈的11指示生成器C0::I0::FLY2被执行并返回DEP以标识生成器C0::I0::GETC1。带圈的12指示生成器C0::I0::GETC1被实例化,而带圈的13指示生成器C0::I0::GETC1在生成器图形中被链接到作为子生成器的生成器C0::I0::FLY1。
在图13H中,带圈的A指示生成器C0::I0::GETC1被执行并返回C1=CX到生成器C0::I0::FLY1,而带圈的B指示生成器C0::I0::FLY1被执行并返回DEP以标识生成器CX::I1::M1;带圈的C指示未解析的余项(方法fly1)1390现在被解析,且带圈的D指示生成器C0::I0::ALPHA到生成器CX::I1::M1的链接。在图13H中,生成器C0::I0::GETC1、C0::I0::ALPHA以及CX::I1::M1是标准生成器1385。
依赖性确定生成器C0::I0::FLY1和C0::I0::FLY2的运行时产生即时减轻了应用程序员必须编写显式生成器依赖性声明代码并基于该代码实例化依赖性确定生成器的麻烦。此外,其允许应用程序员在用于方法α1305的生成器依赖性声明陈述中通过方法getC1在生成器**::I1::M1上直接规定偶然依赖性,而不是规定依赖性确定生成器CW::IY::BETA。
图13I示出了根据本发明的一个实施方式的使用快捷被声明、非动态(非偶然、非订阅)生成器依赖性的方法的生成器依赖性声明的伪代码;而图13J是示出了根据本发明的一个实施方式的示例性快捷被声明、非动态生成器依赖性的生成器的框图。图13I显示:1)用于方法α1305的生成器依赖性声明陈述1372,其中生成器依赖性声明陈述1372包括到生成器10的快捷被声明生成器依赖性;2)用于方法fly 1376的生成器依赖性声明陈述1374,其中该生成器依赖性声明陈述1374为空,且方法fly 1376返回作为参量的DEP的实例。响应于快捷被声明依赖性由运行时提供方法fly 1776及其生成器依赖性声明陈述1374。方法fly 1376包括生成器依赖性声明代码1378,该代码1378将DEP.TYPE设定成非订阅向下声明,将DEP.PROD设定成生成器10,并返回DEP。
在图13I中,带圈的1指示生成器依赖性声明1372被访问(例如,由于基于方法α1305的生成器(作为感兴趣生成器)的命名,由于基于α1305的生成器(作为感兴趣生成器的子代)的自动发现,等等)。图13J中带圈的2显示生成器C0::I0::ALPHA基于方法α1305被实例化。图13I中带圈的3指示快捷被声明生成器依赖性被处理以确定生成器依赖性且运行时提供方法fly 1376;且由此,带圈的4指示生成器依赖性声明1374被访问。图13J中带虚线圈的5显示生成器C0::I0::FLY被实例化作为依赖性确定生成器1380。图13J中带虚线圈的6指示生成器C0::I0::ALPHA在生成器图形中被链接以指示生成器C0::I0::FLY是子生成器。
图13J中带圈的7指示生成器C0::I0::FLY被执行且返回DEP以标识生成器10。带圈的8指示生成器10被实例化,而带圈的9指示生成器C0::I0::ALPHA在生成器图形中被链接以指示生成器10是子生成器。在图13J中,生成器C0::I0::ALPHA和生成器10是标准生成器1385。
应当理解,在本发明的一个实施方式中,运行时程序员编写单个fly方法以解释所有支持的语法和组合(例如,方法fly 1334、方法fly1 1355、方法fly2 1362、方法fly 1376)并将该fly方法包含在运行时中。这不但允许应用程序员避免编写用于依赖性确定生成器的代码,其中在该依赖性确定生成器中fly方法可以被使用,运行时程序员仅需要编写通用fly方法(用于所有支持的情况的单个fly)。此外,应当理解快捷被声明依赖性允许运行时使用依赖性确定生成器而同时允许应用程序员指示生成器依赖性声明中的标准生成器(例如,图13G-图13J)。
方法跟踪结构
回过来参考图11D的方法跟踪结构,现在将描述在本发明的一些实施方式中使用的参量依赖性列1194、字段依赖性列1196、排序依赖性列1195、向上依赖性列1193、以及弱约束依赖性列1199的示例性内容。具体地,参量依赖性列1194存储项的集合,每项用于每个参量依赖性。在本发明的一个实施方式中,每一项包括以下:1)参量ID;2)类关键字性质标识符,为显式类、相同类以及偶然类中的一者;3)当类关键字性质标识符指示显式类时所填充的显式类关键字性标识符;4)当类关键字性质标识符指示偶然类时所填充的偶然类确定方法关键字标识符;5)实例关键字性质标识符,为显式实例,相同实例以及偶然实例中的一者;6)当实例关键字性质标识符指示显式实例时所填充的显式实例关键字标识符;7)当实例关键字性质标识符指示偶然实例时所填充的偶然实例确定方法关键字标识符;8)方法关键字性质标识符,为显式方法、相同方法以及偶然方法中的一者;9)当方法关键字性质标识符指示显式方法时所填充的显式方法关键字标识符;10)当方法关键字性质标识符指示偶然方法时所填充的偶然方法确定方法关键字标识符;以及11)快捷标识符,指示生成器依赖性声明陈述中的用于参量的生成器依赖性声明是否包含快捷的指示(即,生成器依赖性声明陈述直接标识标准子生成器而不是依赖性确定生成器)。
各种关键字性质标识符的“...显式”指示用于显式关键字被提供用于生成器依赖性声明陈述中的生成器依赖性的情况。通过举例的方式,图13A的生成器依赖性声明陈述1300的生成器依赖性“CW::IY::BETA”提供显式类、实例以及方法关键字。
在本发明的一些实施方式中,速记技术被支持用于生成器依赖性声明陈述,从而:1)如果过没有为给定生成器依赖性提供类,则使用与父生成器相同的类;以及2)如果没有为给定生成器依赖性提供类和实例,则使用与父生成器相同的类和实例。在本发明的其他实施方式中,语法用于允许类、实例以及方法的任意组合与父体相同(除了所有都相同)(例如,分隔符用于指定类、实例以及方法中的每一个,且没有这种分隔符指示与父体相同-通过特定示例的方式,语法可以是“#C:”、“#I:”和“#M:”,由此生成器依赖性声明陈述中的生成器依赖性可以是#C:”类关键字”::#I:”实例关键字”::#M:”方法关键字”)(其中引号表示值或变量的占位符)不同关键字性质标识符的“...相同”指示用于在生成器依赖性声明陈述中使用速记技术的情况。
如之前所示,在本发明的一些实施方式中,偶然生成器依赖性的指示通过在生成器依赖性声明陈述自身中使用的语法(例如,<P>)而被支持(见图13G的1345),且该语法可以用于生成器依赖性的类、实例和方法的一者或多者。不同关键字性质标识符的“...偶然”指示用于标识该偶然生成器依赖性何时发生,而“偶然...确定方法关键字标识符”指示子生成器的方法关键字(类和实例与父生成器的相同)。通过举例的方式,图13G中的生成器依赖性声明1345的生成器依赖性“<P>GETC1::I1::M1”提供偶然类(其中偶然类确定方法关键字是GETC1)、显式实例关键字以及显式方法关键字。
排序依赖性列1195、向上依赖性列1193以及弱约束依赖性列1195的每一个存储项的集合,每一项用于每个排序依赖性、向上依赖性以及弱约束依赖性。在本发明的一个实施方式中,每一个这样的项具有与用于参量依赖性的集合项相同的结构,除了不包括参量ID。此外,尽管图13A-图13J示出了源于依赖性确定生成器的非订阅向下声明的依赖性,但是应当理解在向上声明的依赖性或弱约束依赖性的情况,参照图7F-图7G所论述的,依赖性确定生成器可以返回其他依赖性。
字段依赖性列1196存储项的集合,每一项用于每个字段依赖性。虽然在本发明的一个实施方式中每一项包括属性方法关键字,但在本发明的可替换实施方式中,每项可以具有与来自排序依赖性的集合项相同的结构。
订阅依赖性
在本发明的一个实施方式中,非订阅和订阅的生成器依赖性都被支持。当为给定方法声明订阅生成器依赖性且从该给定方法实例化给定生成器时,运行时可以在运行时期间解析符合订阅标准的一组零个或多个生成器(基于其他生成器的存在)。虽然在本发明的一个实施方式支持非订阅和订阅的生成器依赖性,但是可替换实施方式仅支持非订阅。此外,虽然在本发明的一个实施方式中支持两种类型的订阅依赖性(吸收和粘附),但是本发明的可替换实施方式支持更多、更少和/或不同类型的订阅生成器依赖性。
图14A-图14C是示出了根据本发明的一个实施方式的吸收和粘附订阅的框图。图14A是根据本发明的一个实施方式的图12中的订阅日志1250的示例的框图。虽然图14A示出作为表格的这种日志结构,但是应当理解可以使用任意合适的数据结构(例如,哈希映射表)。图14B是示出根据本发明的一个实施方式的非偶然、吸收订阅生成器依赖性的示例性生成器的框图。图14C是示出根据本发明的一个实施方式的非偶然、粘附订阅生成器依赖性的示例生成器的框图。图14A的表中显示了填充有在图14B-图14C的示例中使用的内容的两行。图14B-图14C中使用带圈的数字来示出根据本发明的一个实施方式执行操作的顺序。
在图14A中,订户的生成器关键字列1400、订阅类型列1405以及用于触发生成器的订阅标准列1410被显示用于分别存储对应于列名称的内容。此外,图14A显示父链接模式列1425用于存储订阅依赖性的父生成器的链接模式;该信息将参考图14B-图14C被更详细地描述。
图14A还显示用于吸收订阅的匹配生成器列1415和完成列1420。匹配生成器列1415用于存储符合吸收订阅的订阅标准的触发生成器的生成器关键字,而完成列1420用于在当前组的生成器图形的给定执行期间跟踪吸收订阅是否已完成。匹配生成器列1415和完成列1420提供另外的可选优化,其允许扫描在自动生成器图形生成和生成器图形执行之间划分的被实例化的生成器的工作,这在后面描述。
图14A还显示用于粘附订阅的父类列1430、父方法列1435以及父实例列1437。父类列1430、父方法列1435以及父实例列1437分别存储被创建用于粘附订阅的父生成器的类关键字、方法关键字以及实例关键字。此外,图14A还显示依赖性确定生成器引用列1421存储创建订阅的依赖性确定生成器的引用。
吸收订阅
在吸收订阅生成器依赖性中,该依赖性是符合吸收订阅标准的当前生成器图形结构的所有生成器的集合。参考图14B,带圈的1表示生成器1450被实例化(例如,由于生成器1450(作为感兴趣生成器)的命名、由于生成器1450(作为感兴趣生成器的子代)的自动发现,等等)。生成器1450基于方法,该方法的生成器依赖性声明包括生成器依赖性(例如,具有参量ID X)的方法。带圈的2表示生成器1450的生成器依赖性被处理以标识生成器1455。
带圈的3表示生成器1450在生成器图形中被链接到作为子生成器的生成器1455。带圈的4表示生成器1455的执行。生成器1455是依赖性确定生成器,包括生成器依赖性声明代码,该代码指示吸收订阅生成器依赖性并指示吸收订阅标准。这样,生成器1455的执行导致填充订阅日志。参考图14A的第一行中的示例,订户的生成器关键字列1400、订阅类型列1405、用于触发生成器的订阅标准列1410、父链接模式列1425以及依赖性确定生成器引用列1421分别填充有生成器1450的生成器关键字、用于指示订阅是吸收类型的指示、包含在生成器1455中的吸收订阅标准、链接到生成器1455的生成器1450的链接模式(在吸收订阅的情况下,其为参量依赖性且包括参量ID,但是其粘附指示符在以上示例中指示没有粘附的参量ID X)和生成器1455(创建订阅的依赖性确定生成器)的引用。
带圈的5A-图5N表示生成器1460A-N的实例化。在该示例中,生成器1460A-N符合吸收订阅标准,由此为触发生成器。这样,带圈的6A-N指示生成器1450到生成器1460A-N的链接(在以上示例中,通过参量ID X)。带圈的7指示对于生成器图形的当前执行,吸收订阅依赖性已完成,且生成器1450之后被执行。
在本发明的一个实施方式中,吸收订阅标准可以是组成生成器关键字任意关键字中的一个或多个。因此,在生成器关键字包括类关键字、实例关键字以及方法关键字的本发明的实施方式中,订阅标准可以是一个或多个这样的关键字。例如,参考图11C,针对符合订阅标准的生成器对实例化的生成器的扫描是对生成器图形结构的第一个三列中的一个或多个进行扫描以确定实例化的生成器的关键字是否与吸收订阅标准的关键字匹配。虽然在本发明的一个实施方式中吸收订阅标准可以是组成生成器关键字的任意关键字中的一个或多个,但是在本发明的可替换实施方式中吸收订阅标准被限定为组成生成器关键字的关键字的子集。
粘附订阅
在粘附订阅生成器依赖性中,该依赖性使父生成器针对符合粘附订阅标准的每一个生成器而被实例化。参考图14C,带圈的1指示生成器1470被实例化(作为生成器1470(由于感兴趣生成器)的命名、由于通过排序依赖性(例如,由于排序依赖性或弱约束依赖性等)生成器1470(作为感兴趣生成器的子代)的自动发现,等等)。生成器1470是依赖性确定生成器,包括生成器依赖性声明代码,该代码指示粘附订阅、用于触发生成器的粘附订阅标准以及被创建的父生成器的粘附订阅特性。
生成器1470的执行导致填充订阅日志。参考图14A的第二行中的示例,订户的生成器关键字列1400、订阅类型列1405以及用于触发生成器的订阅标准列1410分别填充有生成器1470的生成器关键字、用于指示订阅是粘附类型的指示以及包含在生成器1470中用于触发生成器的粘附订阅标准。此外,父类列1430、父方法列1435、父实例列1437以及链接到触发生成器的父生成器的链接模式列1425填充有被创建的父生成器的粘附订阅特性——在本发明的该实施方式中,分别是被实例化的父生成器的类、被实例化的父生成器的方法、被实例化的父体生成器的实例(如果被留为空,则等于触发生成器的实例关键字)、链接模式(其在粘附订阅的情况下可以是:1)参量、字段或排序依赖性;2)参量ID(如果参量依赖性——父生成器的参量ID被链接到触发生成器(例如参量ID Y))。此外,依赖性确定生成器引用列1421填充有创建订阅的依赖性确定生成器引用(图14C中的生成器1470)。
参考图14C,带圈的2指示生成器1475被实例化(例如,由于生成器1475(作为感兴趣生成器)的命名、由于生成器1475(作为感兴趣生成器的子代)的自动发现,等等)。此外,可以确定生成器1475是否符合用于触发生成器的粘附订阅标准。带圈的3指示响应于该触发生成器1475,基于用于被创建的父生成器的粘附订阅特性来实例化生成器1480。参考图14C的示例性第二行,类关键字、方法关键字、实例关键字以及链接模式分别从父类列1430、父方法列1435、实例列1347以及父链接模式列1425中被访问。父生成器具有生成器关键字,该关键字包括被访问的类关键字、被访问的实例关键字(如果被留为空,则为触发生成器(图14C中的生成器1475)的实例关键字)以及被访问的方法关键字——在图14C的示例中,为生成器1480。带圈的4指示实例化的父生成器1480在生成器图形中通过被访问的连接模式被链接到子触发生成器1475(在以上示例中,链接模式类型=参量依赖性;链接模式参量ID=Y)。还有在参量依赖性的情况中,在带圈的4处,粘附指示符被设定成指示粘附——在用于实例化的父生成器1480所基于的方法的生成器的依赖性声明陈述的位置中的生成器依赖性对于生成器1480应当被忽略——这防止粘附订阅生成器依赖性创建的链接被后来的自动生成器图形生成操作重写。
在本发明的一个实施方式中,用于触发生成器的粘附订阅标准可以是组成生成器关键字的关键字的一个或多个。因此,在生成器关键字包括类关键字、实例关键字以及方法关键字的实施方式中,用于触发的粘附订阅标准可以是类、实例以及方法关键字中的一个或多个。例如,参考图11C,针对符合用于触发生成器的粘附订阅标准的生成器,对实例化的生成器的扫描是对生成器图形结构的第一到第三列中的一个或多个进行扫描以确定实例化的生成器的关键字是否匹配用于触发生成器的粘附订阅标准的关键字。虽然在本发明的一个实施方式中,用于触发生成器的粘附订阅标准可以是组成生成器关键字的关键字的一个或多个,但是在本发明的可替换实施方式中,吸收订阅标准可以是进一步限定数量的组成生成器关键字的关键字。
图14D-图14E示出了根据本发明的一个实施方式的基于体依赖性确定生成器的父生成器的选择。虽然图14D-图14E参考参量依赖性被描述,但是本发明的实施方式可以支持使用排序和字段依赖性。
图14D示出了根据本发明的一个实施方式的基于粘附订阅创建的父依赖性确定生成器的父生成器的选择。像图14C,图14D显示粘附订阅生成器1470和触发生成器1475;但是,生成器1480不同,图14D显示通过粘附订阅生成器1470的粘附订阅创建的依赖性确定生成器1480。此外,图14D显示粘附订阅的连接模式是参量依赖性、参量ID=X,且粘附指示符=粘附。如果从生成器1475到依赖性确定生成器1480的虚曲线所示,依赖性确定生成器返回的DEP可以基于生成器1475本身的输出(参量ID=X的参量)。在图14D中,依赖性确定生成器1480在生成器1482上返回非订阅向上声明的生成器依赖性,具有指示参量依赖性和参量ID=Y的链接模式。虽然参量ID X和Y在图14D中用于显示它们可以不同,但应当理解它们可以相等。
图14E示出了根据本发明的一个实施方式的基于子依赖性确定生成器创建的父依赖性确定生成器的父生成器的选择,其中子依赖性确定生成器被排序依赖性链接。图14E在结构上与图14D类似;具体地,生成器1475、1480以及1482用生成器1486、1496以及1498来替换。但是,不同于在生成器1480和1475之间创建链接的粘附订阅生成器1470,生成器1486在依赖性确定生成器1494上具有排序依赖性(例如,通过向上依赖性或弱约束依赖性创建),其通过非订阅向上声明的依赖性来创建依赖性确定生成器1496。
值得注意粘附订阅和非订阅向上声明的依赖性(例如,通过向上依赖性和/或弱约束依赖性而被创建)导致自下而上建立生成器图形(而不是之前所述的自上而下建立)。此外,该自下而上建立不限于单个层的建立,而是刻意多个层(例如,如果由于粘附订阅或非订阅向上声明的依赖性,父生成器被实例化,相同的父生成器还可以是用于粘附订阅的触发生成器或可以包括非订阅向上声明的依赖性且使另一个父生成器被实例化,等)。在这种意义上,粘附订阅和非订阅向上声明的依赖性使生成器图形的建立倒置。
虽然在本发明的一些实施方式中,由粘附订阅特性标识的父生成器是标准生成器(见图14C),但是可替换实施方式可以被实施为支持其他类型的生成器的标识。例如,在允许粘附订阅特性标识依赖性确定生成器的本发明的实施方式中(见图14D),这样的依赖性确定生成器可以访问触发生成器的输出,且可以基于该输出触发作为需要粘在子体上的父生成器的特定生成器的创建(该父生成器可以已经存在或不存在;如果已经存在,则被简单链接且子生成器被添加到其参量;如果不存在,则其被创建)。在依赖性确定生成器返回常量的情况下生成器模拟吸收订阅。依赖性确定生成器返回生成器(其实例关键字对于每一个触发生成器是唯一的)(例如,返回其实例关键字是触发生成器的生成器关键字的生成器)的情况造成于每一个子生成器有单独的父生成器并且被称为纯粘附订阅。依赖性确定生成器返回对每一个触发生成器既不是常量也不是唯一的实例关键字的情况可以混合纯粘附订阅和吸收订阅的行为且被称为非纯粘附订阅。
示例性优点
如之前所述,在本发明的一个实施方式中,生成器依赖性针对方法被声明作为规定使用合适实例而不使用手动调用排序代码的方法调用排序的方式(其中合适的实例包括作为参量使用的实例、被实例方法使用的实例以及被类方法使用的元类实例);有效地,生成一些或全部手动调用排序代码的的工作被以下替代:1)编写生成器依赖性声明的应用程序员完成的工作;以及2)发现并建立生成器图形并执行该生成器图形的生成器的运行时完成的工作。尽管编写运行时的工作量相对较大,但是其只需要编写一次就可以用于执行为运行时编写的面向对应应用;相比之下,对于一般的应用,编写生成器依赖性声明的工作量与编写手动调用排序代码相比相对较低。
非动态生成器依赖性提供用于规定无条件方法调用排序代码的方式,从而避免对编写无条件手动调用排序代码的需要。偶然生成器依赖性提供规定有条件处理的方式,从而取代对编写有条件手动调用排序代码的需要。支持生成器依赖性允许集合被返回的生成器,其提供规定在集合作为参数被传递之前的集合的填充,从而不需要编写手动调用排序代码中的多个调用以在该集合被作为参数传递之前填充该集合。支持订阅提供这样的环境,在该环境中程序员不需要为每一种类型的被收听(listen)的对象编写特定的收听代码(例如,在面向生成器图形编程的电子数据表中,吸收订阅可以用于通过使该吸收订阅标准标识在范围内的单元来计算一定范围的单元的平均值(每一个单元是一个生成器),并在每一次新生成器被添加到吸收订阅时重新计算平均值;在面向生成器图形编程的电子数据表中,粘附订阅可以通过使粘附订阅标准标识保持当前值内容的单元和标识执行当前值转换的被实例化的粘附生成器的粘附订阅特性而用作当前值转换器(粘附订阅创建的生成器(保持转换后的量)之后可以用于其他单元中的显示))。
操作
新实例命令
图15是根据本发明的一个实施方式的用于实例化新实例的流程图。如之前参考图10所述,图10中新类模块1095可以被实施为新实例模块1098的一部分。图15的流程图假定该实施方式并被新实例模块1098执行;图15的流程图中表示新类模块1095的部分被显示为虚线块1580,其包括块1540和1550。
响应于新实例命令(块1510),控制传递到块1520。在块1520中,确定是否已经存在实例。如果不存在,则控制传递到块1530,否则,实例不需要被实例化且控制传递到1570,在块1570中,流程图结束。在支持实例关键字的一个实施方式中,通过访问用于被提供作为新实例命令的一部分的实例关键字(和类关键字,如果实例关键字在类中不需要是唯一的)的图10中的实例跟踪结构1065来执行块1520。
在块1530中,确定实例的类定义是否已经被装载。如果没有,则控制传递到块1540;否则,控制传递到块1560。在支持类关键字的一个实施方式中,通过访问用于被提供作为新实例命令的类关键字的图10中的类跟踪结构1092来执行块1540。
在块1540,类被装载且控制传递到块1550。在块1550,类定义根据类关键字被存储并自省,包括任意生成器依赖性声明陈述(根据类中的方法关键字被存储,见图11D)。控制从块1550传递到块1560。参考图10,在块1540和1550执行以下:1)类从类定义被装载,该类定义将业务逻辑1010包括到类1054中(该装载使类的方法和生成器依赖性声明被存储在方法和生成器依赖性声明1056中);2)类可以被添加到类跟踪结构1092;以及3)方法可以被添加到方法跟踪结构1058。此外,方法的输出类可以被装载。
在块1560,类的实例可以被实例化并根据实例关键字被存储。参考图10,该实例可以被实例化成实例1052;且该实例可以被添加到实例跟踪结构1065。控制从块1550传递到块1570,在块1570中流程图结束。在使用对象关系映射技术的本发明的一些实施方式中,作为块1560的一部分,数据可以从外部数据源被装载以填充实例的字段。
在本发明的一些实施方式中,类和实例可以在具有面向生成器图形编程支持的运行时不知道的情况下被装载/实例化(例如,在图9A中,如果运行时915装载/实例化而运行时910不知道)。在这种情况下,本发明的实施方式还支持实例关键字,该实例关键字是类的实例的实例关键字(保持两个元素:实例关键字性质,指示关键字标识符是否是对实例或对另一个对象(例如串)的引用;和关键字标识符,可以是实例的引用或另一个对象(例如串)),块1520和1530询问实例和类是否在具有面向生成器图形编程支持的运行时知道的情况下被实例化/装载。在具有面向生成器图形编程支持的运行时不知道已经装载的类的情况下,类可以不被装载,但是类可以被添加到类跟踪结构1092且方法可以被添加到方法跟踪结构1058。在在具有面向生成器图形编程支持的运行时不知道已经实例化的实例的情况下,实例可以不被实例化,但是实例可以被添加到实例跟踪结构1065。
新生成器和不覆盖命令
图16是根据本发明的一个实施方式的实例化新生成器和不覆盖生成器的流程图。参考图10,图15的流被自动生成器图形生成模块1040和覆盖生成器模块1045(或,参考图10的可替换实施方式所述的处理覆盖和不覆盖的模块)执行。
响应于新生成器命令(块1600),控制传递到块1605。在本发明的一个实施方式中,新生成器命令可以响应于各种情况来执行。下面的表2标识根据本发明的一个实施方式的各种情况和传递的参数。
表2
  情况   调用器生成器   调用的生成器(如果不存在就被创建)   调用类型   链接模式   依赖性确定生成器引用
  感兴趣生成器   N/A   被创建的感兴趣生成器   感兴趣的   N/A   N/A
  非订阅向下声明   父   子   非订阅向下声明   调用器父生成器链接模式   提供依赖性的依赖性确定生成器
  粘附订阅   子   父(来自被创建的父生成器的粘附订阅特性的父类、方法和实例关键字;如果实例关键字为空,则为   粘附   来自被创建的父生成器的粘附订阅特性的调用的父生成器链接模式   提供依赖性的依赖性确定生成器
  已有的子调用器生成器的实例关键字)
  覆盖   N/A   被覆盖的生成器   被覆盖   N/A   N/A
  非订阅向上声明   子   父   非订阅向上声明   调用的父生成器链接模式   提供依赖性的依赖性确定生成器
在块1065中,确定生成器是否已经存在。如果不存在,则控制传递到块1610;否则,控制传递到1670。通过访问作为新生成器命令的一部分的被标识的类、实例和方法(例如,通过关键字和/或引用)来执行块1605。在支持生成器关键字的一个实施方式中,通过访问用于被提供作为新生成器命令的生成器关键字(表2的调用的生成器列中的生成器关键字)的图10中生成器图形结构1060来执行块1605。
在块1610中,利用新实例命令调用新实例模块,并且控制传递到块1615。在本发明的一个实施方式中,通过使用来自表2的调用的生成器列中的生成器关键字的实例关键字来调用图15的流程图从而执行块1610。
在块1615中,生成器的实例的类定义被访问且控制传递到块1620。参考图10,通过使用来自表2的调用的生成器列中的生成器关键字的类关键字来执行块1615,从而根据类跟踪结构1092访问类1054中合适的一个。
在块1620,生成器的方法和生成器依赖性声明陈述被访问且控制传递到块1625。参考图10,通过使用来自表2的调用的生成器列中的生成器关键字的方法关键字来执行块1620,从而访问来自位于块1615中的类的方法和生成器依赖性声明1056中合适的一个。
在块1625,生成器被添加到生成器图形且控制传递到块1630。参考图11C中的本发明的实施方式,第一个三列被填充。
在块1630,对于每一个注册的订阅,订阅过滤标准被处理以确定生成器是否匹配。参考图14A中的本发明的实施方式,当订阅被添加到订阅日志时该订阅被认为已注册。注册订阅的示例性操作在后面描述。块1630是可选优化,其允许扫描实例化的生成器的工作在生成器图形生成和生成器图形执行之间被划分。这样,本发明的可替换实施方式可以不执行块1630。
在块1635,如果由于依赖性生成器被调用,则生成器被链接到生成器图形。控制从块1635传递到块1640。执行块1635的方式取决于导致新生成器命令被执行的情况(见图20)。例如,如果所述情况是感兴趣生成器或被覆盖的生成器,则由于依赖性生成器不被调用并且不做任何事。相反,如果情况是非订阅向下声明的,则由于非订阅向下声明的依赖性而调用生成器;且参考图11C中的本发明的实施方式,执行以下:1)调用的子生成器的列1150(表2的调用的生成器列)中的父生成器链接(表2的调用的生成器列)连同到父调用器生成器的行的父生成器引用(表2的调用器生成器列)和依赖性确定生成器引用(表2的依赖性确定生成器引用列)被修改;以及2)父调用器生成器的行的子生成器链接列1160(表2的调用器生成器列)连同到调用的子生成器的行的引用(表2的调用的生成器列)、依赖性确定生成器引用(表2的依赖性确定生成器引用列)和链接模式(根据表2的连接模式列被设定)被修改。
相反,如果情况是粘附订阅,则由于触发生成器被标识而调用生成器;且参考图11C中的本发明的实施方式,执行以下:1)调用器子生成器的父生成器链接列1150(表2的调用器生成器列)连同到父调用的生成器的行的父生成器引用(表2的调用的生成器列)和依赖性确定生成器引用(表2的依赖性确定生成器引用列)被修改;以及2)父调用的生成器的行的子生成器链接列1160(表2的调用的生成器列)连同到调用器子生成器的行的引用(表2的调用器生成器列)、依赖性确定生成器引用(表2的依赖性确定生成器引用列)、链接模式(根据表2的连接模式列被设定)和被设置为指示粘附的粘附指示符被修改。在这个方面,非订阅向上声明的依赖性的情况以与粘附订阅类似的方式被处理。
在块1640中,生成器被标记为未执行且控制传递到块1645。参考图11C中本发明的实施方式,合适行的增量执行标记列1180为填充有未执行的指示。
在块1645中,确定生成器是否具有任何依赖性且没有被覆盖。如果是,则控制传递到块1650;否则,控制传递到块1665。通过检查在块1620中访问的生成器依赖性声明以及表2的调用类型列来执行块1645。
在块1650中,对于现在被解析的生成器依赖性声明中的每一个依赖性,确定生成器的数量且为每一个生成器调用新生成器命令。控制从块1650传递到块1655。本发明的不同实施方式在不同时间确定不同类型的依赖性;在本发明的一个示例性实施方式中执行块1650的方式将在后面描述。
在块1655中,如果生成器的所有相关生成器存在并已经被执行,则该生成器被添加到执行开始日志。控制从块1655传递到块1660。对于作为该流程的当前重复的一部分而实例化的给定生成器,块1655被执行,然后用于给定生成器所依赖于的生成器的该流程的其他重复的调用将返回所述生成器的执行状态(见块1660)(例如,参考图11C的本发明的实施方式,来自合适行的增量执行标记列1180的状态)。如果所有依赖性生成器存在且所有依赖性生成器的执行状态被执行,则当前重复的生成器被添加到执行开始日志。
在块1660中,生成器的执行状态作为参数被返回。
在块1670中,与块1635类似,如果由于生成器被调用,则生成器被链接到生成器图形。控制从块1670传递到块1675。出于各种原因,可以达到块1670。例如,由于响应于生成器覆盖命令之前生成器被实例化但没有被链接到生成器图形,则可以达到块1670。作为另一个示例,由于生成器已经是生成器图形的一部分且被添加到另一个生成器图形(例如,响应于是感兴趣生成器、感兴趣生成器的子代等而之前被实例化),可以达到块1670。
在块1675中,确定新生成器流程是否由于覆盖、粘附订阅依赖性或非订阅向上声明的依赖性而被调用。如果是,则控制传递到块1680;否则,控制传递到块1660。通过检查表2的调用类型列来了解这是否是对于被覆盖的生成器、粘附订阅依赖性或非订阅向上声明的依赖性的调用,从而执行块1675。
在块1680中,与块1640类似,生成器被标记为未执行且控制传递到块1665。出于各种原因,可以达到块1680。
在块1665中,如果生成器不存在于执行开始日志,则生成器被添加到执行开始日志,且控制传递到块1660。
响应于生成器不覆盖命令(块1690),控制传递到块1695。在块1695,生成器被标记为没有被覆盖且控制传递到块1640。参考图11C的本发明的实施方式,生成器的行的生成器输出缓存和覆盖生成器输出指示列1170被访问且被改变以指示该生成器不再被覆盖。继续该流程,块1640可以通向块1645,且如果生成器具有任何依赖性,则块1640可以通向块1650,块1650使生成器下面的生成器图形被发现且如果还没有则被建立。如果该生成器下面的生成器图形已经被发现并建立,则新生成器命令的调用可以使流程从1600到1605,到1670等;此外,在块1660中的生成器下的图形的生成器的执行状态的返回将确定生成器是否被添加到块1655中的执行开始日志。但是,如果生成器下的生成器图形没有被发现并建立,则新生成器命令的调用使生成器在流程从1600到1605,到1610等的过程中被发现并建立。
图17是根据本发明的一个实施方式的图16的块1650的流程图。因此,在块1650中,控制从块1645流向块1700。在块1700中,针对生成器的生成器依赖性声明(每一个用于每个参量依赖性、字段依赖性、排序依赖性、向上依赖性以及弱约束依赖性)中的每一个依赖性,下面的块1705-1745被执行。参考图10和11D,方法跟踪结构被访问以确定关于生成器依赖性的信息。还应当理解块1715、1725、1730、1740、1745以及1750是在执行生成器图形之前被执行时的优化。
在块1705中,确定依赖性是否是由于粘附依赖性而已经被链接的参量依赖性。如果是,则控制传递到块1710,其中针对该依赖性,流程结束;否则控制传递到块1715。关于图11C中所示的本发明的实施方式,粘附指示符被检查以确定该依赖性的参量ID是否属于粘附订阅参量依赖性或向上声明的参量依赖性。
在块1715中,确定依赖性是否是偶然依赖性。如果是,则控制传递到块1720;否则,控制传递到块1725。通过检查依赖性锁标识的子生成器的生成器依赖性声明来确定其是否为空(子生成器是无关生成器)从而执行块1715。参考图13A-图13J,这对具有带虚线圈的数字的生成器可以为真(例如,在图13D中,生成器CU::IV::DELTA),但是对其他生成器为假(例如,在图13D中,生成器CU::IY::BETA)。因此,参考图13D,块1715由带圈的1、4、和8来表示。块1715和从该块1715经过块1725-1750的流程是一种优化,两者都避免添加/链接具有带虚线圈的数字的生成器到生成器图形,也避免在自动生成器图形生成和生成器图形执行之间划分执行生成器的工作。
在块1720中,依赖性确定生成器的新生成器命令被调用且流程结束。例如,参考图13D,块1720引起带圈的5、6和7所表示的。
在块1725中,依赖性确定生成器被执行且控制传递到块1730。例如,参考图13D,块1725由带圈的11(从而,之前所述实施方式示出的图17的流程,其中图13D的带圈的9和10没有被执行)表示。
在块1730中,确定依赖性是否是非订阅依赖性。如果是,则控制传递到1750;否则控制传递到块1740。换句话说,在块1725中,依赖性确定生成器的方法中的生成器依赖性确定代码被执行,所述代码是父生成器的生成器依赖性声明中的一部分。执行该生成器依赖性声明代码(该代码可以标识依赖性是否是订阅依赖性),可以确定父生成器的生成器依赖性类型。参考图13D中的示例,带圈的11可以使图17的流程从块1730传递到块1750。
在块1750中,使用表2中所述的参量,包括在1725中执行的依赖性确定生成器引用,来确定由块1725中的依赖性确定生成器的执行返回的生成器的数量,且为每一个生成器调用新生成器命令。例如,参考图13D,块1750引起带圈的12和13以及带圈的C和D。
参考图14B的吸收订阅示例,块1725表示带圈的4;其使流程经过块1730传递到块1740。
在块1740中,订阅被添加到订阅日志,且如果该订阅是吸收的,则被标记为未完成。控制从块1740传递到块1745。参考图14A中所示的本发明的实施方式,订阅日志被填充有之前所述的订阅。
在块1745中,所有被实例化的生成器被扫描以了解它们是否匹配订阅的标准(从而是触发生成器),且任意匹配被处理。
图18是根据本发明的一个实施方式的图17的块1745的流程图。因此,控制从块1740流向块1745中的块1800。在块1800中,对于每一个被实例化的生成器,以下的块1810-1830被执行。
在块1810中,确定生成器是否符合订阅的标准。如果符合,则控制传递到块1815;否则,控制传递到块1830,其中针对当前被处理的生成器,流程结束。参考图11C和14A中所示的本发明的实施方式,生成器图形被访问以确定它们是否包括符合订阅标准的生成器。
处理匹配的生成器的方式依据被处理的订阅的类型。参考块1815,如果订阅是吸收类型,则控制传递到块1825;否则,控制传递到块1820。块1815可以响应于表2的在1740或2235中添加的订阅的类型而被执行。
在块1825中,匹配的生成器被添加到订阅日志且具有吸收订阅的生成器被链接到匹配的生成器。控制从块1825传递到块1830。参考图11C和14A-图14B中所示的本发明的实施方式,以下被执行:1)来自触发生成器的订阅标准列1410的订阅标准在块1810中被使用且匹配的生成器被定位(生成器1460A-N中的一个);2)匹配的生成器被添加到订阅的行处的匹配的生成器列1415;以及3)具有吸收订阅的生成器(例如生成器1450)被链接到图11C的生成器图形结构中的匹配的生成器(例如,生成器1460A-N中的一个)(使用从用于给定的吸收订阅的订阅日志14A的依赖性确定生成器引用列1421中提取的依赖性确定生成器引用)。
在块1820中,新生成器命令被调用,用于被创建的父生成器。控制从块1820传递到块1830,在块1830中,对于在块1800中选择的当前生成器流程图结束。参考图14A和14C中所示的本发明的实施方式,以下被执行:1)来自触发生成器的订阅标准列1410的订阅标准在块1810中被使用且匹配的生成器被定位(例如,生成器1475);以及2)新生成器命令被调用,具有按以下设定的表2的参数:a)调用类型是粘附订阅;b)调用器生成器是调用器子生成器(例如生成器1475)的生成器关键字;c)调用的生成器是被创建的调用的父生成器(例如生成器1480)的生成器关键字,使用来自被创建的父生成器的粘附订阅特性的父类、实例和方法关键字(图14A,列1430和1435和1437)(如果实例关键字为空,调用器子生成器的实例关键字被使用);以及d)调用的父生成器的链接模式(图14A,链接模式列1425),和e)从用于给定的粘附订阅的订阅日志14A的依赖性确定生成器引用列1421中提取的依赖性确定生成器引用。图19是根据本发明的一个实施方式的图16的块1630的流程图。因此,控制从块1625流向块1630中的块1900。图19与图18非常类似。具体地,图19中的块1910、1915、1920以及1930与块1810、1815、1820以及1830相同;而块1900和1925与块1800和1825不同。这样,这里只描述不同之处。
块1900指示为每一个注册的订阅所执行的流程,而块1800指示为每一个实例化的生成器所执行的流程。因此,图18的流程侧重在单个订阅且扫描所有生成器,而图19的流程侧重在单个生成器且扫描所有订阅。
块1925与块1825相同,不同在于吸收订阅被标记为未完成。参考图14A中所示的本发明的实施方式,在合适行的完成的列1420被更新以指示未完成。
图20是根据本发明的一个实施方式的图16中的块1635和1670的流程图。因此,控制从块1605和块1630流向块1635和1670中的块2005。在块2005中,确定图16的流程图的重复是否由于依赖性被调用(例如,从之前重复的块1630(块1920)或1650(块1720、1750或1745/1820))。如果不是,则控制根据流程进入的地方(从块1630或1605)而传递到块1640或1675。
在块2010,确定流程是否由于粘附订阅或非订阅向上声明情况而被调用。如果不是,则控制传递到块2015;否则,控制传递到块2020。通过检查表2的调用类型参数(即,调用类型是粘附订阅还是非订阅向上声明)来执行块2010。参考图18和19中所示的本发明的实施方式,是否新生成器命令从块1820或1920被调用。
在块2020,当前父生成器被链接到调用器子生成器。参考图11C和14C中所示的本发明的实施方式,使用来自表2的链接模式和依赖性确定生成器引用列的参数所标识的链接模式和依赖性确定生成器引用,由来自表2的调用的生成器列的参数所标识的调用的父生成器(例如生成器1480)在图11C的生成器图形结构中被链接到由来自表2的调用器生成器列的参数所标识的调用器子生成器(例如,生成器1475)。如果先前存在父体,则在单个参量可以被映射到零个或多个子生成器的情况下块2020的行为与吸收订阅依赖性的行为类似。
在块2015中,调用器父生成器被链接到当前调用的子生成器。参考图11C中所示的本发明的实施方式,使用由表2的依赖性确定生成器引用列所标识的依赖性确定生成器引用,由来自表2的调用器生成器列的参数所标识的调用器父生成器在图11C的生成器图形结构中被链接到由来自表2的调用的生成器列的参数所标识的调用的子生成器。从块2015和2020,控制依据流程进入的地方(从块1605或1630)而传递到块1640或1675。
图21是根据本发明的一个实施方式的覆盖生成器的流程图。参考图10,由覆盖生成器模块1045执行图21的流程(或,如参考图10的可替换实施方式所述的处理覆盖和不覆盖的模块)。
响应于覆盖生成器命令(块2110),控制传递到块2120。在块2120,对于由覆盖生成器命令所标识的每一个生成器,调用新生成器命令,且控制传递到块2130。在本发明的一个实施方式中,块2120在被覆盖的生成器还没有被实例化情况下被执行以及将该生成器标记为未执行的(块1640或1680)并将其记录在执行开始日志上(块1665)。不允许覆盖还没有被实例化的生成器的本发明的可替换实施方式会执行块1605和1610之间的附加检查以用于确定所述新生成器命令是否响应于覆盖生成器命令而被调用,并且如果所述新生成器命令响应于覆盖生成器命令而被调用用于指示错误。
在块2130中,在生成器输出缓存中(以及如果输出是字段,则在实例中的)的输出被设定且该生成器被标记为被覆盖。
全局执行命令
图22A是根据本发明的一个实施方式的当前生成器图形的执行的流程图的一部分;而图22B是根据本发明的一个实施方式的当前生成器图形的执行的流程图的另一部分。参考图10,由生成器图形执行模块1070来执行图22的流程。
响应于全局执行命令,块2200显示一组候选生成器基于执行开始日志上的生成器被选择以被执行,且控制传递到块2205。在本发明的一个实施方式中,被覆盖的生成器被标记为未执行且该生成器的执行返回它们的被覆盖结果(而不是使它们的方法被执行),当前组的候选生成器是执行开始日志上的生成器。虽然本发明的一个实施方式在上面被描述,其中被覆盖的生成器被标记为未执行且它们的执行返回其被覆盖的结果(而不是使它们的方法被执行),但是可替换实施方式可以以不同的方式操作(例如,标记被覆盖的生成器为已执行且当选择当前组的候选生成器时,执行开始日志的无关生成器和执行开始日志上的被覆盖的生成器的父体被选择)。
在块2205中,准备用于执行的生成器的子集从一组候选生成器中被选择且控制传递到块2210。执行块2205的示例性方式在后面描述。
在块2210中,当前组的就绪生成器中的生成器按类型被分类——标准生成器进入块2215而依赖性确定生成器进入块2225。在本发明的一个实施方式中,通过检查生成器的返回类来执行块2210。参考图10和11D,方法跟踪结构被访问以确定生成器的输出类是否是DEP,从而该生成器是否是依赖性确定生成器。
在块2215中,在当前组的就绪生成器中的任意标准生成器被执行且控制传递到块2220。在本发明的一个实施方式中,通过调用具有任意输入参数的方法来执行块2215,所述输入参数从由参量的依赖性产生的任意子生成器的输出被映射(对于参量,链接模式的参量ID被用于将合适的子生成器的输出映射到正被执行的方法的合适的输入参量)。在本发明的一些实施方式中,该执行可以致使执行在将输出写到给定机构的子生成器的方法中的代码(例如设定全局变量、设定不是生成器输出的实例中的字段、影响外部数据源等)或执行在从给定机构中读取所述输出的父生成器的方法中的代码。在块2220中,对于这些父体(如果有的话)在这些执行的标准生成器的任意一个上具有吸收订阅,该订阅被标记为未完成。控制从块2220传递到块2245.参考图14A,完成的列1420的合适行被设定成指示未完成。
在块2225中,当前组的就绪生成器中的任意依赖性确定生成器被准备以用于执行,且控制传递到块2230。执行块2225的示例性方式在后面会被描述。
在块2230中,当前组的就绪生成器中的任意依赖性确定生成器被执行且控制传递到块2235。在本发明的一个实施方式中,块2230以与块2215相似的方式被执行。
在块2235中,对于任意发现的生成器,新生成器命令被执行,且对于任意订阅,订阅记录和处理被执行。块2235的新生成器命令的一部分以与块1750相似的方式被执行,而订阅记录和处理以与块1740和1745相似的方式被执行。
在块2240中,添加到一组候选生成器,其新添加到执行开始日志。控制从块2240传递到块2245。块2240以与块2200相似的方式被执行,不同的只是作为块2230和2235的结果的新添加到执行开始日志的生成器被添加到一组候选生成器。
在块2245中,被执行的生成器被标记为已执行,生成器输出缓存(和实例缓存)在必要时被更新,被执行的生成器的任意父生成器被添加到当前组的候选生成器,且被执行的生成器从当前组的候选和就绪生成器中被移除。控制从块2245传递到块2250。
在块2250,确定一组候选生成器是否为空,如果不为空,则控制传递到块2205;否则,控制传递到块2255。
在块2255,确定所有的订阅是否已经完成。如果是,则控制传递到块2265,在块2265流程图结束;否则,控制传递到块2260。参考图14A中的本发明的实施方式,为任何未完成的吸收订阅来扫描订阅类型列1405和完成的列1420。
在块2260,未完成的吸收订阅被处理且控制传回到块2205。执行块2260的示例性方式在后面描述。
图23是根据本发明的一个实施方式的图22的块2205的流程图。因此控制从块2200流向块2205中的块2305。在块2305中,对于一组候选生成器的的每一个生成器,以下的块2310-2325被执行。
在块2310中,确定生成器是否具有任意未完成的吸收订阅依赖性。如果有,则控制传递到块2325;否则,控制传递到块2315。参考图14A的实施方式,为匹配到当前选择的生成器和吸收订阅类型,扫描订户的生成器关键字列1400和订阅类型列1405;且如果找到匹配,则在合适的行检查完成的列1420从而确定吸收订阅依赖性的状态。
在块2315中,确定当前选择的生成器所依赖的生成器是否被执行。如果没有,则控制传递到块2325;否则,控制传递到块2320。参考图11C中所示的本发明的实施方式,检查用于子依赖性的行的增量执行标记列1180以确定当前选择的生成器的子代的执行状态。
在块2320中,当前选择的候选生成器被添加到当前组的就绪生成器,且控制传递到块2325。
在块2325中,对于在块2305中选择的当前生成器的流程结束。
图24是根据本发明的一个实施方式的图22的块2225的流程图。从而,控制从2210流到块2225中的块2405。在块2405中,对每个依赖性确定生成器,执行下面的块2410-2430。
在块2410中,由当前选择的依赖性确定生成器所生成的任意先前的依赖性的类型被确定。如果依赖性的类型是非订阅,则控制传递到块2420;如果类型是吸收订阅,则控制传递到块2415;然而,如果类型是粘附订阅,则控制传递到块2425。通过检查存储在生成器输出缓存中的生成器的当前输出来确定块2410。参考类DEP,输出可以执行非订阅、吸收订阅和粘附订阅。
在块2415和2425中,从订阅日志中移除项。参考图14A-图14C中显示的本发明的实施方式,执行:1)对于吸收订阅(块2415),依赖性确定生成器(块1455)被用于在生成器图形中确定其父生成器(例如生成器1450),然后父生成器在订阅日志中被查找且其项被移除;以及2)对于粘附订阅(块2425),依赖性确定生成器(例如生成器1470)在订阅日志中被查找且其项被移除。控制从块2415传递到块2420;控制从块2425传递到块2420。
在块2420中,已经由当前选择的依赖性确定生成器所创建的链接从生成器图形中被清除,且控制传递到块2430。参考图11C中显示的本发明的实施方式,以下被执行。首先确定依赖性确定生成器是否“粘附”在现有的生成器上。这通过扫描图11C中的依赖性确定生成器的子生成器链接列以及检查是否链接中的一个具有指示粘附的粘附指示符来完成。
如果依赖性确定生成器没有粘附在现有的生成器上,则:1)对于具有生成的非订阅向下声明的依赖性(参量、字段或排序依赖性)的依赖性确定生成器,在生成器图形中通过当前选择的依赖性确定生成器的行的父生成器引用列1150来访问依赖性确定生成器的父体,并且在所述父生成器项中,子生成器链接列1160被访问以匹配依赖性确定生成器引用,以及具有所述依赖性确定生成器引用的所有子生成器的引用被清除;2)对于具有生成的非订阅向上声明的依赖性的依赖性确定生成器,在生成器图形中通过当前选择的依赖性确定生成器的行的父生成器链接列1150来访问依赖性确定生成器的父体,并且在所述父生成器项中,父生成器链接列1150被访问以匹配依赖性确定生成器引用,以及具有所述依赖性确定生成器引用的所有父生成器的引用被清除;3)对于具有生成的吸收订阅的依赖性确定生成器,执行与非订阅向下声明的依赖性相同的行为;以及4)对于具有生成的粘附订阅的依赖性确定生成器,在移除订阅之前从订阅日志14A的列1421中提取的依赖性确定生成器引用在父生成器链接列1150中的生成器图形结构中被查找,并且具有所述依赖性确定生成器引用的所有父生成器的引用被清除。
如果由于非订阅向上声明的依赖性或粘附订阅,依赖性确定生成器被粘附在现有的生成器上,那么依赖性确定生成器粘附在其上的子生成器被访问(具有指示粘附的粘附指示器的列1160中的子生成器),并且在所述子生成器项中,所述父生成器链接列1150被访问以匹配依赖性确定生成器引用,以及具有依赖性确定生成器引用的所有父生成器的引用被清除。
在块2430中,对于在块2405中所选择的依赖性确定生成器,流程结束。
图25是根据本发明的一个实施方式的图22的块2260的流程图。从而,控制从块2255流向块2260中的块2505。在块2505中,对于每一个具有未完成的吸收订阅依赖性的生成器,以下块2510-2525被执行。
在块2510中,确定所有匹配的生成器是否已被执行。如果是,则控制传递到块2515;否则,控制传递到块2525。参考图11C和14A的实施方式,在合适的行的匹配的生成器列1415被访问以确定匹配的生成器,且为每一个匹配的生成器检查在合适的行的增量执行列1180。
在块2515中,吸收订阅被标记为完成且控制传递到块2520。参考图14A的实施方式,在合适的行的完成的列1420被设定成指示完成。
在块2520中,在块2505中选择的生成器被添加到当前组的候选生成器且控制传递到块2525。
在块2525中,用于在块2505中的选择的生成器的流程结束。
过程语言
如上所述,正确编写的过程语言、非反射式面向对象的语言以及非反射式基于对象的语言代码可以被转换为反射式面向对象的语言代码。通过示例的方式,类可以通过数据结构和一组静态函数来仿真,所述静态函数以对于数据结构的实例的指针作为第一参数。这些函数是构造器和析构器。构造器在数据结构的指针的分配之后被运行时调用并提供数据结构中的元素的默认状态;析构器在数据结构的指针的释放之前被运行时调用。每个类具有通过文件的描述,包括:1)数据结构;2)描述类的另一个结构,具有结构的大小以及一组函数指针;3)具有代码的静态函数的列表(对于非反射式面向对象的语言和非反射式基于对象的语言,通过扫描真正类的方法并针对每个方法创建执行相关方法的有效调用的静态函数,来自动生成静态函数的代码);以及4)在每个函数上方的注释(包括生成器依赖性声明)以及函数类型(构造器、析构器、属性等)。除了在非反射式面向对象的过程语言或非反射式基于对象的过程语言中的类的定义,还实施了动态调用。具体地,编译器生成用于每个类的下面的初始化代码,代码被(新的类模块)调用一次以:1)实例化描述类的结构,用有效静态函数填充函数指针;2)用类的映射(类跟踪结构)来注册结构的实例,所述类具有对应于类名称的关键字;以及3)用对应于函数名称的关键字(与增量依赖性、排序依赖性、字段依赖性、向上依赖性、弱约束依赖性、输出类关键字以及附加注释一起)在函数映射(方法跟踪结构)中注册所有函数指针。映射允许在一般调用函数的运行时中的实施,所述函数能够:1)(通过新的实例模块)通过名称实例化类的实例(具体地,运行时:a)根据数据结构的大小定位存储器,并将头添加到指针以存储描述类的结构指针,并实施灵活的指针(例如,能够查询类型的指针);以及b)在从映射重新获得静态函数的相关指针之后调用正确的构造函数);以及2)通过名称调用方法,假设所有参数在从映射重新获得静态函数的相关指针之后被正确地传递。将参数正确地传递到由函数指针标识的函数将通过汇编语言在/从输入和输出参数的栈中推或拉元素来完成。上述方法假设数据结构的概念的存在以及在非反射式面向对象的过程语言或非反射式基于对象的过程语言中的函数指针的概念的存在。
示例性的面向对象源代码的语法
A.客户端代码
在本发明的一个实施方式中,客户端代码采取以下语法(以表头示出):
ProducerKey
New(String ClassKey,InstanceKey InstanceKey,String MethodKey);
Runtime
New( )
AddProducerOfInterest(ProducerKey ProducerOfInterestKey);
SetProducerOutput(ProducerKey ProducerToOverrideKey,Object
ProducerOutputInstance);
Execute( );
ProducerKey和Runtime是类,而New、AddProducerOfInterest、SetProducerOutput以及Execute是方法。AddProducerOfInterest调用具有用于表2中的感兴趣生成器情况的合适的值的新的生成器命令。ProducerOutputInstance是被覆盖的生成器输出类的实例。因此通过相应的生成器输出类构造器来进行实例化。
B.陈述
1.依赖性声明陈述的语法
argumentDependency
=”Argument1Dependency;Argument2Dependency;...”;
fieldDependency=“FieldDependency1;FieldDependency2;...”;
sequencingDependency=
“SequencingDependency1;SequencingDependency2;...”;
upwardDependency=“UpwardDependency1;UpwardDependency2;...”;
weeklyConstrainedDependency=
“WeeklyConstrainedDependency1;WeeklyConstrainedDependency2;...”;
unConstrainedDependency=
“unConstrainedDependency1;unConstrainedDependency2;...”;
2.依赖性的语法
a.字段依赖性X,排序依赖性X,向上依赖性X,弱约束依赖性X,不 受约束的依赖性X的语法:
#C:’ClassKey’::#I:’InstanceKey’::#M:’MethodKey’
b.增量X依赖性的语法:
ArgumentID::#C:’ClassKey’::#I:’InstanceKey’::#M:’MethodKey’
在本发明的一个实施方式中,ArgumentID在语法中被省略,并且增量依赖性被声明的顺序表示ArgumentID。因此,ArgumentID被添加以增强可读性。
3.快捷和非快捷
对于非快捷,语法是相同的,但在生成器关键字之前使用#S::指示快捷。
a.字段依赖性X,排序依赖性X,向上依赖性X,弱约束依赖性X,不 受约束的依赖性X的语法:
#S::#C:’ClassKey’::#I:’InstanceKey’::#M:’MethodKey’
b.增量X依赖性的语法:
ArgumentID::#S::#C:’ClassKey’::#I:’InstanceKey’::#M:’MethodKey’
在这种情况下,由依赖性指示的生成器关键字不是依赖性确定生成器。其他语法的实施可以假设快捷是用于特定依赖性类型(例如字段)的默认依赖性,并省略#S::。在该情况下,可以使用#DDP来指示DDP的存在。
4.偶然和非偶然
如前所述,可以将<P>放在偶然元素之前。
a.偶然的类和方法的示例:
1)字段依赖性X,排序依赖性X,向上依赖性X,弱约束依赖性X, 不受约束的依赖性X的语法:
#C:<P>’ClassDeterminationMethodKey’::#I:’InstanceKey’::#M:
<P>’MethodDeterminationMethodKey’
2)增量X依赖性的语法:
ArgumentID::#C:<P>’ClassDeterminationMethodKey’::#I:’InstanceKey’::#
M:<P>’MethodDeterminationMethodKey’
b.偶然的方法的示例:
1)字段依赖性X,排序依赖性X,向上依赖性X,弱约束依赖性X, 不受约束的依赖性X的语法:
#C:’ClassKey’::#I:’InstanceKey’::#M:
<P>’MethodDeterminationMethodKey’
2)增量X依赖性的语法:
ArgumentID::#C:’ClassKey’::#I:’InstanceKey’::#M:
<P>’MethodDeterminationMethodKey’
c.偶然实例的示例:
1)字段依赖性X,排序依赖性X,向上依赖性X,弱约束依赖性X, 不受约束的依赖性X的语法:
#C:’ClassKey’::#I:<P>’InstanceDeterminationMethodKey’::#M:
‘MethodKey’
2)增量X依赖性的语法:
ArgumentID::#C:’ClassKey’::#I:
<P>’InstanceDeterminationMethodKey’::#M:‘MethodKey’
5.速记技术
被认为与父生成器元素相同的诸如类、实例或方法的元素被省略。这一般用于快捷字段的情况。下面给出的示例结合了速记技术和快捷声明(快捷由#S::示出)。
a.类和实例被省略的示例
1)字段依赖性X,排序依赖性X,向上依赖性X,弱约束依赖性X, 不受约束的依赖性X的语法:
#S::#M:’MethodKey’
2)增量X依赖性的语法:
ArgumentID::#S::#M:’MethodKey’
b.类被省略的示例
1)字段依赖性X,排序依赖性X,向上依赖性X,弱约束依赖性X, 不受约束的依赖性X的语法:
#S::#I:’InstanceKey’::#M:’MethodKey’
2)增量X依赖性的语法:
ArgumentID::#S::#I:’InstanceKey’::#M:’MethodKey’
可替换实施方式
虽然图中的流程图显示了本发明某些实施方式所执行的操作的特定顺序,但是应当理解该顺序是示例性的(例如,可替换实施方式可以以不同顺序执行操作、结合某些操作、与某些操作重叠等)。
虽然根据一些实施方式描述了本发明,但是本领域技术人员可以理解本发明不限于所述的实施方式,而且可以通过在所附权利要求的实质和范围内做出修改和改变来实施本发明。因此描述被视为示例性而非限制性的。

Claims (165)

1、一种用于执行面向对象的代码的设备,该设备包括:
运行时,该运行时解释用于所述面向对象的代码中的方法的生成器依赖性声明,所述生成器依赖性声明在运行时标识一组零个或多个生成器,其中生成器是运行时可实例化的结构,该结构包括至少一个实例和与该实例相关联的方法,所述运行时包括:
自动生成器图形生成模块,用于接收感兴趣生成器的命名,将所述感兴趣生成器作为生成器图形的一部分来添加,以及基于已经在所述生成器图形中的所述生成器的方法的生成器依赖性声明通过链接和在需要时通过实例化其他生成器来自动生成所述生成器图形的余项,以及
生成器图形执行模块,用于以由所述生成器图形所指示的顺序来执行所述生成器图形中的生成器,其中每个生成器的执行使所述生成器的方法在所述生成器的实例上被执行。
2、根据权利要求1所述的设备,其中所述自动生成器图形生成模块初始不能够完成所述生成器图形的生成,直到所述生成器图形的一些生成器被执行,以及其中所述生成器图形执行模块能够在所述生成器图形的执行期间调用具有需要的生成器输出的所述自动生成器图形生成模块以完成所述生成器图形的未解析的余项。
3、根据权利要求1所述的设备,其中要在运行时被至少一个所述生成器依赖性声明所标识的一组生成器包括要在执行包括所述生成器依赖性声明的方法的生成器之前被执行的至少一个生成器。
4、根据权利要求1所述的设备,其中所述生成器图形表示执行的合适排序,该排序由所述生成器图形中的生成器的方法的所述生成器依赖性声明所标识。
5、根据权利要求1所述的设备,其中要在运行时被用于给定方法的至少一个生成器依赖性声明所标识的一组生成器包括具有为对所述给定方法的直接输入的输出的至少一个生成器。
6、根据权利要求1所述的设备,其中所述生成器图形表示从所述感兴趣生成器到是所述生成器图形的端节点的那些生成器的所述生成器对于彼此的直接输入至输出依赖性。
7、根据权利要求1所述的设备,其中所述运行时还包括:
覆盖生成器输出模块,用于接收对所述生成器图形的当前版本中的一个或多个所述生成器的输出的当前修改;
生成器图形结构,耦合到所述自动生成器图形生成模块,以用于存储所述生成器图形的当前版本和在当前生成器图形中的每个生成器的当前输出;以及
所述生成器图形执行模块耦合到所述覆盖生成器输出模块和所述生成器图形结构,以用于做出所述当前修改,跟踪所述生成器图形的当前版本中哪些生成器因为受到任意当前修改的间接影响而需要被执行,以及只执行当前需要被执行的生成器图形的当前版本的生成器从而保持所述生成器图形的当前版本的一致性。
8、根据权利要求7所述的设备,其中所述生成器图形结构还包括:
增量执行标记结构,用于帮助所述生成器图形执行模块跟踪在所述生成器图形的当前版本中哪些生成器由于任意当前修改而需要被再执行。
9、根据权利要求7所述的设备,该设备还包括:
覆盖日志,耦合到所述覆盖生成器输出模块和所述生成器图形执行模块,以收集用于批处理的多个覆盖。
10、根据权利要求7所述的设备,其中所述覆盖生成器输出模块还用于接收一个或多个被覆盖的输出将不被覆盖的指示。
11、根据权利要求1所述的设备,其中所述运行时还包括:
命令日志,耦合到所述自动生成器图形生成模块,以将用于批处理的多个命令收集到一起。
12、根据权利要求1所述的设备,其中每个生成器的方法是所述生成器的实例的类的方法。
13、根据权利要求12所述的设备,其中所述生成器依赖性声明是在所述面向对象的代码中的用于类的类定义的一部分。
14、根据权利要求1所述的设备,其中任意方法可以具有一个所述生成器依赖性声明。
15、根据权利要求1所述的设备,其中所述运行时取代对手动调用排序代码的需要,以及其中每个所述生成器的方法是转换方法且所述运行时从所述生成器依赖性声明中发现用于所述转换方法的排序。
16、根据权利要求1所述的设备,其中所述生成器图形的端节点是无关生成器。
17、根据权利要求1所述的设备,其中所述运行时还包括:
实例跟踪结构,耦合到自动生成器图形生成模块和所述生成器图形执行模块,以用于存储对所述生成器的实例的引用;以及
方法跟踪结构,耦合到所述自动生成器图形生成模块和所述生成器图形执行模块,以用于存储对所述生成器的方法和关于其生成器依赖性声明的信息的引用。
18、根据权利要求17所述的设备,其中所述运行时还包括:
新的实例模块,耦合到所述实例跟踪模块,以用于接收当前选择的感兴趣生成器的命名,以及在需要时实例化所述当前选择的感兴趣生成器;
类跟踪结构,用于跟踪对类的引用;以及
新的类模块,耦合到所述类跟踪结构,以用于对类定义进行装载和自省。
19、根据权利要求1所述的设备,其中所述运行时还包括:
生成器图形视窗模块,用于以图形方式显示所述当前生成器图形的表示。
20、根据权利要求1所述的设备,其中所述运行时还包括:
可配置交互生成器输出布局图形用户界面模块,用于以图形方式显示来自所述生成器图形的输出并允许与所述生成器图形进行交互。
21、根据权利要求1所述的设备,其中所述生成器图形执行模块包括:
动态依赖性模块,用于解析任意动态生成器依赖性,其中每个生成器依赖性声明可以包括动态生成器依赖性,其中动态生成器依赖性使所述运行时动态选择在运行时由所述生成器依赖性声明标识的所述一组零个或多个生成器,以及其中所述动态选择能使得在所述生成器图形的不同的执行期间选择不同的生成器。
22、根据权利要求21所述的设备,其中所述动态生成器依赖性包括偶然生成器依赖性,其中偶然生成器依赖性是对依赖性确定生成器的依赖性,所述依赖性确定生成器本身依赖于一个或多个其他生成器的输出。
23、根据权利要求21所述的设备,其中所述动态生成器依赖性包括订阅,其中订阅标识标准,根据所述标准来比较生成器以确定所述生成器是否是触发生成器,其中订阅标识对触发生成器的依赖性。
24、根据权利要求23所述的设备,其中一些所述订阅是吸收订阅,其中吸收订阅使所述运行时动态地包括在由生成器依赖性声明在运行时期间标识的所述一组零个或多个生成器中的任意触发生成器。
25、根据权利要求23所述的设备,其中一些所述订阅是粘附订阅,其中粘附订阅也标识父生成器的特性,以及其中粘附订阅对于每个放置的触发生成器而使所述运行时实例化满足所标识的特性的父生成器,并将所述父生成器包括在所述生成器图形中当作对所述触发生成器具有生成器依赖性。
26、根据权利要求1所述的设备,其中所述零个或多个生成器中的一些生成器是依赖性确定生成器,所述依赖性确定生成器的执行将返回对生成器对于彼此的依赖性的标识。
27、根据权利要求26所述的设备,其中一些所述依赖性确定生成器的执行返回向上声明的依赖性。
28、根据权利要求1所述的设备,其中由所述生成器图形所表示的依赖性中的至少一些依赖性被指定为参量依赖性和字段依赖性,其中参量依赖性使所述运行时将子生成器的输出作为输入参数映射到父生成器,并且其中字段依赖性指示实例的字段的使用。
29、根据权利要求1所述的设备,其中由所述生成器图形所表示的依赖性中的至少一些依赖性被指定为仅排序的依赖性,其中仅排序的依赖性需要输出从子生成器到父生成器通过在所述子生成器的所述方法中的代码而产生,其中在所述输出需要在存在的情况下被提供,从而将所述输出写到所述父生成器的所述方法中的给定机构和代码以从所述给定机构中读取所述输出。
30、根据权利要求1所述的设备,其中方法关键字被用于区分方法,实例关键字被用于区分实例,以及生成器关键字被用于区分生成器,其中用于每个生成器的所述生成器关键字至少基于所述生成器的实例和方法的所述实例关键字和所述方法关键字。
31、根据权利要求30所述的设备,其中所述实例是多个类的实例,其中类关键字被用于区分所述多个类,以及其中用于每个生成器的所述生成器关键字也基于所述生成器的实例的类的所述类关键字。
32、根据权利要求30所述的设备,其中至少一些生成器的所述实例关键字保持对所述生成器的实例的引用。
33、根据权利要求1所述的设备,其中至少一些所述生成器依赖性声明包括向上声明的依赖性。
34、根据权利要求1所述的设备,其中至少一些所述生成器依赖性声明包括向下声明的依赖性。
35、根据权利要求1所述的设备,其中至少一些所述生成器依赖性声明既包括向上声明的依赖性也包括向下声明的依赖性。
36、根据权利要求1所述的设备,其中所述自动生成器图形生成模块响应于新的生成器命令,以及其中所述生成器图形执行模块响应于执行命令。
37、一种用于执行面向对象的代码的设备,所述设备包括:
运行时,该运行时解释用于所述面向对象的代码中的方法的生成器依赖性声明,所述生成器依赖性声明在运行时标识一组零个或多个生成器,其中生成器是运行时可实例化的结构,该结构包括至少一个实例和与该实例相关联的方法,其中每个生成器的方法是所述生成器的实例的类的方法,其中所述生成器依赖性声明是所述面向对象的代码中的用于类的类定义的一部分,以及其中至少一些所述生成器依赖性声明包括向下声明的依赖性,所述运行时包括:
自动生成器图形生成模块,用于接收感兴趣生成器的命名,将所述感兴趣生成器作为当前生成器图形的一部分来添加,以及基于已经在所述当前生成器图形中的所述生成器的方法的生成器依赖性声明通过链接和在需要时通过实例化其他生成器来自动生成所述当前生成器图形的余项;
生成器图形结构,耦合到所述自动生成器图形生成模块、所述当前生成器图形和在所述当前生成器图形中的每个生成器的当前输出,其中方法关键字被用于区分所述方法,实例关键字被用于区分所述实例,以及生成器关键字被用于区分所述生成器,并且其中用于给定生成器的所述生成器关键字至少基于所述生成器的实例和方法的所述实例关键字和方法关键字;以及
生成器图形执行模块,耦合到所述生成器图形结构,以用于以由所述当前生成器图形所指示的顺序来执行所述当前生成器图形中的生成器,其中所述当前生成器图形表示由所述当前生成器图形中的生成器的方法的生成器依赖性声明所标识的合适的执行排序,以及其中每个生成器的执行使所述生成器的方法在所述生成器的实例上被执行,所述生成器图形执行模块包括:
动态依赖性模块,用于解析任意动态生成器依赖性,其中每个生成器依赖性可以包括动态生成器依赖性,其中动态生成器依赖性使所述运行时动态地选择由所述生成器依赖性声明在运行时期间所标识的一组零个或多个生成器,其中所述动态选择可以在当前生成器图形的不同执行期间对于所述一组零个或多个生成器选择不同的生成器,其中所述动态生成器依赖性包括偶然生成器依赖性,以及其中偶然生成器依赖性是对于依赖性确定生成器的依赖性,所述依赖性确定生成器本身依赖于一个或多个其他生成器的输出。
38、根据权利要求37所述的设备,其中所述运行时还包括:
生成器图形视窗模块,用于以图形方式显示所述当前生成器图形的表示。
39、根据权利要求37所述的设备,其中所述运行时还包括:
可配置交互生成器输出布局图形用户界面模块,用于以图形方式显示来自所述当前生成器图形的输出并允许与所述当前生成器图形进行交互。
40、根据权利要求37所述的设备,其中所述动态生成器依赖性包括订阅,其中订阅标识标准,根据所述标准来比较生成器以确定所述生成器是否是触发生成器,其中订阅标识对触发生成器的依赖性。
41、根据权利要求40所述的设备,其中所述订阅中的一些订阅是吸收订阅,其中吸收订阅使所述运行时动态地包括在由生成器依赖性声明在运行时期间标识的所述一组零个或多个生成器中的任意触发生成器。
42、根据权利要求40所述的设备,其中所述订阅中的一些订阅是粘附订阅,其中粘附订阅也标识父生成器的特性,以及其中粘附订阅对于每个放置的触发生成器而使所述运行时实例化满足所标识的特性的父生成器,并将所述父生成器包括在所述当前生成器图形中。
43、根据权利要求37所述的设备,其中所述生成器中的一些生成器是依赖性确定生成器,所述依赖性确定生成器的执行返回对生成器对于彼此的依赖性的标识。
44、根据权利要求43所述的设备,其中一些所述依赖性确定生成器的执行返回向上声明的依赖性。
45、根据权利要求37所述的设备,其中至少一些所述生成器依赖性声明包括参量依赖性和字段依赖性中的一者或多者,其中参量依赖性使所述运行时将子生成器的输出作为输入参数映射到父生成器,以及其中字段依赖性指示实例的字段的使用。
46、根据权利要求37所述的设备,其中类关键字被用于区分类,以及用于每个生成器的所述生成器关键字也基于所述生成器的实例的所述类关键字。
47、根据权利要求37所述的设备,其中至少一些生成器的所述实例关键字保持对所述生成器的实例的引用。
48、根据权利要求37所述的设备,其中所述自动生成器图形生成模块用于接收感兴趣生成器的多个命名以及用于自动生成多个当前生成器图形,以及其中所述生成器图形执行模块响应于全局执行命令,所述全局执行命令使所有的当前生成器图形被执行。
49、一种用于执行面向对象的代码的方法,所述方法包括:
实例化具有当前感兴趣输出的生成器,其中所述面向对象的代码包括方法和生成器依赖性声明,其中用于给定方法的所述生成器依赖性声明标识一组零个或多个生成器,其中生成器是运行时可实例化的结构,该结构包括至少一个实例和与该实例相关联的方法;
响应于所述实例化,将感兴趣生成器作为当前生成器图形的一部分;
尝试基于已经在所述当前生成器图形中的所述生成器的方法的生成器依赖性声明通过链接和在需要时通过实例化其他生成器来自动生成所述当前生成器图形的余项;以及
执行在所述当前生成器图形中的生成器以为感兴趣生成器确定当前输出。
50、根据权利要求49所述的方法,其中所述尝试自动生成还包括:
尝试从在所述面向对象的代码中的生成器依赖性声明中自动发现和建立所述当前生成器图形,所述当前生成器图形表示生成到所述感兴趣生成器的一组一个或多个输入的当前值所需要的生成器的直接的输入输出关系,其中在所述当前生成器图形中的每个所述生成器的当前输出是对所述当前生成器图形和/或感兴趣生成器中的另外的一个或多个生成器的直接输入。
51、根据权利要求49所述的方法,其中所述执行在所述当前生成器图形中的生成器还包括:
通过执行所述当前生成器图形的一些生成器来自动生成所述当前生成器图形中的附加部分,所述附加部分返回将被添加到所述当前生成器图形的其他生成器对于彼此的依赖性的标识。
52、根据权利要求49所述的方法,其中所述执行包括:
解析任意动态生成器依赖性,所述每个生成器依赖性声明包括动态生成器依赖性,其中动态生成器依赖性使所述运行时动态地选择由所述生成器依赖性声明在运行时期间所标识的所述一组零个或多个生成器。
53、根据权利要求52所述的方法,其中所述动态生成器依赖性包括偶然生成器依赖性,其中偶然生成器依赖性是对依赖性确定生成器的依赖性,所述依赖性确定生成器本身依赖于一个或多个其他生成器的输出。
54、根据权利要求52所述的方法,其中所述动态生成器依赖性包括订阅,其中订阅标识标准,根据所述标准来比较生成器以确定所述生成器是否是触发生成器,其中订阅为触发生成器标识依赖性。
55、根据权利要求54所述的方法,其中一些所述订阅是吸收订阅,其中吸收订阅使得动态地包括由生成器依赖性声明所标识的所述一组零个或多个生成器中的任意触发生成器。
56、根据权利要求54所述的方法,其中一些所述订阅中是粘附订阅,其中粘附订阅也标识父生成器的特性,以及其中粘附订阅对于每个放置的触发生成器而使得实例化满足所标识的特性的父生成器,并将所述父生成器包括在所述当前生成器图形中当作对所述触发生成器具有生成器依赖性。
57、根据权利要求49所述的方法,其中所述尝试自动生成还包括:
实例化还没有被实例化的生成器的任意实例;以及
实例化还没有被实例化的生成器。
58、根据权利要求49所述的方法,其中所述尝试自动生成还包括:
装载还没有被装载的生成器的实例的任意类;以及
对没有被自省的类的类定义进行自省,包括所述类定义中包含的生成器依赖性声明陈述。
59、根据权利要求58所述的方法,其中所述尝试自动生成包括:
从所述当前生成器图形中发现和建立一个生成器,对于所述生成器在所述尝试之前所述生成器的实例的类已经被装载和自省,在所述尝试之前所述生成器的实例已经被实例化,以及在所述尝试之前所述生成器已经被实例化。
60、根据权利要求49所述的方法,该方法还包括:
以图形方式显示所述当前生成器图形的表示。
61、根据权利要求49所述的方法,该方法还包括:
以图形方式显示来自所述当前生成器图形的输出和允许与所述当前生成器图形进行交互。
62、根据权利要求49所述的方法,该方法还包括:
存储所述当前生成器图形的生成器的当前输出;
覆盖所述当前生成器图形的一个或多个生成器的当前输出;以及
根据所述当前生成器图形和所述覆盖以及不被所述覆盖直接或间接影响的生成器的被存储的当前输出,来仅再执行被所述覆盖直接或间接影响的生成器从而确定所述生成器的当前输出。
63、根据权利要求62所述的方法,其中被影响的所述生成器不是所述当前生成器图形中的所有生成器。
64、根据权利要求62所述的方法,该方法还包括:
不覆盖所述覆盖;以及
根据所述当前生成器图形和所述不覆盖以及不被所述不覆盖直接或间接影响的所述生成器的被存储的当前输出,来仅再执行被所述不覆盖直接或间接被影响的生成器从而确定所述生成器的当前输出。
65、根据权利要求49所述的方法,其中由所述生成器依赖性声明所声明的依赖性中的至少一些依赖性被指定作为参量依赖性和字段依赖性,其中参量依赖性使将子生成器的输出作为输入参数映射到父生成器,以及其中字段依赖性指示实例的字段的使用。
66、根据权利要求49所述的方法,其中由所述生成器依赖性声明所声明的依赖性中的至少一些依赖性被指定作为仅排序的依赖性,其中仅排序的依赖性需要输出从子生成器到父生成器通过在所述子生成器的所述方法中的代码而产生,其中在所述输出需要在存在的情况下被提供,从而将所述输出写到所述父生成器的所述方法中的给定机构和代码以从所述给定机构中读取所述输出。
67、根据权利要求49所述的方法,其中方法关键字被用于区分所述方法,实例关键字被用于区分所述实例,以及生成器关键字被用于区分所述生成器,其中用于给定生成器的所述生成器关键字至少基于所述生成器的实例和方法的所述实例关键字和方法关键字。
68、根据权利要求67所述的方法,其中所述实例是多个类的实例,其中类关键字被用于区分所述多个类,以及其中用于每个生成器的所述生成器关键字也基于所述生成器的实例的类的所述类关键字。
69、根据权利要求67所述的方法,其中至少一些生成器的所述实例关键字保持对所述生成器的实例的引用。
70、根据权利要求49所述的方法,其中至少一些所述生成器依赖性声明包括向上声明的依赖性。
71、根据权利要求49所述的方法,其中至少一些所述生成器依赖性声明包括向下声明的依赖性。
72、根据权利要求49所述的方法,其中至少一些所述生成器依赖性声明既包括向上声明的依赖性也包括向下声明的依赖性。
73、根据权利要求49所述的方法,其中响应于新的生成器命令来进行所述实例化,以及响应于全局执行命令来进行所述执行。
74、一种用于执行面向对象的代码的方法,所述方法包括:
接收感兴趣生成器的指示,其中生成器是运行时可实例化的结构,该结构包括至少一个实例和与该实例相关联的方法;
基于所述感兴趣生成器和用于方法的生成器依赖性声明陈述来自动生成和执行生成器图形,其中所述生成器图形包括目标子图形,所述目标子图形包括所述感兴趣生成器和多个等级的其他生成器,所述自动生成和执行包括:
反复执行下列步骤直到达到源生成器:
基于已经在所述目标子图形中的所述生成器中的一个生成器的方法的生成器依赖性声明陈述来发现、建立和执行生成器的决定子图形,和
将一组由所述决定子图形返回的一个或多个其他生成器添加到所述目标子图形,以及
执行由所述目标子图形所指示的排序的目标子图形中的生成器,其中每个生成器的执行引起所述生成器的方法在所述生成器的实例上被执行。
75、根据权利要求74所述的方法,其中至少一个生成器是所述目标子图形和一个所述决定子图形的一部分。
76、根据权利要求74所述的方法,其中第一个决定子图形包括为依赖性确定生成器的根并包括节点,至少一些所述节点是标准生成器。
77、根据权利要求74所述的方法,其中所述目标子图形具有为标准生成器的根。
78、根据权利要求74所述的方法,其中至少一个所述决定子图形返回订阅。
79、根据权利要求78所述的方法,其中所述订阅是指示用于触发生成器的吸收订阅标准的吸收订阅。
80、根据权利要求78所述的方法,其中所述订阅是指示用于触发生成器的粘附订阅标准和用于要被创建的父生成器的粘附订阅特性的粘附订阅。
81、根据权利要求74所述的方法,其中至少一个所述决定子图形返回向上声明的生成器依赖性。
82、根据权利要求74所述的方法,其中至少一些所述生成器依赖性声明陈述标识一个或多个参量依赖性和字段依赖性,其中参量依赖性使得将子生成器的输出作为输入参数映射到父生成器,以及其中字段依赖性指示实例的字段的使用。
83、根据权利要求74所述的方法,其中方法关键字被用于区分所述方法,实例关键字被用于区分所述实例,以及生成器关键字被用于区分所述生成器,其中用于给定生成器的所述生成器关键字至少基于所述生成器的实例和方法的所述实例关键字和方法关键字。
84、根据权利要求83所述的方法,其中所述实例是多个类的实例,其中类关键字被用于区分所述多个类,以及其中用于每个生成器的所述生成器关键字也基于所述生成器的实例的类的所述类关键字。
85、根据权利要求83所述的方法,其中至少一些生成器的所述实例关键字保持对所述生成器的实例的引用。
86、根据权利要求74所述的方法,该方法还包括:
以图形方式显示所述生成器图形的表示。
87、根据权利要求74所述的方法,该方法还包括:
以图形方式显示来自所述生成器图形的输出并允许与所述生成器图形的交互。
88、根据权利要求74所述的方法,该方法还包括:
在所述接收感兴趣生成器的指示之后和在所述自动生成和执行之前接收执行命令。
89、一种用于执行面向对象的代码的设备,所述设备包括:
运行时,用于基于感兴趣生成器和用于方法的生成器依赖性声明陈述来自动生成和执行生成器图形,其中生成器是运行时可实例化的结构,该结构包括至少一个实例和与该实例相关联的方法,所述运行时包括下述反复关联的模块:
自动生成器图形生成模块,用于接收感兴趣生成器的命名,将所述感兴趣生成器添加到所述生成器图形的目标子图形中,以及基于已经在所述生成器图形中的所述生成器的方法的生成器依赖性声明通过自动发现和创建决定子图形来自动生成在所述目标子图形中的多个等级的其他生成器,以及
生成器图形执行模块,用于执行在所述生成器图形中的生成器,其中每个生成器的执行使得所述生成器的方法在所述生成器的实例上被执行,以及其中多个所述决定子图形中的每个决定子图形的执行将至少另一个生成器添加到所述目标子图形中。
90、根据权利要求89所述的设备,其中至少一个生成器是所述目标子图形和一个所述决定子图形的一部分。
91、根据权利要求89所述的设备,其中第一决定子图形包括为依赖性确定生成器的根并包括节点,至少一些所述节点是标准生成器。
92、根据权利要求89所述的设备,其中所述目标子图形具有为标准生成器的根。
93、根据权利要求89所述的设备,其中至少一个所述决定子图形返回订阅。
94、根据权利要求93所述的设备,其中所述订阅是指示用于触发生成器的吸收订阅标准的吸收订阅。
95、根据权利要求93所述的设备,其中所述订阅是指示用于触发生成器的粘附订阅标准和用于要被创建的父生成器的粘附订阅特性的粘附订阅。
96、根据权利要求89所述的设备,其中所述多个决定子图形中的至少一个决定子图形返回向上声明的生成器依赖性。
97、根据权利要求89所述的设备,其中至少一些所述生成器依赖性声明陈述标识一个或多个参量依赖性和字段依赖性,其中参量依赖性使得将子生成器的输出作为输入参数映射到父生成器,以及其中字段依赖性指示实例的字段的使用。
98、根据权利要求89所述的设备,其中方法关键字被用于区分所述方法,实例关键字被用于区分所述实例,以及生成器关键字被用于区分所述生成器,其中用于每个生成器的所述生成器关键字至少基于所述生成器的实例和方法的所述实例关键字和方法关键字。
99、根据权利要求98所述的设备,其中所述实例是多个类的实例,其中类关键字被用于区分所述多个类,以及其中用于每个生成器的所述生成器关键字也基于所述生成器的实例的类的所述类关键字。
100、根据权利要求98所述的设备,其中至少一些生成器的所述实例关键字保持对所述生成器的实例的引用。
101、根据权利要求89所述的设备,其中所述运行时还包括:
生成器图形视窗模块,用于以图形方式显示所述当前生成器图形的表示。
102、根据权利要求89所述的设备,其中所述运行时还包括:
可配置交互生成器输出布局图形用户界面模块,用于以图形方式显示来自所述生成器图形的输出并允许与所述生成器图形进行交互。
103、根据权利要求89所述的设备,其中所述自动生成器图形生成模块响应于新的生成器命令,以及其中所述生成器图形执行模块响应于执行命令。
104、一种提供面向对象的代码的机器存储介质,所述面向对象的代码包括:
多个类定义,每个所述类定义包括,
一组一个或多个字段,
一组一个或多个方法,和
用于所述一组方法中的每个方法的生成器依赖性声明,其中用于所述方法中的给定方法的所述生成器依赖性声明在运行时被使用以标识一组一个或多个生成器,其中生成器是运行时可实例化的结构,该结构至少包括在运行时的多个类中的一个类的实例和所述类的方法;以及其中第一生成器具有偶然生成器依赖性,如下:
所述一组方法的第一方法是属性方法,
所述一组方法的第二方法具有基于所述属性方法标识属性生成器的依赖性声明陈述,以及具有用于基于所述属性生成器的输出而在第二生成器和第三生成器之间进行选择的代码,以及
所述一组方法的第三方法具有基于所述第二方法标识依赖性确定生成器的生成器依赖性声明陈述,其中所述第一生成器基于所述第三方法以及具有所述依赖性确定生成器当前在所述第二生成器或第三生成器上返回的生成器依赖性。
105、根据权利要求104所述的机器存储介质,其中:
第四生成器具有对触发生成器的订阅依赖性,如下:
所述一组方法的第四方法,其中所述第四生成器基于所述第四方法,
所述一组方法的第五方法,所述第五方法具有指示用于触发生成器的一组订阅标准的代码,其中订阅生成器基于所述第五方法,以及
所述一组方法的第六方法,其中所述触发生成器基于所述第六方法,并且由于所述触发生成器满足所述一组订阅标准,所述订阅依赖性被创建。
106、根据权利要求105所述的机器存储介质,其中所述一组订阅标准是吸收订阅标准,以及其中所述第四方法具有标识所述订阅生成器的生成器依赖性声明。
107、根据权利要求105所述的机器存储介质,其中所述一组订阅标准是粘附订阅标准,其中所述第五方法也包括为父生成器指示一组粘附订阅特性的代码,其中所述触发生成器满足所述粘附订阅标准,以及其中所述第四生成器满足所述粘附订阅特性并且由于所述订阅依赖性而被实例化。
108、根据权利要求104所述的机器存储介质,其中至少一个所述生成器依赖性声明包括强约束的参量依赖性。
109、根据权利要求104所述的机器存储介质,其中至少一个所述生成器依赖性声明包括强约束的字段依赖性。
110、根据权利要求104所述的机器存储介质,其中:
第四生成器具有对第五生成器的生成器依赖性,如下:
所述一组方法的第四方法,其中所述第四生成器基于所述第四方法,
所述一组方法的第五方法,所述第五方法具有向上声明生成器依赖性的代码,以及
所述一组方法的第六方法,所述第六方法具有基于所述第五方法来标识依赖性确定生成器的生成器依赖性声明,其中所述第五生成器基于所述第六方法并且具有对所述依赖性确定生成器的生成器依赖性,所述依赖性确定生成器返回所述第四生成器对所述第五生成器的生成器依赖性。
111、根据权利要求104所述的机器存储介质,其中方法关键字被用于区分所述一组方法,实例关键字被用于区分所述多个类定义的实例,以及生成器关键字被用于区分生成器,其中用于每个生成器的所述生成器关键字至少基于所述生成器的实例和方法的所述实例关键字和方法关键字。
112、根据权利要求111所述的机器存储介质,其中类关键字被用于区分所述多个类,以及其中用于每个生成器的所述生成器关键字也基于所述生成器的实例的类的所述类关键字。
113、根据权利要求111所述的机器存储介质,其中至少一些生成器的所述实例关键字保持对所述生成器的实例的引用。
114、一种提供面向对象的代码的机器存储介质,该机器存储介质包括:
具有多个类定义的程序,每个所述类定义包括:
一组一个或多个字段,
一组一个或多个方法,和
用于所述一组方法的每个的生成器依赖性声明,其中用于所述方法的给定方法的所述生成器依赖性声明在运行时被使用以标识一组零个或多个生成器,其中生成器是运行时可实例化的结构,该结构包括至少在运行时的多个类中的一个类的实例和所述类的方法;以及
其中每个所述生成器的方法是转换方法,并且程序不包括手动调用排序代码,而是依赖于运行时以从所述生成器依赖性声明中自动发现对所述转换方法的排序。
115、根据权利要求114所述的机器存储介质,其中至少一些所述生成器依赖性声明包括动态生成器依赖性,其中动态生成器依赖性使所述一组零个或多个生成器在运行时期间被动态地选择。
116、根据权利要求115所述的机器存储介质,其中所述动态生成器依赖性包括偶然生成器依赖性,其中偶然生成器依赖性是对依赖性确定生成器的依赖性,所述依赖性确定生成器本身依赖于一个或多个其他生成器的输出。
117、根据权利要求115所述的机器存储介质,其中所述动态生成器依赖性包括订阅,其中订阅标识标准,根据所述标准来比较生成器以确定所述生成器是否是触发生成器,其中订阅为触发生成器标识依赖性。
118、根据权利要求117所述的机器存储介质,其中一些所述订阅是吸收订阅,其中吸收订阅使得动态地包括由所述生成器依赖性声明标识的所述一组零个或多个生成器中的任意触发生成器。
119、根据权利要求117所述的机器存储介质,其中一些所述订阅是粘附订阅,其中粘附订阅也标识父生成器的特性,以及其中粘附订阅对于每个放置的触发生成器而使得实例化满足所标识的特性的父生成器,并将所述父生成器包括在生成器图形中当作对所述触发生成器具有生成器依赖性。
120、根据权利要求114所述的机器存储介质,其中至少一些由所述生成器依赖性声明所声明的依赖性被指定为参量依赖性和字段依赖性,其中参量依赖性使得将子生成器的输出作为输入参数来映射到父生成器,以及其中字段依赖性指示实例的字段的使用。
121、根据权利要求114所述的机器存储介质,其中方法关键字被用于区分所述方法,实例关键字被用于区分所述实例,以及生成器关键字被用于区分所述生成器,其中用于给定生成器的所述生成器关键字至少基于所述生成器的实例和方法的所述实例关键字和所述方法关键字。
122、根据权利要求121所述的机器存储介质,其中类关键字被用于区分所述多个类,以及其中用于每个生成器的所述生成器关键字也基于所述生成器的实例的类的所述类关键字。
123、根据权利要求121所述的机器存储介质,其中至少一些生成器的所述实例关键字保持对所述生成器的实例的引用。
124、根据权利要求114所述的机器存储介质,其中至少一些所述生成器依赖性声明包括向上声明的依赖性。
125、一种机器存储介质,其上存储有:
一组一个或多个类的一组一个或多个实例,其中每个类包括方法和用于所述方法的生成器依赖性声明,其中所述一组实例的每个实例与其类的所有方法相关联,以及其中所述生成器依赖性声明在运行时上标识一组一个或多个生成器之间的依赖性;
生成器图形结构,其中存储有:
多个生成器,每个所述生成器是在运行时被实例化的结构且只包括所述一组实例中的一个实例和只包括与该实例相关的方法中的一个方法,
多个链接,所述多个链接表示多个生成器的不同等级的图形,其中所述多个链接为包括在多个生成器中的所述方法表示由所述生成器依赖性声明所标识的生成器图形中的生成器之间的依赖性,
用于所述多个生成器的每个生成器的生成器关键字,其中每个生成器关键字至少基于标识所述一组实例中的一个实例和与该实例相关的所述方法中的一个方法的实例关键字和方法关键字,和
在所述生成器图形中的所述多个生成器的每个生成器的当前输出;
以及
实例跟踪结构,在所述实例跟踪结构中存储有所述实例关键字和所述一组实例之间的对应关系。
126、根据权利要求125所述的机器存储介质,其中所述生成器图形结构表示由所述生成器图形中的所述生成器的方法的生成器依赖性声明所标识的执行的合适排序。
127、根据权利要求125所述的机器存储介质,其中所述生成器图形结构表示从所述感兴趣生成器到是所述生成器图形的端节点的那些生成器的所述生成器对于彼此的直接输入至输出依赖性。
128、根据权利要求125所述的机器存储介质,其中由所述生成器图形结构所表示的依赖性中的至少一些依赖性被指定为参量依赖性和字段依赖性,其中参量依赖性使所述运行时将子生成器的输出作为输入参数映射到父生成器,以及其中字段依赖性指示实例的字段的使用。
129、根据权利要求125所述的机器存储介质,其中由所述生成器图形结构所表示的依赖性中的至少一些依赖性被指定为仅排序的依赖性,其中仅排序的依赖性需要输出从子生成器到父生成器通过在所述子生成器的所述方法中的代码而产生,其中在所述输出需要在存在的情况下被提供,从而将所述输出写到所述父生成器的所述方法中的给定机构和代码以从所述给定机构中读取所述输出。
130、根据权利要求125所述的机器存储介质,其中所述生成器图形结构还包括:
覆盖生成器输出修改,该覆盖生成器输出修改为所述多个生成器的每个生成器存储所述生成器是否被覆盖的指示和被覆盖的输出值。
131、根据权利要求125所述的机器存储介质,该机器存储介质上还存储有:
以面向对象的代码为一组类所写的一组类定义,其中每个生成器依赖性声明包括生成器依赖性声明陈述,所述生成器依赖性声明接近该生成器依赖性声明所用于的方法中的一个方法。
132、根据权利要求125所述的机器存储介质,其中至少一些生成器的所述实例关键字保持对所述生成器的实例的引用。
133、根据权利要求125所述的机器存储介质,其中每个生成器关键字也至少基于标识所述生成器的实例的类的类关键字。
134、根据权利要求133所述的机器存储介质,该机器存储介质上还存储有:
在运行时期间被装载和自省的所述多个类的表示,所述表示包括所述方法和生成器依赖性声明的自省的结果;
类跟踪结构,在所述类跟踪结构中存储有类关键字和所述一组类的表示之间的对应关系;以及
方法跟踪结构,在所述方法跟踪结构中存储有方法关键字和自省所述方法的结果之间的对应关系,以及关于自省所述生成器依赖性声明的结果的信息。
135、一种机器存储介质,该机器存储介质上存储有:
包括客户端代码的面向对象的源代码,所述客户端代码包括:
生成器实例化命令,该生成器实例化命令具有用于感兴趣生成器的生成器关键字并使得用于面向对象的代码的运行时自动发现、创建和可选择地解析从所述感兴趣生成器开始并具有多个等级的被发现生成器的当前生成器图形,其中每个所述生成器是运行时可实例化的结构,该结构包括至少一个实例和与该实例相关联的方法,其中所述运行时自动实例化还没有被实例化的所述当前生成器图形的生成器中的任意生成器,其中生成器关键字被用于区分所述生成器,其中方法关键字被用于区分所述方法,其中实例关键字被用于区分所述实例,以及其中用于每个生成器的生成器关键字至少基于用于所述生成器的实例和方法的所述实例关键字和所述方法关键字;
执行命令,每个所述执行命令使用于面向对象的代码的运行时执行所述当前生成器图形和缓存用于在所述当前生成器图形中执行的每个生成器的当前输出;以及
生成器输出覆盖命令,每个所述生成器输出覆盖命令具有生成器关键字和覆盖值以及每个所述生成器输出覆盖命令使得用于面向对象的代码的运行时覆盖被所述生成器关键字指定所述覆盖值的所述生成器的输出。
136、根据权利要求135所述的机器存储介质,其中所述运行时客户端还包括:
生成器输出不覆盖命令,每个所述生成器输出不覆盖命令具有已经被覆盖的一个所述生成器的生成器关键字以及每个所述生成器输出不覆盖命令使得用于面向对象的代码的运行时不覆盖所述生成器的输出。
137、根据权利要求135所述的机器存储介质,其中所述生成器实例化命令是新的生成器命令,以及其中所述生成器覆盖命令是设定命令。
138、根据权利要求135所述的机器存储介质,其中所述生成器实例化命令和所述生成器输出覆盖命令通过由用于面向对象的代码的运行时所维持的日志间接引起。
139、根据权利要求135所述的机器存储介质,其中所述执行命令的第一个命令引起初始执行,以及所述执行命令的每一个后续命令引起增量执行。
140、根据权利要求135所述的机器存储介质,其中所述运行时客户端还包括:
实例实例化命令,该实例实例化命令具有所述感兴趣生成器的实例关键字并使得面向对象的代码的运行时实例化所述感兴趣生成器的实例。
141、根据权利要求135所述的机器存储介质,其中每组一个或多个生成器输出覆盖命令后面跟随一个执行命令。
142、根据权利要求135所述的机器存储介质,其中类关键字被用于区分多个类,所述实例是所述多个类的实例,以及其中用于每个生成器的所述生成器关键字也基于所述生成器的实例的类的类关键字。
143、根据权利要求142所述的机器存储介质,其中所述生成器实例化命令使得用于面向对象的代码的运行时通过经由使用所述生成器实例化命令的生成器关键字的类关键字的类跟踪结构来访问所述生成器的类、经由使用所述生成器实例化命令的生成器关键字的实例关键字的实例跟踪结构来访问所述生成器的实例、和经由使用所述生成器实例化命令的生成器关键字的方法关键字的方法跟踪结构来访问所述生成器的方法的生成器依赖性声明而实例化所述感兴趣生成器。
144、根据权利要求135所述的机器存储介质,其中至少一些生成器的所述实例关键字保持对所述生成器的实例的引用。
145、根据权利要求135所述的机器存储介质,其中所述客户端代码还包括:
附加的生成器实例化命令,该附加的生成器实例化命令使得用于面向对象的代码的运行时自动发现、创建和可选择地解析其他当前生成器图形,其中每个所述执行命令使得用于面向对象的代码的所述运行时执行所有的当前生成器图形。
146、根据权利要求135所述的机器存储介质,其中所述面向对象的源代码也包括类定义,其中所述类定义包括在具有生成器依赖性声明的方法中表达的业务逻辑。
147、根据权利要求146所述的机器存储介质,其中所述生成器依赖性声明在包括所述业务逻辑的类的定义期间而不是在所述类的实例被创建之后定义生成器之间的约束。
148、一种用于生成器输出布局的方法,该方法包括:
显示包括生成器图形中的生成器和所述生成器的输出的类及其获取属性方法的列表,其中所述生成器图形是基于感兴趣生成器和用于类的方法的生成器依赖性声明被自动生成和执行的,其中生成器是运行时可实例化的机构,该结构至少包括类、该类的实例、和与该实例相关的该类的方法,其中在所述生成器图形中的所述生成器的方法的每个所述生成器依赖性声明标识在所述生成器图形中的一组零个或多个其他生成器,其中所述生成器图形包括所述感兴趣生成器和多个等级的其他生成器;
显示具有单元格的电子表格;
接收一组一个或多个被显示的类的多个被显示的获取属性方法到所述电子表格的单元格的映射;以及
用所述一组一个或多个实例的对应的获取属性方法的输出填充至少所述映射的单元格。
149、根据权利要求148所述的方法,该方法还包括:
接收用于被自动填充的单元格中的一个单元格的值;
覆盖所述生成器的输出,所述生成器的输出当前用所述值来填充所述单元格;
在需要时至少以增量方式执行所述生成器图形并更新所述映射的单元格。
150、根据权利要求148所述的方法,其中所述填充还包括:
接收选择所述一组一个或多个实例的指示。
151、根据权利要求150所述的方法,其中所述接收选择所述一组一个或多个实例的指示包括接收至少所述一组实例的一个实例的实例关键字的指示。
152、根据权利要求148所述的方法,其中所述填充还包括:
接收选择多个要被应用的过滤器中的一个过滤器的指示以选择实例,所述实例至少是所述一组被显示的类的第一个类的实例,其中所述多个过滤器中的每个过滤器允许以不同方式选择。
153、根据权利要求152所述的方法,其中所述填充还包括:
在所述接收选择所述多个滤波器中的一个过滤器的指示之前,接收所述第一个类对所述电子表格的一个单元格的映射。
154、根据权利要求153所述的方法,其中所述接收选择所述多个滤波器中的一个过滤器的指示通过所述第一个类被映射到的所述电子表格的单元格而被执行。
155、根据权利要求154所述的方法,其中所述填充还包括:
在接收到选择所述多个滤波器中的一个滤波器的指示之后,使用所选择的滤波器通过所述第一个类被映射到的所述电子表格的单元格,来接收用于选择所述第一个类的实例中的的一个实例的指示。
156、根据权利要求155所述的方法,其中所述接收选择所述第一个类的实例中的一个实例的指示还包括:
接收所述一组实例中的一个实例的实例关键字的指示。
157、根据权利要求148所述的方法,其中所述填充还包括:
接收定义表格的区域的指示,其中所述表格包括所述电子表格的单元格的多个行和列;
其中针对所述表格的一个边缘上的一组单元格来执行所述接收映射;
用所述一组被显示的类的第一个类的第一个实例的对应的获取属性方法的输出来填充所述一个边缘上的一组单元格;以及
用所述第一个类的另一个实例的对应的获取属性方法的输出来反复填充具有相同方向的每个邻近组的单元格直到达到所述表格的相对边缘。
158、根据权利要求148所述的方法,其中至少一个所述生成器依赖性声明包括动态生成器依赖性,其中动态生成器依赖性使得动态选择由所述生成器依赖性声明在运行时期间标识的所述一组零个或多个生成器。
159、根据权利要求158所述的方法,其中所述动态生成器依赖性是偶然生成器依赖性,其中偶然生成器依赖性是对依赖性确定生成器的依赖性,所述依赖性确定生成器本身依赖于一个或多个其他生成器的输出。
160、根据权利要求158所述的方法,其中所述动态生成器返回订阅。
161、根据权利要求160所述的方法,其中所述订阅是吸收订阅,该吸收订阅指示用于触发生成器的吸收订阅标准。
162、根据权利要求160所述的方法,其中所述订阅是粘附订阅,该粘附订阅指示用于触发生成器的粘附订阅标准和用于要被创建的所述父生成器的粘附订阅特性。
163、根据权利要求148所述的方法,其中至少一些所述生成器依赖性声明标识一个或多个参量依赖性和字段依赖性,其中参量依赖性使得子生成器的输出作为输入参数映射到父生成器,以及其中字段依赖性指示实例的字段的使用。
164、根据权利要求148所述的方法,其中类关键字被用于区分所述类,其中方法关键字被用于区分所述方法,实例关键字被用于区分所述实例,以及生成器关键字被用于区分所述生成器,其中用于每个生成器的所述生成器关键字至少基于所述生成器的类、实例和方法的类关键字、实例关键字和方法关键字。
165、根据权利要求164所述的方法,其中至少一些生成器的所述实例关键字保持对所述生成器的实例的引用。
CN200780050659.6A 2006-12-01 2007-11-30 面向生成器图的编程和执行 Active CN101617292B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US11/633,098 US8191052B2 (en) 2006-12-01 2006-12-01 Producer graph oriented programming and execution
US11/633,098 2006-12-01
DE11/633,098 2006-12-01
PCT/EP2007/010409 WO2008064901A2 (en) 2006-12-01 2007-11-30 Producer graph oriented programming and execution

Publications (2)

Publication Number Publication Date
CN101617292A true CN101617292A (zh) 2009-12-30
CN101617292B CN101617292B (zh) 2014-09-24

Family

ID=39350968

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200780050659.6A Active CN101617292B (zh) 2006-12-01 2007-11-30 面向生成器图的编程和执行

Country Status (10)

Country Link
US (5) US8191052B2 (zh)
EP (3) EP2365435B1 (zh)
JP (1) JP5354602B2 (zh)
CN (1) CN101617292B (zh)
AT (1) ATE546775T1 (zh)
BR (1) BRPI0719730A2 (zh)
ES (3) ES2471394T3 (zh)
HK (1) HK1139216A1 (zh)
RU (1) RU2445682C2 (zh)
WO (1) WO2008064901A2 (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101609803B1 (ko) 2012-03-05 2016-04-06 선샤인 카이디 뉴 에너지 그룹 컴퍼니 리미티드 피셔-트롭쉬 합성에서 Co-Ru/Al2O3 폐촉매제로부터 금속 코발트, 루테늄 및 알루미늄의 종합적인 회수를 위한 공정
US10481877B2 (en) 2006-12-01 2019-11-19 Murex S.A.S. Producer graph oriented programming and execution
CN111104031A (zh) * 2019-12-09 2020-05-05 宁波吉利汽车研究开发有限公司 一种面向用户的数据更新方法、装置、电子设备及存储介质
CN111399713A (zh) * 2020-03-11 2020-07-10 上海索辰信息科技有限公司 时序图处理系统及方法
CN114840265A (zh) * 2022-03-23 2022-08-02 阿里巴巴(中国)有限公司 一种基于可执行图的数据处理方法
US11599452B2 (en) 2015-08-31 2023-03-07 Microsoft Technology Licensing, Llc User directed partial graph execution
CN116048480A (zh) * 2023-04-04 2023-05-02 青岛普瑞盛医药科技有限公司 一种基于代码工具自动生成图表的方法及装置

Families Citing this family (97)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9715678B2 (en) 2003-06-26 2017-07-25 Microsoft Technology Licensing, Llc Side-by-side shared calendars
US7707255B2 (en) 2003-07-01 2010-04-27 Microsoft Corporation Automatic grouping of electronic mail
US8799808B2 (en) 2003-07-01 2014-08-05 Microsoft Corporation Adaptive multi-line view user interface
US9015621B2 (en) 2004-08-16 2015-04-21 Microsoft Technology Licensing, Llc Command user interface for displaying multiple sections of software functionality controls
US8117542B2 (en) 2004-08-16 2012-02-14 Microsoft Corporation User interface for displaying selectable software functionality controls that are contextually relevant to a selected object
US7703036B2 (en) 2004-08-16 2010-04-20 Microsoft Corporation User interface for displaying selectable software functionality controls that are relevant to a selected object
US8255828B2 (en) 2004-08-16 2012-08-28 Microsoft Corporation Command user interface for displaying selectable software functionality controls
US7895531B2 (en) * 2004-08-16 2011-02-22 Microsoft Corporation Floating command object
US8146016B2 (en) 2004-08-16 2012-03-27 Microsoft Corporation User interface for displaying a gallery of formatting options applicable to a selected object
US7747966B2 (en) 2004-09-30 2010-06-29 Microsoft Corporation User interface for providing task management and calendar information
US8239882B2 (en) 2005-08-30 2012-08-07 Microsoft Corporation Markup based extensibility for user interfaces
US8689137B2 (en) 2005-09-07 2014-04-01 Microsoft Corporation Command user interface for displaying selectable functionality controls in a database application
US9542667B2 (en) 2005-09-09 2017-01-10 Microsoft Technology Licensing, Llc Navigating messages within a thread
US8627222B2 (en) 2005-09-12 2014-01-07 Microsoft Corporation Expanded search and find user interface
US8605090B2 (en) 2006-06-01 2013-12-10 Microsoft Corporation Modifying and formatting a chart using pictorially provided chart elements
US9727989B2 (en) 2006-06-01 2017-08-08 Microsoft Technology Licensing, Llc Modifying and formatting a chart using pictorially provided chart elements
US7865872B2 (en) * 2006-12-01 2011-01-04 Murex S.A.S. Producer graph oriented programming framework with undo, redo, and abort execution support
US8307337B2 (en) 2006-12-01 2012-11-06 Murex S.A.S. Parallelization and instrumentation in a producer graph oriented programming framework
US8332827B2 (en) 2006-12-01 2012-12-11 Murex S.A.S. Produce graph oriented programming framework with scenario support
US8640086B2 (en) * 2006-12-29 2014-01-28 Sap Ag Graphical user interface system and method for presenting objects
US9311082B2 (en) 2006-12-29 2016-04-12 Sap Se System and method for processing graph objects
WO2008111051A2 (en) * 2007-03-09 2008-09-18 Ghost, Inc. A general object graph for web users
US7865868B2 (en) * 2007-03-28 2011-01-04 Microsoft Corporation .NET ribbon model for a ribbon user interface
US8863102B2 (en) * 2007-04-02 2014-10-14 International Business Machines Corporation Method and system for assembling information processing applications based on declarative semantic specifications
US8307372B2 (en) 2007-04-02 2012-11-06 International Business Machines Corporation Method for declarative semantic expression of user intent to enable goal-driven information processing
US8370812B2 (en) * 2007-04-02 2013-02-05 International Business Machines Corporation Method and system for automatically assembling processing graphs in information processing systems
WO2008142631A1 (en) * 2007-05-22 2008-11-27 Philips Intellectual Property & Standards Gmbh Compiler and compiling method for a networked control system comprising a plurality of devices
US8484578B2 (en) 2007-06-29 2013-07-09 Microsoft Corporation Communication between a document editor in-space user interface and a document editor out-space user interface
US8201103B2 (en) 2007-06-29 2012-06-12 Microsoft Corporation Accessing an out-space user interface for a document editor program
US8762880B2 (en) 2007-06-29 2014-06-24 Microsoft Corporation Exposing non-authoring features through document status information in an out-space user interface
US8381174B2 (en) * 2007-10-31 2013-02-19 National Instruments Corporation Global variable structure in a graphical program
US10248915B2 (en) 2008-03-07 2019-04-02 International Business Machines Corporation Risk profiling for enterprise risk management
US9588781B2 (en) 2008-03-31 2017-03-07 Microsoft Technology Licensing, Llc Associating command surfaces with multiple active components
US9665850B2 (en) 2008-06-20 2017-05-30 Microsoft Technology Licensing, Llc Synchronized conversation-centric message list and message reading pane
US8402096B2 (en) 2008-06-24 2013-03-19 Microsoft Corporation Automatic conversation techniques
US8341608B2 (en) * 2008-11-13 2012-12-25 Visicom Media, Inc. Cross-browser toolbar and method thereof for facilitating cross-browser interoperability
CN105843684B (zh) 2009-02-13 2020-03-03 起元技术有限责任公司 管理任务执行
WO2010107476A1 (en) * 2009-03-19 2010-09-23 Duke University Inhibiting gsnor
US9046983B2 (en) 2009-05-12 2015-06-02 Microsoft Technology Licensing, Llc Hierarchically-organized control galleries
CA2691306A1 (en) 2010-01-28 2011-07-28 Ibm Canada Limited - Ibm Canada Limitee Interdependent task management
AU2011268459B2 (en) 2010-06-15 2014-09-18 Ab Initio Technology Llc Dynamically loading graph-based computations
EP2751664A4 (en) * 2011-09-02 2016-11-02 Vu Lam SYSTEMS AND METHOD FOR PROCESSING SOFTWARE APPLICATION METADATA WITH A SOFTWARE APPLICATION
US9038033B1 (en) * 2011-12-09 2015-05-19 Sencha, Inc. Techniques and mechanisms for web application minification
US8713684B2 (en) 2012-02-24 2014-04-29 Appthority, Inc. Quantifying the risks of applications for mobile devices
US8918881B2 (en) * 2012-02-24 2014-12-23 Appthority, Inc. Off-device anti-malware protection for mobile devices
JP5273884B1 (ja) * 2012-04-09 2013-08-28 伸一 石田 構造解析装置及びプログラム
US10936591B2 (en) 2012-05-15 2021-03-02 Microsoft Technology Licensing, Llc Idempotent command execution
US9239868B2 (en) 2012-06-19 2016-01-19 Microsoft Technology Licensing, Llc Virtual session management and reestablishment
US8819772B2 (en) 2012-06-25 2014-08-26 Appthority, Inc. In-line filtering of insecure or unwanted mobile device software components or communications
WO2014011163A1 (en) * 2012-07-11 2014-01-16 Empire Technology Development Llc Network congestion reduction
US9251194B2 (en) 2012-07-26 2016-02-02 Microsoft Technology Licensing, Llc Automatic data request recovery after session failure
US8898109B2 (en) 2012-07-27 2014-11-25 Microsoft Corporation Automatic transaction retry after session failure
CN102831057B (zh) * 2012-08-13 2015-02-11 于秀山 一种用功能图分析软件功能变更及其影响的方法
US9324033B2 (en) * 2012-09-13 2016-04-26 Nokia Technologies Oy Method and apparatus for providing standard data processing model through machine learning
US9235464B2 (en) 2012-10-16 2016-01-12 Microsoft Technology Licensing, Llc Smart error recovery for database applications
EP2731023B1 (en) * 2012-11-12 2015-03-25 Software AG Method and system for processing graph queries
US10108521B2 (en) 2012-11-16 2018-10-23 Ab Initio Technology Llc Dynamic component performance monitoring
US9507682B2 (en) 2012-11-16 2016-11-29 Ab Initio Technology Llc Dynamic graph performance monitoring
US8910134B2 (en) * 2013-01-03 2014-12-09 Oracle International Corporation System for applying transformation to improve graph analysis
US9785302B2 (en) * 2013-03-14 2017-10-10 Microsoft Technology Licensing, Llc Inline display and preview of related information for elements in a document
US9164740B2 (en) 2013-05-16 2015-10-20 Toshiba Global Commerce Solutions Holdings Corporation System and method for replacing java beans
US9146842B2 (en) * 2013-08-15 2015-09-29 Yahoo! Inc. Testing computer-implementable instructions
US10180821B2 (en) 2013-12-05 2019-01-15 Ab Initio Technology Llc Managing interfaces for sub-graphs
RU2586577C2 (ru) * 2014-01-15 2016-06-10 Общество с ограниченной ответственностью "Аби ИнфоПоиск" Фильтрация дуг в синтаксическом графе
US20150220310A1 (en) * 2014-02-03 2015-08-06 International Business Machines Corporation Object field optimization
US9864364B2 (en) * 2014-11-07 2018-01-09 Honeywell International Inc. Method and apparatus for retrieving time-based event data into unified activity hierarchy across process clusters
US9665849B2 (en) * 2015-02-26 2017-05-30 Red Hat, Inc. Employing dependency graph in software build projects
US9292315B1 (en) 2015-03-16 2016-03-22 International Business Machines Corporation Sharing of classes for modular programs in a multi-tenant environment
EP3086233B1 (en) * 2015-04-23 2020-05-06 CODESYS Holding GmbH Method and system for measuring a runtime by means of watchpoints
US10325014B2 (en) 2015-04-30 2019-06-18 Workiva Inc. System and method for convergent document collaboration
US10152488B2 (en) 2015-05-13 2018-12-11 Samsung Electronics Co., Ltd. Static-analysis-assisted dynamic application crawling architecture
US10255263B2 (en) 2015-05-18 2019-04-09 Workiva Inc. Data storage and retrieval system and method for storing cell coordinates in a computer memory
US9158832B1 (en) * 2015-05-18 2015-10-13 Workiva Inc. Method and computing device for maintaining dependencies among reference elements
US10657134B2 (en) 2015-08-05 2020-05-19 Ab Initio Technology Llc Selecting queries for execution on a stream of real-time data
US9892029B2 (en) * 2015-09-29 2018-02-13 International Business Machines Corporation Apparatus and method for expanding the scope of systems management applications by runtime independence
US9323644B1 (en) * 2015-09-30 2016-04-26 Semmle Limited Query-based software dependency analysis
US9971570B2 (en) 2015-12-15 2018-05-15 Oracle International Corporation Automated generation of memory consumption aware code
SG11201803929YA (en) 2015-12-21 2018-06-28 Ab Initio Technology Llc Sub-graph interface generation
US10127320B2 (en) 2015-12-29 2018-11-13 Samsung Electronics Co., Ltd. Computerized identification of app search functionality for search engine access
KR101886203B1 (ko) * 2016-07-19 2018-09-06 주식회사 스패로우 프로그램 분석 장치 및 방법
US10769180B2 (en) * 2017-02-02 2020-09-08 International Business Machines Corporation Efficient dataflow processing for objects
US20180275976A1 (en) * 2017-03-22 2018-09-27 Qualcomm Innovation Center, Inc. Link time optimization in presence of a linker script using path based rules
WO2018197084A1 (en) 2017-04-25 2018-11-01 Murex S.A.S Query plan generation and execution in a relational database management system with a temporal-relational database
RU2681408C2 (ru) * 2017-08-22 2019-03-06 Александр Павлович Соколов Способ и система графо-ориентированного создания масштабируемых и сопровождаемых программных реализаций сложных вычислительных методов
US10303469B1 (en) * 2017-12-28 2019-05-28 Semmle Limited Commit graph generation
JP7031930B2 (ja) * 2018-03-19 2022-03-08 Necプラットフォームズ株式会社 プログラム生成部、情報処理装置、プログラム生成方法、及びプログラム
US10437572B1 (en) 2018-08-03 2019-10-08 King Fahd University Of Petroleum And Minerals Methods, computer readable media, and systems for compiling concise expressive design pattern source code
US10768904B2 (en) * 2018-10-26 2020-09-08 Fuji Xerox Co., Ltd. System and method for a computational notebook interface
US11755825B2 (en) 2019-09-12 2023-09-12 Workiva Inc. Method, system, and computing device for facilitating private drafting
US11741084B2 (en) * 2019-09-27 2023-08-29 Autodesk, Inc. High frequency data management (HFDM)
US11113048B1 (en) * 2020-02-26 2021-09-07 Accenture Global Solutions Limited Utilizing artificial intelligence and machine learning models to reverse engineer an application from application artifacts
US11443108B2 (en) 2020-08-17 2022-09-13 Workiva Inc. System and method for document management using branching
US11100281B1 (en) 2020-08-17 2021-08-24 Workiva Inc. System and method for maintaining links and revisions
US11100277B1 (en) 2021-02-15 2021-08-24 Workiva Inc. Systems, methods, and computer-readable media for flow-through formatting for links
US11354362B1 (en) 2021-05-06 2022-06-07 Workiva Inc. System and method for copying linked documents
US11640281B2 (en) * 2021-05-17 2023-05-02 International Business Machines Corporation Tool for introspection in object-oriented source code
US11640495B1 (en) 2021-10-15 2023-05-02 Workiva Inc. Systems and methods for translation comments flowback

Family Cites Families (112)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4558413A (en) * 1983-11-21 1985-12-10 Xerox Corporation Software version management system
US5504917A (en) 1986-04-14 1996-04-02 National Instruments Corporation Method and apparatus for providing picture generation and control features in a graphical data flow environment
US5481741A (en) 1986-04-14 1996-01-02 National Instruments Corporation Method and apparatus for providing attribute nodes in a graphical data flow environment
US5481740A (en) 1986-04-14 1996-01-02 National Instruments Corporation Method and apparatus for providing autoprobe features in a graphical data flow diagram
US5497500A (en) 1986-04-14 1996-03-05 National Instruments Corporation Method and apparatus for more efficient function synchronization in a data flow program
US5155836A (en) 1987-01-27 1992-10-13 Jordan Dale A Block diagram system and method for controlling electronic instruments with simulated graphic display
JPS6432337A (en) * 1987-07-29 1989-02-02 Hitachi Ltd Method for instructing influence of program change
US5371851A (en) 1989-04-26 1994-12-06 Credence Systems Corporation Graphical data base editor
US5313387A (en) * 1989-06-30 1994-05-17 Digital Equipment Corporation Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers
EP0465018B1 (en) * 1990-06-29 1997-05-14 Oracle Corporation Method and apparatus for optimizing undo log usage
EP0528631B1 (en) 1991-08-13 1998-05-20 Xerox Corporation Electronic image generation
JPH05265975A (ja) * 1992-03-16 1993-10-15 Hitachi Ltd 並列計算処理装置
US5416895A (en) * 1992-04-08 1995-05-16 Borland International, Inc. System and methods for improved spreadsheet interface with user-familiar objects
US5659747A (en) * 1993-04-22 1997-08-19 Microsoft Corporation Multiple level undo/redo mechanism
JPH06332785A (ja) * 1993-05-25 1994-12-02 Fujitsu Ltd オブジェクト指向データ処理システム
JPH0713766A (ja) * 1993-06-14 1995-01-17 Internatl Business Mach Corp <Ibm> オブジェクト指向コンピュータ・システムおよびオブジェクト・クラス管理方法
US5758160A (en) 1993-06-28 1998-05-26 Object Technology Licensing Corporation Method and apparatus for building a software program using dependencies derived from software component interfaces
US5893123A (en) * 1995-06-22 1999-04-06 Tuinenga; Paul W. System and method of integrating a spreadsheet and external program having output data calculated automatically in response to input data from the spreadsheet
US6003037A (en) * 1995-11-14 1999-12-14 Progress Software Corporation Smart objects for development of object oriented software
US5838976A (en) 1995-11-28 1998-11-17 Hewlett-Packard Co. System and method for profiling code on symmetric multiprocessor architectures
US6067415A (en) * 1995-12-26 2000-05-23 Kabushiki Kaisha Toshiba System for assisting a programmer find errors in concurrent programs
US7987427B1 (en) * 1996-05-10 2011-07-26 Apple Inc. Graphical editor for program files
US5819293A (en) * 1996-06-06 1998-10-06 Microsoft Corporation Automatic Spreadsheet forms
US5966072A (en) 1996-07-02 1999-10-12 Ab Initio Software Corporation Executing computations expressed as graphs
US5822593A (en) 1996-12-06 1998-10-13 Xerox Corporation High-level loop fusion
JP3730740B2 (ja) * 1997-02-24 2006-01-05 株式会社日立製作所 並列ジョブ多重スケジューリング方法
US6145121A (en) * 1997-04-17 2000-11-07 University Of Washington Trace based method for the analysis, benchmarking and tuning of object oriented databases and applications
US6026235A (en) * 1997-05-20 2000-02-15 Inprise Corporation System and methods for monitoring functions in natively compiled software programs
US6209125B1 (en) * 1997-06-03 2001-03-27 Sun Microsystems, Inc. Method and apparatus for software component analysis
US5990906A (en) * 1997-06-25 1999-11-23 National Instruments Corporation Undo feature for a graphical programming system
US6219628B1 (en) * 1997-08-18 2001-04-17 National Instruments Corporation System and method for configuring an instrument to perform measurement functions utilizing conversion of graphical programs into hardware implementations
US6233733B1 (en) 1997-09-30 2001-05-15 Sun Microsystems, Inc. Method for generating a Java bytecode data flow graph
US6704927B1 (en) 1998-03-24 2004-03-09 Sun Microsystems, Inc. Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading
US6427234B1 (en) 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6223171B1 (en) * 1998-08-25 2001-04-24 Microsoft Corporation What-if index analysis utility for database systems
US6111575A (en) * 1998-09-24 2000-08-29 International Business Machines Corporation Graphical undo/redo manager and method
US6493868B1 (en) * 1998-11-02 2002-12-10 Texas Instruments Incorporated Integrated development tool
US6826752B1 (en) * 1998-12-17 2004-11-30 California Institute Of Technology Programming system and thread synchronization mechanisms for the development of selectively sequential and multithreaded computer programs
JP2000207223A (ja) * 1999-01-12 2000-07-28 Matsushita Electric Ind Co Ltd 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体
US6385770B1 (en) * 1999-01-29 2002-05-07 Telefonaktiebolaget Lm Ericsson (Publ) Software upgrade
US6957191B1 (en) * 1999-02-05 2005-10-18 Babcock & Brown Lp Automated financial scenario modeling and analysis tool having an intelligent graphical user interface
US6571388B1 (en) * 1999-03-09 2003-05-27 Hewlett-Packard Development Company, L.P. Building a custom software environment including pre-loaded classes
US6407753B1 (en) * 1999-05-04 2002-06-18 International Business Machines Corporation System and method for integrating entities via user-interactive rule-based matching and difference reconciliation
US6665866B1 (en) 1999-05-28 2003-12-16 Microsoft Corporation Extensible compiler utilizing a plurality of question handlers
JP2001005678A (ja) * 1999-06-18 2001-01-12 Fujitsu Ltd ネットワーク型情報処理装置及び方法
WO2001001206A2 (en) 1999-06-30 2001-01-04 Strategic Simulation Systems, Inc. System dynamics model builder and simulator
US6618851B1 (en) * 1999-08-31 2003-09-09 Autodesk, Inc. Method and apparatus for state-reversion
WO2001082068A1 (en) * 2000-04-21 2001-11-01 Togethersoft Corporation Methods and systems for identifying dependencies between object-oriented elements
CA2346231A1 (en) 2000-05-08 2001-11-08 Internet Number Corporation Method and system for accessing information on a network using message aliasing functions having shadow callback functions
US6959429B1 (en) * 2000-05-16 2005-10-25 Watterson-Prime Software, Inc. System for developing data collection software applications
US6763515B1 (en) 2000-06-05 2004-07-13 National Instruments Corporation System and method for automatically generating a graphical program to perform an image processing algorithm
US20030005407A1 (en) 2000-06-23 2003-01-02 Hines Kenneth J. System and method for coordination-centric design of software systems
US6889227B1 (en) * 2000-07-21 2005-05-03 Sun Microsystems, Inc. Database access bridge system and process
RU2206119C2 (ru) 2000-09-22 2003-06-10 Закрытое акционерное общество "МЦСТ" Способ получения объектного кода
US6973640B2 (en) * 2000-10-04 2005-12-06 Bea Systems, Inc. System and method for computer code generation
US20020184401A1 (en) * 2000-10-20 2002-12-05 Kadel Richard William Extensible information system
US6826523B1 (en) * 2000-11-01 2004-11-30 Sony Computer Entertainment America Inc. Application development interface for multi-user applications executable over communication networks
US6829572B2 (en) * 2000-12-07 2004-12-07 Internatinal Business Machines Corporation Method and system for efficiently overriding array net values in a logic simulator machine
US6820256B2 (en) * 2000-12-13 2004-11-16 Microsoft Corporation System and method for whole-system program analysis
US7200838B2 (en) 2000-12-20 2007-04-03 National Instruments Corporation System and method for automatically generating a graphical program in response to a state diagram
US6836884B1 (en) * 2001-06-04 2004-12-28 Microsoft Corporation Method and system for editing software programs
US20020188616A1 (en) * 2001-06-07 2002-12-12 Chinnici Roberto R. Database access bridge system and process
US7051339B2 (en) * 2001-06-29 2006-05-23 Goldman, Sachs & Co. System and method to measure latency of transaction information flowing through a computer system
US6995765B2 (en) 2001-07-13 2006-02-07 Vicarious Visions, Inc. System, method, and computer program product for optimization of a scene graph
US6966013B2 (en) * 2001-07-21 2005-11-15 International Business Machines Corporation Method and system for performing automated regression tests in a state-dependent data processing system
US7236915B2 (en) * 2001-08-09 2007-06-26 Hewlett-Packard Development Company, L.P. Technique and interface for computer system resource assignment
US20040205524A1 (en) * 2001-08-15 2004-10-14 F1F9 Spreadsheet data processing system
US7010779B2 (en) * 2001-08-16 2006-03-07 Knowledge Dynamics, Inc. Parser, code generator, and data calculation and transformation engine for spreadsheet calculations
US7017084B2 (en) * 2001-09-07 2006-03-21 Network Appliance Inc. Tracing method and apparatus for distributed environments
US8473922B2 (en) 2001-09-19 2013-06-25 Hewlett-Packard Development Company, L.P. Runtime monitoring in component-based systems
US7069547B2 (en) * 2001-10-30 2006-06-27 International Business Machines Corporation Method, system, and program for utilizing impact analysis metadata of program statements in a development environment
US7194475B2 (en) * 2001-10-30 2007-03-20 International Business Machines Corporation Method, system, and program for performing an impact analysis of program statements in at least one source code file
CA2360650A1 (en) * 2001-10-31 2003-04-30 Ibm Canada Limited-Ibm Canada Limitee Algorithm to create and compare debug scenarios of a computer process
JP2003157185A (ja) * 2001-11-19 2003-05-30 Nec Corp 計算機の動作の解析・表示装置とその解析・表示方法及びコンピュータプログラム
US7203743B2 (en) 2001-12-28 2007-04-10 Nortel Networks Limited Hierarchical tree-based protection scheme for mesh networks
US7039923B2 (en) 2002-04-19 2006-05-02 Sun Microsystems, Inc. Class dependency graph-based class loading and reloading
US7159211B2 (en) * 2002-08-29 2007-01-02 Indian Institute Of Information Technology Method for executing a sequential program in parallel with automatic fault tolerance
US7210128B2 (en) * 2002-10-14 2007-04-24 Fujitsu Limited Event-driven observability enhanced coverage analysis
JP3925857B2 (ja) * 2002-11-07 2007-06-06 インターナショナル・ビジネス・マシーンズ・コーポレーション スケジュール作成方法、プログラム及びタスクスケジュール作成装置
US7272820B2 (en) 2002-12-12 2007-09-18 Extrapoles Pty Limited Graphical development of fully executable transactional workflow applications with adaptive high-performance capacity
TWI262383B (en) * 2003-01-10 2006-09-21 Univ Nat Cheng Kung A generic software testing system and method
US7571431B2 (en) * 2003-04-29 2009-08-04 Microsoft Corporation Processing macro information and displaying via GUI in different tools
US7299450B2 (en) * 2003-06-17 2007-11-20 Microsoft Corporation Undoing changes in a software configuration management system
KR100513385B1 (ko) * 2003-06-19 2005-09-07 삼성전자주식회사 선형 위상 검출기를 이용한 클럭 및 데이터 복원 장치 및 그 방법
US7559050B2 (en) * 2003-06-30 2009-07-07 Microsoft Corporation Generating software development tools via target architecture specification
US7739252B2 (en) * 2003-07-14 2010-06-15 Oracle America, Inc. Read/write lock transaction manager freezing
US7818718B2 (en) * 2003-09-30 2010-10-19 Sap Ag Undoing user actions in a client program
US7454701B2 (en) * 2003-10-30 2008-11-18 Sap Ag Systems and methods for implementing formulas
US7536678B2 (en) * 2003-12-04 2009-05-19 International Business Machines Corporation System and method for determining the possibility of adverse effect arising from a code change in a computer program
US7792824B2 (en) * 2004-01-08 2010-09-07 International Business Machines Corporation Apparatus and method for enabling parallel processing of a computer program using existing database parallelism
KR100643268B1 (ko) * 2004-01-17 2006-11-10 삼성전자주식회사 자바 가상 머신의 성능을 향상시키는 방법 및 상기 방법에의해 동작되는 시스템
US7917898B2 (en) * 2004-02-02 2011-03-29 Intel Corporation Methods and apparatus to provide a modular native method invocation system
US7316001B2 (en) * 2004-06-05 2008-01-01 Graphlogic Inc. Object process graph system
US7493335B2 (en) * 2004-07-02 2009-02-17 Graphlogic Inc. Object process graph relational database interface
US7360209B2 (en) * 2004-07-16 2008-04-15 Graphlogic Inc. Object process graph application controller-viewer
US7506320B2 (en) * 2004-09-09 2009-03-17 International Business Machines Corporation Generating sequence diagrams using call trees
US7536676B2 (en) * 2004-09-10 2009-05-19 Newalliance Bank Object process graph application controller-viewer
US7933862B2 (en) * 2004-09-27 2011-04-26 Microsoft Corporation One click conditional formatting method and system for software programs
US7458072B2 (en) * 2004-10-06 2008-11-25 Microsoft Corporation Execution context infrastructure
US20060080660A1 (en) * 2004-10-07 2006-04-13 Dell Products L.P. System and method for disabling the use of hyper-threading in the processor of a computer system
US7831956B2 (en) 2005-09-13 2010-11-09 Microsoft Corporation Using attributes to identify and filter pluggable functionality
US7779043B2 (en) * 2005-10-06 2010-08-17 Microsoft Corporation Extensible mechanism for object composition
US8032885B2 (en) * 2005-10-11 2011-10-04 Oracle International Corporation Method and medium for combining operation commands into database submission groups
US7376758B2 (en) * 2005-11-04 2008-05-20 Sun Microsystems, Inc. I/O dependency graphs
US7904892B2 (en) * 2006-01-06 2011-03-08 Northrop Grumman Corporation Systems and methods for identifying and displaying dependencies
US7882498B2 (en) * 2006-03-31 2011-02-01 Intel Corporation Method, system, and program of a compiler to parallelize source code
US7844959B2 (en) * 2006-09-29 2010-11-30 Microsoft Corporation Runtime optimization of distributed execution graph
US8902231B2 (en) 2006-10-20 2014-12-02 Alcatel Lucent Method and apparatus for displaying graphical representations of graph layouts
US8332827B2 (en) 2006-12-01 2012-12-11 Murex S.A.S. Produce graph oriented programming framework with scenario support
US8307337B2 (en) 2006-12-01 2012-11-06 Murex S.A.S. Parallelization and instrumentation in a producer graph oriented programming framework
US8191052B2 (en) 2006-12-01 2012-05-29 Murex S.A.S. Producer graph oriented programming and execution
US7865872B2 (en) 2006-12-01 2011-01-04 Murex S.A.S. Producer graph oriented programming framework with undo, redo, and abort execution support

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10481877B2 (en) 2006-12-01 2019-11-19 Murex S.A.S. Producer graph oriented programming and execution
KR101609803B1 (ko) 2012-03-05 2016-04-06 선샤인 카이디 뉴 에너지 그룹 컴퍼니 리미티드 피셔-트롭쉬 합성에서 Co-Ru/Al2O3 폐촉매제로부터 금속 코발트, 루테늄 및 알루미늄의 종합적인 회수를 위한 공정
US11599452B2 (en) 2015-08-31 2023-03-07 Microsoft Technology Licensing, Llc User directed partial graph execution
CN111104031A (zh) * 2019-12-09 2020-05-05 宁波吉利汽车研究开发有限公司 一种面向用户的数据更新方法、装置、电子设备及存储介质
CN111399713A (zh) * 2020-03-11 2020-07-10 上海索辰信息科技有限公司 时序图处理系统及方法
CN111399713B (zh) * 2020-03-11 2021-06-18 上海索辰信息科技股份有限公司 时序图处理系统及方法
CN114840265A (zh) * 2022-03-23 2022-08-02 阿里巴巴(中国)有限公司 一种基于可执行图的数据处理方法
CN116048480A (zh) * 2023-04-04 2023-05-02 青岛普瑞盛医药科技有限公司 一种基于代码工具自动生成图表的方法及装置
CN116048480B (zh) * 2023-04-04 2023-06-09 青岛普瑞盛医药科技有限公司 一种基于代码工具自动生成图表的方法及装置

Also Published As

Publication number Publication date
EP2365436A3 (en) 2011-12-07
WO2008064901A3 (en) 2008-07-24
RU2009125013A (ru) 2011-01-10
EP1942411A2 (en) 2008-07-09
RU2445682C2 (ru) 2012-03-20
ES2497573T3 (es) 2014-09-23
EP2365436B1 (en) 2014-07-30
HK1139216A1 (zh) 2010-09-10
US10083013B2 (en) 2018-09-25
US8191052B2 (en) 2012-05-29
EP1942411A3 (en) 2008-07-16
EP2365435A3 (en) 2011-11-23
US10481877B2 (en) 2019-11-19
EP1942411B1 (en) 2012-02-22
US20140137086A1 (en) 2014-05-15
EP2365435A2 (en) 2011-09-14
JP2010511234A (ja) 2010-04-08
US8645929B2 (en) 2014-02-04
US20120266146A1 (en) 2012-10-18
US8607207B2 (en) 2013-12-10
US20180321920A1 (en) 2018-11-08
EP2365435B1 (en) 2014-04-02
ES2471394T3 (es) 2014-06-26
CN101617292B (zh) 2014-09-24
BRPI0719730A2 (pt) 2014-03-04
ES2381373T3 (es) 2012-05-25
WO2008064901A2 (en) 2008-06-05
WO2008064901A8 (en) 2009-11-05
US20130232475A1 (en) 2013-09-05
JP5354602B2 (ja) 2013-11-27
US20080134138A1 (en) 2008-06-05
EP2365436A2 (en) 2011-09-14
ATE546775T1 (de) 2012-03-15

Similar Documents

Publication Publication Date Title
CN101617292B (zh) 面向生成器图的编程和执行
CN101601012B (zh) 具有场景支持的面向生成器图的编程框架
CN101589366B (zh) 面向生成器图的编程框架中的并行化和植入
US7694272B2 (en) Method, a language and a system for the definition and implementation of software solutions by using a visualizable computer executable modeling language
AU733773B2 (en) Method and system for database application software creation requiring minimal programming
US8739110B2 (en) Integrated system, tools, and methods for designing automated business process applications
US8340995B2 (en) Method and system of using artifacts to identify elements of a component business model
US7822795B2 (en) Apparatus and methods for displaying and determining dependency relationships among subsystems in a computer software system
US20100076924A1 (en) System and method of managing software product-line customizations
US20060010164A1 (en) Centralized KPI framework systems and methods
CN101256492A (zh) 一种进行模型驱动架构的软件开发方法及其系统
US20060247805A1 (en) Process automation
CN101174212A (zh) 用于接口的协作衍生的方法和系统
CN103744647A (zh) 一种基于工作流GPD的Java工作流开发系统及其方法
US6513072B1 (en) Method for associating data bearing objects with user interface objects
US20120060141A1 (en) Integrated environment for software design and implementation
US6820268B2 (en) Method for associating data bearing objects with user interface objects
US8707260B2 (en) Resolving interdependencies between heterogeneous artifacts in a software system
Simitsis Modeling and optimization of extraction-transformation-loading (ETL) processes in data warehouse environments
Valatkaite et al. On business rules automation: The br-centric is development framework
Clements et al. Discovering a system modernization decision framework: a case study in migrating to distributed object technology
SRAI et al. INTEGRATION OF THE MDA APPROACH IN DOCUMENT-ORIENTED NOSQL DATABASES, GENERATION OF A PSM MODEL FROM A PIM MODEL
CN114924721A (zh) 代码生成方法、装置、计算机设备及存储介质
Schneider et al. Reading Sample
Souza et al. S-FrameWeb–a Frameworkbased Design Method for Web Engineering with Semantic Web Support

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1139216

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
CI01 Publication of corrected invention patent application

Correction item: International Day of publication

Correct: 20080605

False: 20080724

Number: 39

Volume: 30

CI03 Correction of invention patent

Correction item: International Day of publication

Correct: 20080605

False: 20080724

Number: 39

Page: The title page

Volume: 30

ERR Gazette correction

Free format text: CORRECT: INTERNATIONAL PROCLAMATION DATE; FROM: 2008.07.24 TO: 2008.06.05

RECT Rectification
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1139216

Country of ref document: HK