CN101601012A - 具有场景支持的面向生成器图形的编程框架 - Google Patents
具有场景支持的面向生成器图形的编程框架 Download PDFInfo
- Publication number
- CN101601012A CN101601012A CNA2007800505964A CN200780050596A CN101601012A CN 101601012 A CN101601012 A CN 101601012A CN A2007800505964 A CNA2007800505964 A CN A2007800505964A CN 200780050596 A CN200780050596 A CN 200780050596A CN 101601012 A CN101601012 A CN 101601012A
- Authority
- CN
- China
- Prior art keywords
- maker
- producer graph
- dependence
- output
- scene
- 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
Links
- 238000000034 method Methods 0.000 claims abstract description 663
- 230000004044 response Effects 0.000 claims abstract description 50
- 230000008859 change Effects 0.000 claims abstract description 42
- 239000000872 buffer Substances 0.000 claims description 33
- 238000003860 storage Methods 0.000 claims description 33
- 238000011068 loading method Methods 0.000 claims description 17
- 230000015654 memory Effects 0.000 claims description 17
- 230000001419 dependent effect Effects 0.000 description 138
- 238000010586 diagram Methods 0.000 description 136
- 230000008569 process Effects 0.000 description 94
- 238000006243 chemical reaction Methods 0.000 description 40
- 230000000875 corresponding effect Effects 0.000 description 35
- 230000006870 function Effects 0.000 description 34
- 238000005516 engineering process Methods 0.000 description 24
- 238000013507 mapping Methods 0.000 description 24
- 230000003068 static effect Effects 0.000 description 24
- 238000012986 modification Methods 0.000 description 22
- 230000004048 modification Effects 0.000 description 22
- 230000008878 coupling Effects 0.000 description 21
- 238000010168 coupling process Methods 0.000 description 21
- 238000005859 coupling reaction Methods 0.000 description 21
- 238000012545 processing Methods 0.000 description 17
- 230000000007 visual effect Effects 0.000 description 15
- 230000009102 absorption Effects 0.000 description 14
- 238000010521 absorption reaction Methods 0.000 description 14
- 238000007689 inspection Methods 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 10
- XGVXKJKTISMIOW-ZDUSSCGKSA-N simurosertib Chemical compound N1N=CC(C=2SC=3C(=O)NC(=NC=3C=2)[C@H]2N3CCC(CC3)C2)=C1C XGVXKJKTISMIOW-ZDUSSCGKSA-N 0.000 description 10
- 230000006399 behavior Effects 0.000 description 9
- 230000000670 limiting effect Effects 0.000 description 9
- 238000005457 optimization Methods 0.000 description 9
- 230000033228 biological regulation Effects 0.000 description 8
- 230000000694 effects Effects 0.000 description 8
- 101100503052 Arabidopsis thaliana FLY1 gene Proteins 0.000 description 7
- 238000005452 bending Methods 0.000 description 7
- 238000013461 design Methods 0.000 description 7
- 230000002452 interceptive effect Effects 0.000 description 6
- 238000013459 approach Methods 0.000 description 5
- 238000013178 mathematical model Methods 0.000 description 5
- 239000013598 vector Substances 0.000 description 5
- 101100013165 Arabidopsis thaliana FLY2 gene Proteins 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 230000008775 paternal effect Effects 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 230000001364 causal effect Effects 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 239000010410 layer Substances 0.000 description 3
- 230000005055 memory storage Effects 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 2
- 244000046052 Phaseolus vulgaris Species 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000002596 correlated effect Effects 0.000 description 2
- 238000005520 cutting process Methods 0.000 description 2
- 230000004069 differentiation Effects 0.000 description 2
- 230000003760 hair shine Effects 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 238000012797 qualification Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- CVOFKRWYWCSDMA-UHFFFAOYSA-N 2-chloro-n-(2,6-diethylphenyl)-n-(methoxymethyl)acetamide;2,6-dinitro-n,n-dipropyl-4-(trifluoromethyl)aniline Chemical compound CCC1=CC=CC(CC)=C1N(COC)C(=O)CCl.CCCN(CCC)C1=C([N+]([O-])=O)C=C(C(F)(F)F)C=C1[N+]([O-])=O CVOFKRWYWCSDMA-UHFFFAOYSA-N 0.000 description 1
- 240000001439 Opuntia Species 0.000 description 1
- 101100537665 Trypanosoma cruzi TOR gene Proteins 0.000 description 1
- 241000700605 Viruses Species 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 235000013351 cheese Nutrition 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000005553 drilling Methods 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000010304 firing Methods 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 239000003471 mutagenic agent Substances 0.000 description 1
- 238000000053 physical method Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4494—Execution paradigms, e.g. implementations of programming paradigms data driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
- Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)
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的对象关系映射方案(乔治亚州亚特兰大市的公司)。从而,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公司)。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使用序列图来标识源代码的受影响的部分。所述设计制品用于代码维护和/或静态源代码的逆向工程。
发明内容
表述了具有场景支持的面向生成器图形的编程框架的实施方式。在一个实施方式中,接收通过关于应用程序的改变来评估潜在影响的请求。所述应用程序包括一组生成器,每个生成器具有至少一个实例以及与该实例相关联的方法。响应于所述请求,可以在保存生成器的现有状态和现有输出的情况下用改变来模拟应用程序。
附图说明
通过参照以下描述和附图可以更好地理解本发明,附图用于图示本发明的实施方式,其中:
图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的流程图;
图26示出了支持场景的本发明的一个可替换实施方式;
图27A是示出了根据本发明的一个实施方式的具有面向生成器图形编程支持和场景支持的运行时的框图;
图27B是示出了根据本发明的一个实施方式的具有还支持增量执行和被覆盖的生成器的输出以及场景的面向生成器图形的编程支持的运行时的框图;
图28A-图28D示出了用于不同场景的应用程序的一些示例性生成器图形;
图29是根据本发明的一个实施方式的运行时客户端的逻辑执行流以及该运行时客户端与具有面向生成器图形编程支持的运行时的关系的流程图;
图30是根据支持场景的本发明的一个实施方式的可替换实施的框图;
图31A示出了类跟踪结构的一个示例性实施方式;
图31B示出了实例跟踪结构的一个示例性实施方式;
图31C示出了生成器图形结构的一个示例性实施方式;
图31D示出了场景跟踪结构的一个示例性实施方式;
图31E示出了场景对象跟踪结构的一个示例性实施方式;
图31F示出了影响列表的一个示例性实施方式;
图32是示出了根据本发明的一个实施方式的新的场景实例化流的流程图;
图33是示出了根据本发明的一个实施方式的支持场景的新的实例实例化流的流程图;
图34A-图34G示出了根据本发明的一个实施方式的在目标场景中的新的被强调的(stressed)生成器的实例化的流程图;以及
图35A-图35B是示出了根据本发明的一个实施方式的被强调的生成器图形执行流的流程图。
具体实施方式
在以下的描述中,例如逻辑执行、操作码、规定操作数的方法、资源划分/共享/复制执行、系统组件的类型和相互关系以及逻辑划分/集成选择的多个具体细节被提出以为本发明提供更全面的理解。但是,本领域技术人员应当理解,在没有这些具体细节的情况下本发明也能实施。在其它的情况,没有具体示出控制结构、数据结构以及全软件指令序列以避免使本发明晦涩。本领域技术人员在有了这些描述后能够在没有不适当的实验的情况下能实现合适的功能。
除非另有规定,否则图中的虚线(虚分界线除外)用于表示图中可选项。但是不应该认为所有的可选项都是使用虚线来显示的,而是用虚线显示的这些项由于各种原因被选择(例如,它们可以很容易地被显示以提供更好的清晰度等)。
说明书中的引用“一个实施方式”、“实施方式”、“示例性实施方式”等表示所述的实施方式可以包括特定的特征、结构或特性,但是每一个实施方式不用必须包括所述特定的特征、结构或特性。此外,这些短语不一定是指同一个实施方式。再者,当结合实施方式描述特定的特征、结构或特性时,可以理解,无论是否明确描述,改变与实施方式有关的这些特征、结构或特性是本领域技术人员所了解的。
在下面的描述和权利要求中,可能使用了术语“耦合”和“连接”以及它们的派生词。应当理解这些术语不是彼此的同义词。而是,在特定实施方式中,“连接”可以用于表示两个或多个元件彼此直接接触。“耦合”可以表示两个或多个元件直接连接。但是“耦合”还可以表示两个或多个元件彼此没有直接连接,但仍然互相合作或相互作用。
在一些情况下,参考其他框图的示例性实施方式来描述流程图的操作。然而,应当理解,流程图的操作可以被本发明的实施方式执行而不是被参考其他框图论述的实施方式来执行,且参考其他框图论述的本发明的实施方式可以执行与参考流程图而论述的操作不同的操作。
可以使用存储在一个或多个计算机上并在该一个或多个计算机上执行的代码和数据来执行图中所示的技术。该计算机使用诸如机器存储介质(例如,磁盘、光盘、随机存取存储器、只读存储器、闪存装置)的机器可读介质来存储代码和数据并使用机器通信介质(例如,电、光、声或其他形式的传播信号-例如载波、红外信号、数字信号等)传送(在内部和通过网络与其他计算机)该代码和数据。此外,该计算机通常包括一组一个或多个处理器,该处理器与一个或多个其他组件耦合,例如存储装置、多个用户输入/输出装置(例如键盘和显示器)以及网络连接。该组处理器与其他组件的耦合一般通过一个或多个总线和桥(也称为总线控制器)。存储装置和网络流量分别表示一个或多个机器存储介质和机器通信介质。因此,给定计算机系统的存储装置一般存储用于在该计算机的所述一组一个或多个处理器上执行的代码和数据。当然,可以使用软件、固件和/或硬件的不同组合来实施本发明的实施方式的一个或多个部分。
概述
根据本发明的一个方面,生成器是至少一个特定实例(或对象)和特定方法,从而如果在运行时期间执行该生成器,则该特定方法在特定实例上被执行。由此,给定的生成器根据给定实例以及与该实例相关联的给定方法而被实例化。如类、实例和方法,生成器是运行时处理的基本元素和结构。因此运行时解释并跟踪生成器的实例化,且由此运行时跟踪由生成器表示的实例和方法的组合。换句话说,生成器是由运行时跟踪、执行的运行时可实例化的结构,且包括至少一个实例和与该实例相关联的方法,从而运行时执行生成器使该生成器的方法在生成器的实例上被执行。此外,生成器的方法与其生成器依赖性声明相关联,该声明为给定生成器标识一组零个或多个生成器依赖性、一组零个或多个生成器。具体地,使用生成器依赖性声明来为方法声明生成器依赖性,用于给定方法的生成器依赖性声明可以包括零个或多个生成器依赖性,且每一个生成器依赖性标识一组零个或多个生成器。因此,生成器依赖性声明以及该声明定义的生成器依赖性由运行时来解释并跟踪,且由此运行时跟踪生成器依赖性声明指示的生成器之间的关系。
当给定生成器依赖于一组一个或多个其他生成器时,运行时将确保在给定生成器之前执行所述一组其他生成器。因此,生成器依赖性声明表示生成器之间的执行关系,而生成器表示将被执行的操作(方法)和实例。当在本发明的一些实施方式中,允许子生成器上的父生成器的生成器依赖性在与父生成器的方法相关联的生成器依赖性声明中被声明(父生成器的生成器依赖性声明标识任意子生成器——这里称为向下声明),本发明的其他实施方式还允许依赖性在与子生成器的方法相关联的生成器依赖性声明中被声明(子生成器的生成器依赖性声明标识一个或多个父生成器-这里称为向上声明)。
在本发明的不同实施方式中,生成器标识另外的事情。例如,当在本发明的某些实施方式中,生成器是至少一个实例和与该实例相关联的方法,在本发明的其他实施方式中,生成器是类、类的实例以及与该实例相关联的方法(例如,生成器可以直接包括类、实例以及方法;生成器可以直接包括实例和方法,而通过引用(例如,实例中的引用)间接标识该实例的类)。在本发明可以用于用不同编程语言(例如,用反射式面向对象的语言编写的面向对象代码;用反射式基于对象的语言编写的面向对象代码;用过程、非反射式面向对象、非反射式基于对象的语言编写并转换成面向反射对象语言代码的代码)编写的代码上下文中的同时,参考反射式面向对象编程语言并参考直接包括类、实例和方法的生成器,以举例而非限定的方式来描述本发明的实施方式。此外,虽然在本发明的一个实施方式中生成器的方法是实例方法(除了作为参量被接收的任何输入,还可以使用实例字段的方法),本发明的可替换实施方式还可以或可替换地支持为类方法的生成器的方法(接收所有输入作为参量和/或使用实例无关变量的方法)(当生成器的方法是实例方法时,生成器的实例是类实例;而当生成器的方法是类方法时,该生成器的实例是表示该类的元类实例)。
图1A是示出了根据本发明的一个实施方式的对面向对象源代码中类的方法与生成器的生成器依赖性声明的关系的框图,所述生成器包括类、该类的给定实例以及该类的方法。在图1A中,显示了面向对象源代码100,其包括类102,而类102包括方法104以及用于方法104的生成器依赖性声明106。当然类102一般包括一个或多个字段(未显示)和另外的方法(未显示)。另外,面向对象源代码100一般包括另外的类。
在运行时期间,类102的实例108被实例化。实例108包括类102的字段数据。另外,生成器110被实例化,其中生成器110标识类102、类102的实例10g(与类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 | 从实例108A到生成器112A.1以及从方 |
到生成器114A.1,以及从方法104B到生成器114A.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)当前选择的感兴趣生成器的输入的输出的子生成器(以及在支持向上声明的依赖性的本发明的一些实施方式中的父生成器),并建立一组一个或多个当前的生成器图形,该图形表示从当前选择的感兴趣生成器通过为非源生成器的任何被发现的生成器到为源生成器的被发现的生成器的这些生成器对彼此的依赖性。当前的生成器图形被存储在生成器图形结构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用于增量执行。更具体地,在生成器图形被初始生成和执行后,当前生成器图形中的生成器的覆盖需要某种层次的再执行(reexecution)。虽然本发明的一些实施方式简单地再执行整个图形,但本发明的可替换实施方式支持增量执行(只再执行生成器图形的被覆盖所影响的这些部分)。支持增量执行的一些示例性实施方式使用生成器图形结构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上返回S1的向下声明的生成器依赖性;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)SUB TYPE,用于订阅依赖性且被设定成指示订阅依赖性的类型(用于支持多种类型的订阅的本发明的实施方式;虽然这里描述的本发明的实施方式支持两种类型-粘附和吸收,但可替换实施方式可以支持更多、更少和/或不同的订阅类型);4)SUB CRIT,用于订阅依赖性并被设定成指示订阅标准;5)PAR LINK MODE,用于粘附订阅依赖性和非订阅向上声明依赖性并被设定成指示应当是父生成器的什么链接模式;6)PAR CLASS,用于粘附订阅依赖性和非订阅向上声明依赖性并被设定成指示应当是父生成器的什么类(例如,类关键字);7)PAR METHOD,用于粘附订阅依赖性和非订阅向上声明依赖性并被设定成指示应当是父生成器的什么方法(例如,方法关键字);以及8)PAR INSTANCE,用于粘附订阅依赖性和非订阅向上声明依赖性且被设定成指示应当是父生成器的什么实例(例如,实例关键字)(如果PARINSTANCE是左空白,则子生成器的实例关键字用于父生成器)。可替换实施方式在粘附订阅依赖性和/或非订阅向上声明依赖性的情况下可以使用父生成器的集合(集合中的每一项保持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)图I-图J示出快捷的使用,该快捷是非偶然的且在用于方法的生成器依赖性声明陈述中,其中标准生成器基于该方法。
图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(指示该快捷被用于类关键字)运行时提供方法FLY11355及其生成器依赖性声明陈述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)父调用器生成器的行的子生成器链接列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中,确定由块1725中的依赖性确定生成器的执行返回的生成器的数量,且使用表2中描述的参量来为每一个生成器调用新生成器命令,所述参量包括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可以响应于添加在块1740或2235中的订阅的类型而被执行。
在块1825中,匹配的生成器被添加到订阅日志且具有吸收订阅的生成器被链接到匹配的生成器。控制从块1825传递到块1830。参考图11C和14A-图14B中所示的本发明的实施方式,以下被执行:1)来自触发生成器的订阅标准列1410的订阅标准在块1810中被使用且匹配的生成器被定位(生成器1460A-N中的一个);2)匹配的生成器被添加到订阅的行处的匹配的生成器列1415;以及3)(使用从用于给定吸收订阅的订阅日志14A的依赖性确定生成器引用列1421中提取的依赖性确定生成器引用)将具有吸收订阅的生成器(例如生成器1450)链接到图11C的生成器图形结构中的匹配的生成器(例如,生成器1460A-N中的一个)。
在块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)对于生成粘附订阅的依赖性确定生成器,在父生成器链接列1150中的生成器图形结构中查询从移除订阅之前的订阅日志14A的列1421中提取的依赖性确定生成器引用,并清除具有该依赖性确定生成器引用的父生成器的所有引用。
如果依赖性确定生成器粘附在已有的生成器上,由于非订阅向上声明的依赖性或粘附订阅,则访问依赖性确定生成器所粘附的子生成器(在具有指示粘附的粘附指示符的列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中的选择的生成器的流程结束。
场景
在一些实施方式中,场景提供规定用对具有不同参数的相同实例的相同方法调用多次的结果来填充集合的方法;从而避免需要用手动调用排序代码来编写具有不同参数的相同实例的相同方法的多个调用。在支持动态依赖性的本发明的一些实施方式中,如果在场景中使用了不同的实例、不同的方法和/或不同的类,则一个应用的两个不同场景可以在应用的生成器图形中具有结构上截然不同的生成器图形或子图形。例如,提供一个示例性应用程序以基于数学模型来计算输出,该数学模型把输入作为数值的已命名的(named)矢量。为了使用不同的已命名的矢量来评估影响,可以创建使用不同矢量实例的场景,其中每个实例对应于截然不同的矢量。可替换地,示例性应用程序可以使用相同的矢量实例,但使用不同的数学模型以计算感兴趣的输出。为了评估采用第一数学模型与采用第二数学模型的影响,可以创建第一场景和第二场景。在第一场景中,调用表示第一模型的第一方法。在第二场景中,调用表示第二模型的第二方法。此外,在第一场景中的类可以或不可以与第二场景中的类相同。如果第一和第二方法被定义为在相同的类中,则类在第一和第二场景中保持相同。然而,如果第一方法被定义为在第一类中,并且第二方法被定义为在不同于第一类的第二类中,则第一和第二场景具有不同的类。注意,在第一类中的第一方法和在第二类中的第二方法可以或不可以具有同一名称。
图26示出了支持场景的本发明的可替换实施方式。与在图1A中示出的一个实施方式类似,面向对象的源代码100包括类102,而类102包括方法104以及用于方法104的生成器依赖性声明106。当然,类102一般包括一个或多个字段(未显示)和另外的方法(未显示)。另外,面向对象源代码100一般包括另外的类。
如上面关于图1A描述的,在运行时期间,类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的父生成器)使用。在一些实施方式中,包括生成器110、父生成器114以及子生成器112的生成器图形与具有唯一第一场景关键字的第一场景相关联。
为了创建用于不同于第一场景的第二场景的生成器图形或子图形,可以强调(stress)一个或多个生成器110、112和114。为了强调生成器,生成器被复制。在一个实施方式中,可以通过根据类声明102、给定方法104以及生成器依赖性声明106实例化生成器来复制生成器。可替换地,可以通过克隆或复制用于引用场景(例如上面描述的第一场景)的相应的已有生成器来复制生成器。下面论述两种技术的一些实施方式的细节。一般而言,强调所有直接被影响的生成器。另外,依赖于直接被影响的生成器的生成器,即间接被影响的生成器也可以被强调。在一个实施方式中,如果间接被影响的生成器落入在感兴趣生成器与直接被影响的生成器之间的路径上,则强调间接被影响的生成器。再参考图26,假设生成器110是用于第二场景的直接被影响的生成器,则生成器110被强调以生成用于第二场景的被强调的生成器2610。生成器110的所有父生成器114是间接被影响的,因为所有父生成器114依赖于生成器110。如果在父生成器114的组中的父生成器落入在感兴趣生成器与生成器110之间的路径,则强调父生成器。生成器110的被强调的父生成器的集合通过用于第二场景的组2614来被表示。此外,如果在组2614中的一些生成器之间存在动态依赖性,则在组2614中的生成器可以被递归地强调以用于第二场景。对于生成器110的子生成器112,由于子生成器112不依赖于生成器110,子生成器112可以不被强调以用于第二场景。然而,如果在组112中的子生成器在第二场景中直接或间接地被影响,则在组112中的被影响的子生成器可以被强调以生成用于第二场景的被强调的子生成器2612。在生成器2610、2612和2614之间的依赖性可以在第二场景中保持不变。可替换地,在生成器2610、2612和2614之间的一些或所有依赖性可以在第二场景中改变。在图26中,第二场景的生成器图形用虚线被示出。
在本发明的一个实施方式中,在应用程序的第一生成器图形中的所有生成器被强调以用于新的场景。因此,被强调的生成器的生成器图形被创建并添加到表示应用程序的生成器图形的集合。然而,在一些实施方式中可以允许优化,以使得只有生成器的子集被强调以创建在用于新的场景的第一生成器图形中的子图形。下面论述用于场景的生成器图形或子图形的创建的一些实施方式的更多细节。
图27A是示出了根据本发明的一个实施方式的具有面向生成器图形编程支持和场景支持的运行时的框图。附图标记320、325、330、335、340、380、384以及345的细节已经参考图3A在上面被描述。为了支持场景,运行时335还接收场景实例化信息328。场景实例化信息328可以通过不同的方法(例如通过客户端代码(例如,图形用户界面(GUI)、命令行界面(CLI)等))被提供到运行时335。可替换地,场景实例化信息328可以在生成器依赖性声明(例如,生成器依赖性声明陈述或生成器依赖性声明代码)中被规定。可替换地,一些或所有场景实例化信息328可以在被强调的生成器产生生成器(stressed producer generation producer)的方法的源代码中被规定。下面论述被强调的生成器产生生成器的更多细节。
根据本发明的一个实施方式,场景实例化信息328被提供到运行时335的新的场景模块337。基于场景实例化信息328,新的场景模块337实例化新的场景。在一些实施方式中,运行时335包括场景跟踪结构338以存储场景关键字、场景对象的引用以及影响路径跟踪结构,所述场景对象的引用可以规定一组一个或多个直接被影响的生成器和直接被影响的生成器的相应的预定输出或输出转换,所述影响路径跟踪结构将随后持有被场景影响的生成器的列表。基于当前组的具有感兴趣的输出的一个或多个被强调的生成器325,自动生成器图形生成模块340可以通过作用于场景跟踪结构338来生成用于一个或多个被强调的感兴趣生成器的生成器图形或子图形。为了通过在场景中的一个或更多直接被影响的生成器的一个或多个预定输出来评估在被强调的感兴趣生成器上的影响,生成器图形执行模块345可以通过用于场景的预定输出或输出转换来巡视生成的生成器图形或子图形以执行被直接或间接地影响的生成器。
在一些实施方式中,场景信息328包括引用场景关键字、目标场景关键字、一个或多个直接被影响的生成器的列表以及直接被影响的生成器的相应的预定输出。一般而言,场景关键字是标识场景的唯一关键字。在一些实施方式中,引用场景是已有的场景,可以包括应用程序的当前状态和输出。目标场景是属于直接被影响的生成器及其相应输出的列表的影响的集合。对于目标场景,由直接被影响的生成器的列表所标识的生成器的输出将被在列表中规定的输出覆盖。运行时335可以使用引用场景来找到被直接被影响的生成器间接影响的生成器。直接被影响的生成器在被强调的感兴趣生成器上的影响可以在没有重写或修改引用场景的情况下使用目标场景而被评估。换句话说,生成器的已有的输出和/或实例被保留或保存以用于第一场景。在一些实施方式中,如果感兴趣生成器依赖于引用场景的生成器图形的一部分,并且该部分没有被目标场景中的直接被影响的生成器直接或间接地影响,则该部分可以被链接到目标场景的生成器图形。换句话说,可以在引用场景的生成器图形中创建用于目标场景的子图形。
图27B是示出了根据本发明的一个实施方式的具有还支持增量执行和被覆盖的生成器的输出以及场景的面向生成器图形的编程支持的运行时的框图。组件320、325、350、352、354、360、365、380、382、384、370、396、390、392以及394的细节已经参考图3B在上面被论述。为了支持场景,场景实例化信息328被输入到自动生成器图形生成模块365。场景实例化信息328的一些实施方式的细节已经参考图27A在上面被描述。基于场景实例化信息328,自动生成器图形生成模块365可以构建用于每个场景的生成器图形或子图形。下面描述了用于场景的生成器图形或子图形的构建的一些实施方式的更多细节。为了评估在被强调的感兴趣生成器(即,用于特定场景的感兴趣生成器)上的影响,生成器图形执行模块370可以巡视用于场景的被创建的生成器图形或子图形以相应地执行生成器。下面描述了用于场景的生成器图形或子图形的执行的一些实施方式的更多细节。
在一些实施方式中,场景实例化信息328被提供到覆盖生成器输出模块390,所述覆盖生成器输出模块390覆盖在相应的场景中的一个或多个直接被影响的生成器的输出。覆盖生成器输出模块390的操作的细节已经参考图3B在上面被描述。
图28A-图28D示出了用于不同场景的应用程序的一些示例性生成器图形。参考图28A,用于场景1的生成器图形被显示在上部,用于场景2的生成器图形被显示在下部。场景1和2分别具有场景关键字“S1”和“S2”。在一些实施方式中,场景1还指默认场景或引用场景。样本应用程序至少具有7个生成器,称为生成器1-生成器7,其中生成器1直接依赖于生成器3和生成器4,生成器2直接依赖于生成器4,生成器3直接依赖于生成器5和生成器6,以及生成器4直接依赖于生成器7。在场景1中,生成器7的输出具有值X1以及生成器1的输出具有值Z1。
在一些实施方式中,通过成对的生成器关键字和场景关键字来标识被强调的生成器。例如,在场景2中的被强调的生成器1通过对{生成器1,S2}来被标识。被强调的生成器可以通过多种方式被用户规定,例如通过客户端代码的方式(例如,GUI、CLI等)。可替换地,应用程序可以包括被强调的生成器产生生成器以生成一个或多个被强调的生成器。被强调的生成器产生生成器(也称为生成器8)的示例性实施方式被显示在图28B中。参考图28B,生成器8的示例性伪代码被显示在图的右边。开始,被强调的生成器的类被定义为具有表示感兴趣生成器关键字的字段和表示场景的字段。在当前示例中,生成器8是无关的,即生成器8的生成器依赖性声明陈述为空。然后,生成器8的方法可以提供场景2的场景信息,给被强调的生成器的字段赋值,以及输出被强调的生成器的集合。
再参考图28A,场景2通过以下场景信息来被定义:引用场景关键字=空,目标场景关键字=S2,以及直接被影响的生成器及其相应的输出的列表。在当前示例中,直接被影响的生成器的列表仅具有一个生成器,称为生成器7,该生成器7具有指定的输出X2。然而,应当理解,在场景中可以有多个直接被影响的生成器。在一些实施方式中,通过创建在图28A中示出的生成器1-生成器7中的每个生成器来复制整个生成器图形以用于场景2。在用于场景2的生成器图形中,直接被影响的生成器(即生成器7)的输出被场景2的定义中规定的输出(即X2)覆盖。在当前示例中的感兴趣生成器是生成器1。通过执行用于场景2的生成器图形,被强调的感兴趣生成器(即场景2中的生成器1)的输出被确定为Z2。在已有的生成器图形中生成用于场景的子图形的可替换的方法是可用的,并且该方法的一些实施方式在下面被详细描述。
由于第二生成器图形被创建用于场景2,所以为场景2作出的修改(例如,覆盖生成器7的输出)不影响用于场景1的生成器图形。因此,用于场景1的生成器的输出没有通过执行应用程序而被为场景2作出的修改所覆盖。这样,创建场景的技术对于评估在没有丢失应用程序中已有的生成器输出的情况下的修改的潜在或可能的影响和/或效果来说是有用的。保留或保存已有的生成器输出可以用于各种原因,例如,用来使用有限差分来自动确定生成器的导数。再参考图28A的实施方式并假设Z1、Z2、X1和X2是数值,感兴趣的生成器(即生成器1)的从场景1到场景2的导数可以使用从场景1和场景2的输出来被容易地计算如下:
生成器1的导数=(Z2-Z1)/(X2-X1)
此外,更高阶的导数,即N阶导数(其中N为大于1的整数),也可以使用来自不同场景的输出来被容易地计算。在一些实施方式中,当多于一个输入从一个场景改变到另一个场景时,可以计算感兴趣生成器的输出的交叉导数(cross derivative)。例如,假设输入X1和Y1从一个场景到另一个场景分别改变到X2和Y2。因此,感兴趣生成器的输出从Z1改变到Z2。然后,感兴趣生成器的输出的交叉导数可以被计算如下:
感兴趣生成器的交叉导数=(Z2-Z1)2/((X2-X1)*(Y2-Y1))
由于运行时可以保持用于不同场景的生成器输出的跟踪,并可以自动确定生成器的导数,所以程序员不需要编写手动调用排序代码来多次运行应用程序,以保持相应输出的跟踪,并对用于使用相应输出来计算导数的方法进行编码。
如上面所提到的,生成用于场景2的子图形的可替换方式是可用的。一些可替换方式的示例在图28C和28D中被示出。
参考图28C,链接用于场景1(即,引用场景)的生成器图形的一部分的技术被用于生成用于场景2(即,目标场景)的生成器图形。开始,运行时可以通过客户端代码从用户接收新的被强调的生成器命令以指示感兴趣生成器是生成器1。可替换地,被强调的生成器产生生成器(例如,生成器8)可以触发新的被强调的生成器命令的调用。响应于所述新的被强调的生成器命令,运行时构建用于场景1的生成器1的生成器图形,所述场景1也称为默认场景或引用场景。然后,另一新的被强调的生成器命令通过客户端代码从用户被接收,或通过强调生成器产生生成器(生成器8)来被触发以指示感兴趣生成器是生成器2。响应于另一新的被强调的生成器命令,运行时将生成器2添加到用于场景1的生成器图形。
然后,运行时接收定义场景2的场景信息。场景信息可以再次来自客户端代码。场景信息规定引用场景关键字为“S1”,目标场景关键字为“S2”,并规定了用于目标场景的直接被影响的生成器及其相应输出的列表。直接被影响的生成器的列表在当前示例中仅包括称为生成器7的生成器和称为X2的生成器7的输出。
为了评估场景2(即,将生成器7的输出改变为X2)在应用程序中对诸如生成器1的生成器的影响或效果,生成器1被标识为感兴趣生成器。进一步地,生成器1用感兴趣的场景来标识。因此,被强调的生成器被标识,称为{生成器1,S2},所述被强调的生成器为成对的感兴趣生成器关键字和场景关键字。在一些实施方式中,感兴趣生成器通过诸如GUI、CLI等的客户端代码来被用户标识。可替换地,感兴趣生成器可以在被强调的生成器产生生成器(例如,生成器8)的输出中被标识。
基于生成器与场景信息之间的依赖性,运行时可以标识用于场景2的直接和间接被影响的生成器。对直接和间接被影响的生成器的标识还可以被称为跟踪。直接和间接被影响的生成器可以使用被影响的路径跟踪结构(IPTS)来被跟踪。在当前示例中,被影响的路径跟踪结构包括生成器7、生成器4、生成器1和生成器2。注意生成器1、2和4是间接被影响的生成器,而生成器7是用于场景2的直接被影响的生成器。在一些实施方式中,通过使用场景2的影响列表,运行时可以标识直接被影响的生成器。然后,运行时可以通过从在图28C中由[B]、[C]、[D]和[E]指示的直接被影响的生成器中横贯(traverse)用于场景1的生成器图形,来使用用于场景1的生成器图形以跟踪间接被影响的生成器。如果用于场景1的生成器图形还没有被构建,则运行时可以在跟踪间接被影响的生成器之前建立用于场景1的生成器图形。可替换地,如果没有提供引用场景或用于引用场景的生成器图形还没有被构建,则运行时可以使用前述生成器的相应方法和生成器依赖性声明来创建感兴趣生成器、直接被影响的生成器以及落到在感兴趣生成器与用于场景2的直接被影响的生成器之间的路径上的任何中间生成器。
在一些实施方式中,运行时遍历被影响的路径跟踪结构以调用在被影响的路径跟踪结构中的用于每个被影响的生成器的新的被强调的生成器命令。所生成的被强调的生成器被相互连接以形成用于场景1的已有的生成器图形。调用的顺序没有关系,因为新的被强调的生成器(即,用于场景2的生成器1、2、4和7)在如图28C中的[G]所指示的那样被创建时被相互连接。在一些实施方式中,在感兴趣生成器不存在于引用场景中的情况下,该感兴趣生成器将不在被影响的路径跟踪结构中被跟踪。然而,运行时调用用于所述感兴趣生成器的新的被强调的生成器命令以创建用于场景2的生成器图形。
为了优化用于场景2的生成器图形,没有被生成器7直接或间接影响但被感兴趣生成器(即生成器1)所依赖的生成器可以不在场景2中被复制或强调。而是,这些生成器被从场景1链接到场景2的生成器图形。在当前示例中,这些生成器包括生成器3、5和6,其中生成器1直接依赖于生成器3,生成器3直接依赖于生成器5和6。如图28C所示,链接在[F]被创建以将场景1的生成器3链接到场景2的生成器1。这样,具有生成器3和生成器3的子生成器(即生成器5和6)的场景1的生成器图形的子集被链接到场景2的生成器图形。换句话说,在用于场景1的生成器图形中的子图形已经被创建以用于场景2。注意,用于场景2的在生成器7上的影响不影响生成器3,因为生成器3不直接或间接依赖于生成器7。
为了进一步优化创建场景2的生成器图形的过程,运行时可以不复制或不强调不被感兴趣生成器所直接或间接依赖的生成器,而不管这些生成器是否在场景2中被影响。这种优化的一个示例在图28D中被示出。与图28C相似,用于场景1的生成器图形被创建,并且生成器1被标识为场景2中的感兴趣生成器,其中场景2如上所述被定义。在一些实施方式中,新的被强调的生成器命令在感兴趣生成器上被调用,所述感兴趣生成器即生成器1,如图28D中的[A]所示。新的被强调的生成器命令可以通过客户端代码被用户调用或被诸如图28B中的生成器8的被强调的生成器产生生成器所触发。
依赖于初始的依赖性声明顺序,运行时可以以所述顺序调用生成器1所依赖的生成器上的新的被强调的生成器命令。例如,如果在初始依赖性声明中,生成器3在生成器4之前,则新的被强调的生成器命令在生成器3上首先被调用,然后在生成器4上被调用,反之亦然。当新的被强调的生成器命令在生成器3上被调用时,链接在[F]被创建以将在场景2中的生成器1链接到在场景1中的生成器3,因为生成器3在场景2中不被影响。当新的被强调的生成器命令在生成器4上被调用时,被强调的生成器4在场景2中被克隆,如图28D中的[G]所示。为了克隆在场景2中的被强调的生成器4,运行时可以使用在场景1的生成器图形中来自生成器4的信息,以在用于场景2的子图形中制作生成器4的副本。可替换地,运行时可以基于生成器4的生成器依赖性声明和面向对象的源代码来通过实例化生成器4而创建新的生成器4。在被强调的生成器4被添加到生成器图形之后,在生成器7上调用新的被强调的生成器命令以强调如图28D中的[H]所示的用于场景2的生成器7。像生成器4一样,生成器7可以通过实例化或克隆而被强调。注意,用于场景2的子图形现在如图28D所示完全被构建,而没有强调场景2中的生成器2,因为称为生成器1的在场景2中的感兴趣生成器没有直接或间接依赖于生成器2,虽然生成器2被生成器7间接影响。因此,创建用于场景2的子图形的过程被进一步优化。
图29是根据本发明的一个实施方式的运行时客户端的逻辑执行流以及该运行时客户端与具有面向生成器图形编程支持的运行时的关系的流程图。在图29中,虚线600将运行时客户端610的逻辑执行流与具有面向生成器图形编程支持的运行时640分离。块615、620、625、630、645、650、655和660的细节已经参考图6在上面被描述。为了支持场景,运行时客户端610首先检查在块616中是否有新的场景。如果有新的场景,则运行时客户端610在块617中确定新的场景信息。此外,场景实例化命令可以被调用或被记录在命令日志665中以实例化新的场景。响应于新的场景命令,运行时640在块648实例化新的场景。然后,运行时客户端610转向块615来继续执行流。否则,运行时客户端610跳过块617并转向块615以继续执行流。在块615,运行时客户端610确定一组一个或多个具有感兴趣的输出的被强调的生成器。然后,运行时客户端610转向块620以继续参考图6在上面描述的执行流。
为了评估在用于场景的一个或多个感兴趣生成器上的影响,生成器图形执行模块在块630被调用。然后,在块660中,生成器图形执行模块可以巡视场景的生成器图形或子图形以基于跟踪来执行必须被执行的任何生成器。在块630中,生成器图形执行模块被调用,并且控制有选择地返回到块615、块625和/或块616。
图30是根据支持场景的本发明的一个实施方式的可替换实施的框图。在图30中,虚线1000将运行时客户端1002与具有面向生成器图形编程支持的运行时1004分离。运行时客户端1002和运行时1004的各个组件的细节已经参考图10在上面被描述。因此,以下描述集中在场景相关的组件上。在一些实施方式中,运行时1004进一步包括新的场景模块1096和场景跟踪结构1050以支持场景。
如上面参考图10所论述的,新的类模块1095可以基于类定义1010来实例化类。被实例化的类的信息可以被存储在类跟踪结构1092中。类跟踪结构1092的一个示例性实施方式在图31A中被示出。参考图31A,类关键字1110和类引用1115(例如类指针)被存储在用于每个被实例化的类的类跟踪结构中。再参考图30,在运行时客户端1002一边的类定义1010包括根据本发明的一个实施方式的被强调的生成器产生生成器代码1018。如上面参考图28B所论述的,被强调的生成器产生生成器是输出被强调的生成器的集合的生成器,每个被强调的生成器包括生成器关键字和场景关键字。被强调的生成器产生生成器代码1018的一些示例性伪代码在图28B中被示出。为了支持场景,运行时客户端1002进一步提供具有场景关键字的场景实例化命令1019。场景关键字可以被用于新的实例的实例化中以将实例与相应的场景相关联。在被实例化的实例上的信息可以被存储在实例跟踪结构1065中。实例跟踪结构1065的示例性实施方式在图31B中被示出。对于每个被实例化的实例来说,场景关键字1123、实例引用1120以及被强调的实例引用1125被存储在图31B中的示例性实例跟踪结构中。
再参考图30,运行时客户端1002可以调用具有唯一场景关键字的场景实例化命令1019以创建新的场景。响应于场景实例化命令1019,新的场景模块1096可以将新的场景信息(例如在图27A中的场景信息328)保存在场景跟踪结构1050中。场景跟踪结构1050的示例性实施方式在图31D中示出。在一些实施方式中,如图31D所示,场景跟踪结构1050包括具有用于场景关键字的列、用于场景引用的列以及用于影响跟踪结构的列的表格。场景关键字3110可以是指派给场景的唯一关键字以标识场景。场景引用3112可以指场景对象。影响路径跟踪结构3113保持对在相应场景中被影响的生成器的跟踪。
图31E示出了场景对象跟踪结构的一个示例性实施方式。场景对象跟踪结构可以包括具有用于每个场景的行的表格。对于每个场景,引用场景关键字3120、目标场景关键字3122以及对影响列表的引用3124被存储在场景对象跟踪结构中。目标场景关键字3122标识要被建立的场景。因此,目标场景关键字3122与在图31D中的场景跟踪结构中的相应的场景关键字3110相同。引用场景关键字3120标识场景,基于该场景,目标场景可以被建立。如果没有引用场景,则引用场景关键字3120为空。对场景的影响列表的引用3124指场景的影响列表,例如,在图31F中示出的示例性影响列表。
在图31F中,场景的示例性影响列表包括用于下列中的每一个的列:直接被影响的生成器关键字3130、相对或绝对指示符3134、输出实例3132、转换参数3136以及转换方法名称和方法类3138。在相应场景中的每个直接被影响的生成器占据影响列表的一行。直接被影响的生成器关键字3130标识在场景中的直接被影响的生成器。
在一些实施方式中,输出值可以被指派一个绝对值或相对值。相对或绝对指示符3134指示输出值被指派一个绝对值还是一个相对值。如果指示符3134指示输出值是绝对的,则直接被影响的生成器的输出值被指定为输出实例3132,而不管对于直接被影响的生成器的输入。否则,转换参数3136被应用到直接被影响的生成器的当前输出(即,用于引用场景的直接被影响的生成器的输出)以使用具有转换方法名称和方法类3138的转换方法来转换直接被影响的生成器的当前输出。然后,用于目标场景的直接被影响的生成器的输出被转换后的当前输出覆盖。注意,直接被影响的生成器的输出可以是值(例如数值)或实例。例如,直接被影响的生成器的当前输出是数值,转换参数3136是因数值,以及转换方法是乘法,则用于目标场景的直接被影响的生成器的输出是等于因数值与直接被影响的生成器的当前输出值的乘积的值。在另一个示例中,转换参数3136是扩展值,以及转换方法是求和,则用于目标场景的直接被影响的生成器的输出可以等于扩展值与直接被影响的生成器的当前输出值的和。应当理解的是,直接被影响的生成器的输出值可以使用不同实施方式中的其他公式作为当前输出的函数来被生成。
再参考图30,自动化的被强调的生成器图形生成模块3040访问场景跟踪模块1050。响应于具有生成器关键字和场景关键字的被强调的生成器实例化命令1025,自动化的被强调的生成器图形生成模块3040可以基于来自场景跟踪结构1050、类跟踪结构1092、方法跟踪结构1058、实例跟踪结构1065以及实例1052的相应场景的场景信息来实例化被强调的生成器。可替换地,在类定义1010中的被强调的生成器产生生成器代码1018被运行时1004处理以生成被强调的生成器产生生成器的类3054以及生成被强调的生成器的方法3056。所生成的类和方法被输入到自动化的被强调的生成器图形生成模块3040中,以相应地实例化被强调的生成器。自动化的被强调的生成器图形生成模块3040与被实例化的被强调的生成器相互连接以生成用于相应场景的生成器图形或子图形。支持场景的新的被强调的生成器实例化流的一些实施方式的细节在下面参考图34A-图34G来论述。
根据本发明的一个实施方式,生成器图形被存储在生成器图形结构1060中。一个示例性的生成器图形结构在图31C中示出。生成器图形结构实质上与图11C中示出的生成器图形结构相同。由于每个场景在相应的生成器图形或子图形中被单独跟踪,被强调的生成器图形执行模块3070可以巡视用于场景的相应的生成器图形或子图形以执行用于场景的被强调的生成器中的至少一些来评估对用于场景的一个或多个被强调的感兴趣生成器的影响,而不重写或改变用于其他场景的生成器的输出。在下面参考图35A和35B论述了支持场景的生成器图形的执行流的一些实施方式的细节。
注意,在上面描述的运行时客户端1002和运行时1004中支持场景的模块和结构可以被添加到支持偶然和订阅类型的动态生成器依赖性的一些实施方式(例如在上面的图12中示出的)中。
图32是示出了根据本发明的一个实施方式的新的场景实例化流的流程图。在块3210中,运行时接收新的场景实例化命令。然后,运行时检查被新的场景实例化命令所标识的场景是否已经存在于块3220中。如果该场景已经存在,则新的场景实例化流在块3290完成。否则,在块3230,运行时添加诸如目标场景关键字、引用场景关键字以及对场景的影响列表的引用的场景信息到场景跟踪结构中。然后,运行时转入块3290,新的场景实例化流被完成。
图33是示出了根据本发明的一个实施方式的支持场景的新的实例实例化流的流程图。注意,图33实质上与图15相似,流程的细节已经在上面参考图15被描述。为了支持场景,在图33中的块3360中,运行时实例化类的实例并存储具有实例关键字、被强调的实例引用以及场景关键字的实例。如上所述,每个场景具有唯一的场景关键字。因此,如果实例与多个场景相关联,则可以有多个场景关键字。在一个实施方式中,实例关键字和场景关键字被存储在如图31B中示出的实例跟踪结构中。参考图31B,实例跟踪结构包括用于场景关键字1123、实例关键字1120以及被强调的实例引用1125中的每一个的一列。
图34A-图34G示出了根据本发明的一个实施方式的在目标场景中的新的被强调的生成器的实例化的流程图。图34A-图34C示出了新的被强调的生成器的实例化的全部流程,而图34D-图34G示出了在全部流程中的特定操作的扩展流程。
参考图34A,在块1600,运行时接收新的被强调的生成器命令。新的被强调的生成器命令规定了生成器关键字和目标场景关键字。具有生成器关键字和目标场景关键字的生成器是将要由新的被强调的生成器命令生成的被强调的生成器。在本发明的一个实施方式中,新的被强调的生成器命令可以响应于各种情况而执行。下面的表3标识根据本发明的一个实施方式的各种情况和传递的参数。
表3
情况 | 调用器生成器 | 调用的生成器(如果不存在就被创建) | 调用类型 | 链接模式 | 依赖性确定生成器引用 | 场景 |
感兴趣生成器 | N/A | 被创建的感兴趣生成器 | 感兴趣的 | N/A | N/A | 有或空 |
直接(非订阅) | 父 | 子 | 直接 | 调用器父生成器链接模式 | 提供依赖性的依赖性确定生成器 | 调用器父生成器的场景 |
粘附订阅 | 子 | 父(来自被创建的父生成器的粘附订阅标准的父类和方法关键字;已有的子调用器生成器的实例关键字) | 粘附 | 调用的父生成器(来自被创建的父生成器的粘附订阅标准的增量ID) | 提供依赖性的依赖性确定生成器 | 调用器子生成器的场景 |
覆盖 | N/A | 被覆盖的生成器 | 被覆盖 | N/A | N/A | 有或空 |
非订阅向上声明 | 子 | 父 | 非订阅向上声明 | 调用的父生成器链接模式 | 提供依赖性的依赖性确定生成器 | 调用器子生成器的场景 |
在块1605,响应于新的被强调的生成器命令,运行时检查被强调的生成器(即具有生成器关键字和目标场景关键字的生成器)是否已经存在。在块1670,如果被强调的生成器已经存在,且如果生成器由于依赖性而被调用,则运行时将生成器链接到生成器图形。否则,在块1601,如果被强调的生成器不存在,且如果生成器是感兴趣生成器,则运行时标识直接和间接被影响的生成器。块1601的细节在下面参考图34D被论述。然后运行时转向块1602来处理场景,在所述场景期间,运行时设定生成器创建的值。在一些实施方式中,生成器创建具有3个可能的值,称为不创建、创建新的以及克隆。块1602的细节在下面参考图34E而被论述。然后,在块1603,运行时检查生成器创建的值。如果生成器创建是创建新的,则运行时转向图34B中的入口点A。如果生成器创建是克隆,则运行时转向图34B中的入口点B。如果生成器创建是不创建,则运行时转向块1670。
在块1670之后,运行时在块1675检查生成器是否被覆盖、具有粘附订阅、或是向上声明的。如果是,运行时在块1680将生成器标记为未执行,并在块1665将生成器记录在执行开始日志中。然后,运行时在块1660返回生成器的执行状态。否则,如果生成器没有被覆盖,则运行时转向块1660以返回生成器的执行状态。
参考图34B,如果生成器创建时创建新的,则运行时转到入口点A。从入口点A,运行时转向块1610以调用新的实例模块。然后,运行时在块1615访问生成器的实例的类定义。之后,在块1620,运行时访问在类定义中的生成器的方法和生成器依赖性声明陈述。然后,在块1625,运行时将生成器添加到目标场景的生成器图形。之后,运行时转向块1604。
再参考图34A中的块1603,如果生成器创建是克隆,则运行时转向在图34B中的入口点B。从入口点B,运行时转向块1626以调用新的实例模块来实例化空的实例。然后,在块1627,运行时从具有生成器关键字和引用场景关键字的生成器复制信息,以填充空的实例。接下来,在块1628,运行时克隆具有被填充的实例的生成器。然后在块1629,运行时将具有目标场景关键字的被克隆的生成器添加到生成器图形中。之后,运行时转向块1604。
在块1604,如果生成器在场景的影响列表中,则运行时处理影响。块1604的细节在下面参考图34G被论述。然后,在块1630,对于每一个注册的订阅,运行时处理订阅过滤标准。在块1635,如果生成器由于依赖性而被调用,则运行时将生成器链接到生成器图形。然后,运行时转向入口点C。
参考图34C,运行时从入口点C转向块1640以将生成器标记为未执行。在一些实施方式中,在块1690,运行时可以接收生成器不覆盖命令。响应于生成器不覆盖命令,在块1695,运行时可以将生成器标记为没有被覆盖,然后转向块1640。
从块1640,运行时转向块1645以检查生成器是否具有任何依赖性以及是否没有被覆盖。如果生成器不具有依赖性且没有被覆盖,则运行时转向入口点D以返回在图34A中的块1665。否则,运行时转向块1650。在块1650,对于现在将要被确定的依赖性声明中的每一个依赖性,运行时确定生成器的数量并为每一个生成器调用新的被强调的生成器命令。在块1655,如果所有相关生成器存在并已经被执行,则运行时将生成器添加到执行开始日志,并转向入口点E以返回在图34A中的块1660。
图34D示出了根据本发明的一个实施方式的块1601的被扩展的流程图。在块3405中,运行时首先使用场景跟踪结构和场景关键字来定位影响路径跟踪结构。然后运行时在块3410确定在场景跟踪结构中的影响路径跟踪结构是否已经被实例化。如果影响路径跟踪结构已经被实例化,则直接和间接被影响的生成器已经被标识。因此,运行时转向块3419以结束流程。否则,运行时转向块3412。在块3412,影响路径跟踪结构被实例化并存储在场景跟踪结构中。然后,运行时转向块3413。对于在场景定义中的每个直接被影响的生成器,运行时查找在场景定义中的具有相应生成器关键字和引用场景关键字的生成器。在块3415,运行时确定该生成器是否存在。如果所述生成器存在,则运行时在块3417将生成器和所有前身一起添加到影响路径跟踪结构中,然后转向块3418。否则,运行时跳过块3417并转向块3418。在块3418,运行时检查在场景定义中是否还有直接被影响的生成器。如果有,则运行时返回块3413以重复上述操作。否则,运行时转向块3419以结束流程。
图34E示出了根据本发明的一个实施方式的块1602的被扩展的流程图。在块3420,运行时检查影响路径跟踪结构是否为空。如果影响路径跟踪结构为空,则运行时转向块3429。否则,在块3422,运行时检查具有引用场景关键字的生成器是否在影响路径跟踪结构中。如果是,则运行时在块3424将生成器创建设定为“克隆”。否则,在块3426,运行时检查生成器是否存在于具有引用场景的生成器图形中。如果存在,则运行时在块3428将生成器创建设定为“不创建”。这是一种优化,使得仅复制用于目标场景的生成器图形的一部分。没有被创建或克隆的生成器可以从引用场景被链接到用于目标场景的子图形。否则,运行时转向块3429。在块3429,运行时将生成器创建设定为“创建新的”。
图34F示出了根据本发明的一个实施方式的在图34A中的块1605的被扩展的图。在块1605,运行时检查被强调的生成器是否已经存在。在一些实施方式中,运行时检查类关键字、实例关键字、方法关键字以及场景关键字的组合是否已经存在于生成器表格中。如果所述组合存在,则被强调的生成器存在。否则,被强调的生成器不存在。
图34G示出了根据本发明的一个实施方式的块1604的被扩展的流程图。在一些实施方式中,有相应的专用接口来获得和设定生成器输出。在块3430,运行时检查对生成器的影响是否是相对的。如果不是,则对生成器的影响是绝对的。因此,在块3436,运行时将来自场景的影响列表的输出实例指派为在目标场景中的生成器的新的输出。然后运行时转向块3440。否则,对生成器的影响是相对的,运行时在块3432获得生成器的当前输出。然后,在块3434,运行时使用在场景的影响列表中的当前输出以及相应的转换方法和相应的转换参数来生成生成器的新的输出。接下来,运行时转向块3440。
在一些实施方式中,运行时可以通过将扩展值添加到当前输出来生成新的输出。可替换地,运行时可以通过将当前输出与因数值相乘来生成新的输出。
在块3440,运行时设定在生成器输出缓存中和在实例中(如果输出是字段)生成的新的输出值的生成器的输出。然后在块3442,运行时将生成器标记为没有被覆盖,并转向在图34B中的块1630。
图35A-图35B是示出了根据本发明的一个实施方式的被强调的生成器图形执行流的流程图。在块2200,运行时基于在执行开始日志上的生成器来选择要执行的一组候选生成器为当前组的候选生成器。然后,在块2205,运行时从准备被执行的当前组的候选生成器中选择生成器的子集为当前组的就绪生成器。对于在当前组的就绪生成器中的每个生成器,运行时在块2210检查该生成器的类型。在一个实施方式中,有3种类型的生成器,称为标准生成器、被强调的生成器产生生成器以及依赖性声明生成器。
如果生成器是标准生成器,则运行时转向块2215以执行该生成器。然后在块2220,运行时将具有对所执行的生成器的吸收订阅依赖性的任何父体标记为未完成,并转向入口点A。
如果生成器是被强调的生成器产生生成器,则运行时转向块3710以执行该生成器。然后在块3720,运行时将在所执行的生成器上的具有吸收订阅依赖性的任意父体标记为未完成。接下来,在块3730,运行时调用用于所发现的生成器的新的被强调的生成器命令、日志,并处理订阅。然后在块3740,运行时基于最新添加到执行开始日志中的生成器来添加到一组候选生成器。然后,运行时转向入口点A。
在块2225,如果生成器是依赖性声明生成器,则运行时准备依赖性确定生成器。然后,在块2230,运行时执行依赖性确定生成器以解析要被解析的任何未解析的依赖性。然后,在块2235,运行时调用用于所发现的生成器的新的被强调的生成器命令、日志,并处理订阅。在块2240,运行时将最新添加到执行开始日志中的生成器添加到一组候选生成器中。然后,运行时转向入口点A。
参考图35B,运行时从入口点A转向块2245。在块2245,运行时将生成器标记为已执行并必要地更新生成器输出缓存和实例缓存。此外,运行时将任何父生成器添加到要被执行的一组候选生成器并标记为未执行。运行时还从当前组的候选和就绪生成器中移除已执行的生成器。运行时从块2245转向块2250以检查一组候选生成器是否为空。如果不为空,运行时通过入口点B转向块2205以重复上述流程。如果一组候选生成器为空,则运行时转向块2255以检查所有订阅是否已经完成。如果没有完成,则运行时在块2260处理未完成的吸收订阅生成器,然后通过入口点B返回块2205。否则,所有订阅已经完成,运行时转向块2248。在块2248,场景跟踪结构被扫描,所有实例路径跟踪结构被释放。然后,运行时转向块2265以结束流程。
过程语言
如上所述,正确编写的过程语言、非反射式面向对象的语言以及非反射式基于对象的语言代码可以被转换为反射式面向对象的语言代码。通过示例的方式,类可以通过数据结构和一组静态函数来仿真,所述静态函数以对于数据结构的实例的指针作为第一参数。这些函数是构造器和析构器。构造器在数据结构的指针的分配之后被运行时调用并提供数据结构中的元素的默认状态;析构器在数据结构的指针的释放之前被运行时调用。每个类具有通过文件的描述,包括: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 (26)
1、一种用于执行以面向对象的代码所编写的应用程序的计算机执行方法,该方法包括:
实例化具有当前感兴趣的输出的生成器,其中所述面向对象的代码包括方法和生成器依赖性声明,其中用于给定方法的所述生成器依赖性声明标识一组零个或多个生成器,其中所述生成器是运行时可实例化的结构,该结构包括至少一个实例和与该实例相关联的方法;
响应于所述实例化,添加感兴趣生成器作为第一生成器图形的一部分;
尝试基于已经在所述第一生成器图形中的生成器的方法的生成器依赖性声明通过链接以及在需要时实例化其他生成器来自动生成所述第一生成器图形的余项;以及
在保留所述第一生成器图形中的生成器的已有的状态和已有的输出的情况下,用所述应用程序中的改变来模拟所述应用程序。
2、根据权利要求1所述的方法,其中多个生成器基于在所述第一生成器图形中的生成器之间的依赖性而相互连接,其中所述应用程序的第一生成器图形、已有的状态以及已有的输出对应于第一场景,其中所述改变包括所述应用程序的一个或多个直接被影响的生成器的输出的改变。
3、根据权利要求2所述的方法,该方法还包括:
接收场景信息和关于所述一个或多个直接被影响的生成器的输出的改变的信息,所述场景信息包括标识所述第一场景的引用场景关键字、标识目标场景的目标场景关键字以及对影响列表的引用,所述影响列表包含用于所述目标场景的一个或多个直接被影响的生成器的一个或多个生成器关键字的集合;以及
使用所述场景信息来创建第二场景。
4、根据权利要求3所述的方法,其中创建所述第二场景包括:
使用所述第一生成器图形来确定在所述第一生成器图形中的生成器中的哪个生成器被所述一个或多个直接被影响的生成器的输出所影响;以及
将所述被影响的生成器记录在影响生成器跟踪结构中。
5、根据权利要求4所述的方法,其中创建所述第二场景包括:
创建第二生成器图形,该第二生成器图形至少具有所述感兴趣生成器、所述一个或多个直接被影响的生成器以及在所述感兴趣生成器所依赖的影响生成器跟踪结构中的任何被影响的生成器的副本;以及
根据所述影响列表中的信息来改变所述一个或多个直接被影响的生成器的副本的输出。
6、根据权利要求5所述的方法,其中根据所述影响列表中的信息来改变所述一个或多个直接被影响的生成器的副本的输出包括:
用由所述影响列表中的信息所规定的预定值来覆盖在所述第二生成器图形中的一个或多个直接被影响的生成器的副本的输出。
7、根据权利要求5所述的方法,其中根据所述影响列表中的信息来改变所述一个或多个直接被影响的生成器的副本的输出包括:
确定在所述第一场景中的生成器的输出;以及
使用在所述第一场景中的生成器的输出以及在所述影响列表中的信息来生成在所述第二场景中的直接被影响的生成器的副本的输出。
8、根据权利要求5所述的方法,其中创建所述第二生成器图形包括:
将在所述第一生成器图形中的一个或多个生成器链接到所述第二生成器图形,其中所述一个或多个生成器独立于所述直接被影响的生成器。
9、根据权利要求5所述的方法,其中创建所述第二生成器图形包括:
使用所述第一生成器图形来克隆所述感兴趣生成器和所述感兴趣生成器所依赖的任何被影响的生成器。
10、根据权利要求5所述的方法,其中创建所述第二生成器图形包括:
根据所述感兴趣生成器以及所述感兴趣生成器所依赖的被影响的生成器中的每一个生成器的方法的方法定义和依赖性声明来创建所述感兴趣生成器以及所述感兴趣生成器所依赖的被影响的生成器。
11、根据权利要求5所述的方法,该方法还包括:
在保存所述感兴趣生成器、所述一个或多个直接被影响的生成器以及用于所述第一场景的被影响的生成器的已有的输出的情况下,使用所述一个或多个直接被影响的生成器的副本的改变后的输出来执行所述第二场景中的应用程序,以确定所述第二生成器图形中的感兴趣生成器的副本的输出;
在保留缓存中的用于所述第一场景的感兴趣生成器的已有的输出的情况下,将用于所述第二场景的感兴趣生成器的副本的输出存储在所述缓存中;
在保留所述缓存中的用于所述第一场景的一个或多个直接被影响的生成器的已有的输出的情况下,将用于所述第二场景的一个或多个直接被影响的生成器的副本的改变后的输出存储在所述缓存中;以及
在保留所述缓存中的用于第一场景的中间生成器的已有的输出的情况下,将用于所述第二场景的中间生成器的副本的输出存储在所述缓存中,所述中间生成器在所述感兴趣生成器与所述一个或多个直接被影响的生成器之间的路径上。
12、根据权利要求11所述的方法,该方法还包括:
使用用于所述第二场景的感兴趣生成器的副本的输出和用于所述第一场景的感兴趣生成器的输出来自动确定从所述第一场景到所述第二场景的感兴趣生成器的输出的导数。
13、根据权利要求12所述的方法,该方法还包括:
使用从所述第一场景到所述第二场景的感兴趣生成器的输出的导数来自动地且递归地确定N阶导数和交叉导数中的至少一个,其中N是大于1的整数。
14、根据权利要求5所述的方法,其中模拟所述应用程序包括执行被强调的生成器产生生成器以动态地创建在所述第二生成器图形中的至少一个生成器。
15、一种系统,该系统包括:
运行时,用于运行具有方法的生成器依赖性声明的面向对象的源代码,其中,生成器是运行时可实例化的结构,该结构至少包括实例和与该实例相关联的方法,其中用于给定方法的每一个生成器依赖性声明标识一组零个或多个生成器,且其中所述运行时包括:
新的场景模块,用于接收目标场景的场景信息以及响应于场景实例化命令来实例化所述目标场景;
自动化的被强调的生成器图形生成模块,该模块耦合到所述新的场景模块以接收当前所选择的具有感兴趣输出的生成器,并使用所述场景信息来建立用于所述目标场景的生成器图形,该生成器图形包括当前所选择的生成器、一个或多个具有根据所述场景信息而在所述目标场景中改变的输出的生成器、以及在一个或多个生成器与所述当前所选择的生成器之间的中间生成器中的每一个生成器的副本;以及
自动化的被强调的生成器图形执行模块,该模块耦合到所述自动化的被强调的生成器图形生成模块以接收用于所述目标场景的生成器图形中的一个或多个生成器的改变后的输出,并对用于所述目标场景的生成器图形的生成器应用所述改变后的输出以确定所述目标场景中的当前所选择的感兴趣生成器的输出。
16、根据权利要求15所述的系统,其中所述场景信息包括引用场景关键字、目标场景关键字、对直接被影响的生成器的列表的引用以及与直接被影响的生成器中的每一个生成器相关联的指示符,该指示符用于指示相应的直接被影响的生成器的输出是被改变为预定值还是从所述相应的直接被影响的生成器的已有的输出中被生成。
17、根据权利要求16所述的系统,其中所述运行时还包括:
耦合到所述自动化的被强调的生成器图形生成模块的覆盖生成器输出模块,用于用相应的预定值来覆盖所述直接被影响的生成器中的每一个生成器的输出。
18、根据权利要求15所述的系统,其中所述运行时还包括:
耦合到所述自动化的被强调的生成器图形生成模块的生成器图形结构,用于在不重写任何被存储在其中的已有的生成器图形的情况下,存储用于所述目标场景的生成器图形,其中所述生成器图形结构还包括生成器输出缓存结构,该生成器输出缓存结构用于存储当前所选择的感兴趣生成器的输出、所述中间生成器的输出、以及用于所述目标场景的一个或多个生成器的改变后的输出,而不重写存储在其中的当前所选择的感兴趣生成器、中间生成器以及一个或多个生成器的任何已有的输出。
19、根据权利要求15所述的系统,其中所述运行时还包括:
耦合到所述新的场景模块的场景跟踪结构,其中所述新的场景模块可操作用于通过将所述场景信息添加到所述场景跟踪结构来实例化所述目标场景。
20、根据权利要求15所述的系统,该系统还包括:
第二运行时,该第二运行时可操作用于装载和实例化类、调用方法以及对所述类和所述方法中的至少一者执行自省,其中所述第二运行时在逻辑上与所述运行时分离。
21、根据权利要求15所述的系统,其中所述运行时还可操作用于装载和实例化类、调用方法以及对所述类和所述方法中的至少一者执行自省。
22、根据权利要求15所述的系统,该系统还包括操作系统,其中所述运行时被集成在所述操作系统内。
23、一种提供面向对象的源代码的机器可读介质,该机器可读介质包括:
多个类定义,每一个类定义包括:一组一个或多个字段、一组一个或多个方法以及用于所述一组方法中的每一个方法的生成器依赖性声明,其中用于所述方法中的给定的方法的生成器依赖性声明在运行时被使用以标识一组零个或多个生成器,其中所述生成器是运行时可实例化的结构,该结构包括多个类中的至少一个类的实例以及与该实例相关联的方法;以及
其中,所述多个类定义中的第一个类定义定义了具有一个或多个被强调的生成器生成方法的类,所述方法用于生成一组一个或多个被强调的生成器,所述一个或多个被强调的生成器生成方法中的每一个方法包括用于标识感兴趣生成器和定义目标场景的代码,从而所述运行时可操作用于执行所述方法来评估对用于所述目标场景的感兴趣生成器的影响。
24、根据权利要求23所述的机器可读介质,其中所述一个或多个被强调的生成器生成方法中的每一个方法规定了引用场景关键字、目标场景关键字、对直接被影响的生成器的列表的引用以及与所述直接被影响的生成器中的每一个生成器相关联的指示符,该指示符用于指示相应的直接被影响的生成器的输出是被改变为预定值还是从相应的直接被影响的生成器的已有的输出中被生成。
25、根据权利要求23所述的机器可读介质,其中所述一个或多个被强调的生成器生成方法中的每一个方法当被所述运行时执行时,使得所述运行时在所述目标场景中创建所述一个或多个被强调的生成器,并将所述被强调的生成器添加到所述目标场景的生成器图形中。
26、根据权利要求25所述的机器可读介质,其中所述一个或多个被强调的生成器中的每一个生成器包括用于标识所述生成器的生成器关键字和用于标识场景的场景关键字。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/607,199 US8332827B2 (en) | 2006-12-01 | 2006-12-01 | Produce graph oriented programming framework with scenario support |
US11/607,199 | 2006-12-01 | ||
PCT/EP2007/010410 WO2008064902A2 (en) | 2006-12-01 | 2007-11-30 | Producer graph oriented programming framework with scenario support |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101601012A true CN101601012A (zh) | 2009-12-09 |
CN101601012B CN101601012B (zh) | 2014-03-19 |
Family
ID=39358358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200780050596.4A Active CN101601012B (zh) | 2006-12-01 | 2007-11-30 | 具有场景支持的面向生成器图的编程框架 |
Country Status (9)
Country | Link |
---|---|
US (2) | US8332827B2 (zh) |
EP (1) | EP1958062B1 (zh) |
JP (1) | JP5354603B2 (zh) |
CN (1) | CN101601012B (zh) |
AT (1) | ATE435453T1 (zh) |
DE (1) | DE602007001443D1 (zh) |
ES (1) | ES2327797T3 (zh) |
RU (1) | RU2438161C2 (zh) |
WO (1) | WO2008064902A2 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105739983A (zh) * | 2016-01-29 | 2016-07-06 | 腾讯科技(深圳)有限公司 | 脚本程序编辑装置及其实现方法 |
CN105867907A (zh) * | 2016-03-23 | 2016-08-17 | 沈阳师范大学 | 去除业务耦合性的JSS多层Web开发框架设计方法 |
CN107111490A (zh) * | 2014-12-19 | 2017-08-29 | 谢尔盖·阿纳托利耶维奇·格瑞斯尼 | 功能约束数据的管理系统和方法 |
US10481877B2 (en) | 2006-12-01 | 2019-11-19 | Murex S.A.S. | Producer graph oriented programming and execution |
CN111857683A (zh) * | 2020-07-01 | 2020-10-30 | 北京黄金管家科技发展有限公司 | Java高效编程系统 |
Families Citing this family (44)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050071135A1 (en) * | 2003-09-30 | 2005-03-31 | Vredenburgh David W. | Knowledge management system for computer-aided design modeling |
US8751950B2 (en) | 2004-08-17 | 2014-06-10 | Ice Edge Business Solutions Ltd. | Capturing a user's intent in design software |
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 |
US7865872B2 (en) * | 2006-12-01 | 2011-01-04 | Murex S.A.S. | Producer graph oriented programming framework with undo, redo, and abort execution support |
US8370812B2 (en) * | 2007-04-02 | 2013-02-05 | International Business Machines Corporation | Method and system for automatically assembling processing graphs in information processing systems |
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 |
CN101689111A (zh) * | 2007-04-03 | 2010-03-31 | Ldra技术公司 | 软件需求验证的自动化管理 |
US10248915B2 (en) * | 2008-03-07 | 2019-04-02 | International Business Machines Corporation | Risk profiling for enterprise risk management |
EP2252951B1 (en) | 2008-03-11 | 2021-05-05 | Ice Edge Business Solutions, Ltd. | Automatically creating and modifying furniture layouts in design software |
US9245064B2 (en) | 2009-11-24 | 2016-01-26 | Ice Edge Business Solutions | Securely sharing design renderings over a network |
US8595709B2 (en) * | 2009-12-10 | 2013-11-26 | Microsoft Corporation | Building an application call graph from multiple sources |
US20120117546A1 (en) * | 2010-11-08 | 2012-05-10 | International Business Machines Corporation | Run-time Module Interdependency Verification |
US8897900B2 (en) * | 2011-03-18 | 2014-11-25 | Rockwell Automation Technologies, Inc. | Graphical language for optimization and use |
US9230358B2 (en) * | 2011-03-31 | 2016-01-05 | International Business Machines Corporation | Visual connectivity of widgets using event propagation |
EP2718861A4 (en) | 2011-06-11 | 2015-03-18 | Dirtt Environmental Solutions | AUTOMATIC REUSE OF STRUCTURAL COMPONENTS |
US9292422B2 (en) | 2012-10-12 | 2016-03-22 | Vmware, Inc. | Scheduled software item testing |
US8839202B2 (en) * | 2012-10-12 | 2014-09-16 | Vmware, Inc. | Test environment managed within tests |
US9069902B2 (en) | 2012-10-12 | 2015-06-30 | Vmware, Inc. | Software test automation |
US9684587B2 (en) | 2012-10-12 | 2017-06-20 | Vmware, Inc. | Test creation with execution |
US8949794B2 (en) | 2012-10-12 | 2015-02-03 | Vmware, Inc. | Binding a software item to a plain english control name |
US10387294B2 (en) | 2012-10-12 | 2019-08-20 | Vmware, Inc. | Altering a test |
US9292416B2 (en) | 2012-10-12 | 2016-03-22 | Vmware, Inc. | Software development kit testing |
US10067858B2 (en) | 2012-10-12 | 2018-09-04 | Vmware, Inc. | Cloud-based software testing |
US8839201B2 (en) | 2012-10-12 | 2014-09-16 | Vmware, Inc. | Capturing test data associated with error conditions in software item testing |
US9201649B2 (en) * | 2012-10-26 | 2015-12-01 | Inforsys Limited | Systems and methods for estimating an impact of changing a source file in a software |
SG11201609800SA (en) | 2012-12-10 | 2016-12-29 | Dirtt Environmental Solutions | Efficient lighting effects in design software |
EP2948929B1 (en) | 2013-01-25 | 2021-11-10 | Dirtt Environmental Solutions, Ltd. | Real-time depth of field effects with design software |
CA2817497C (en) | 2013-01-31 | 2021-05-25 | Dirtt Environmental Solutions, Ltd. | Method and system for efficient modeling of specular reflection |
JP5707430B2 (ja) * | 2013-01-31 | 2015-04-30 | 京セラドキュメントソリューションズ株式会社 | アプリケーション開発プログラム |
CA2817402C (en) | 2013-01-31 | 2021-03-16 | Dirtt Environmental Solutions, Ltd. | Visual distortion effects through translucent structures in design software |
US9292405B2 (en) | 2013-03-08 | 2016-03-22 | Sap Se | HANA based multiple scenario simulation enabling automated decision making for complex business processes |
US9389986B2 (en) * | 2013-05-06 | 2016-07-12 | Microsoft Technology Licensing, Llc | Identifying impacted tests from statically collected data |
CA2883079C (en) | 2013-05-31 | 2021-10-26 | Ice Edge Business Solutions Ltd. | Associating computer-executable objects with three-dimensional spaces within an architectural design environment |
RU2656580C9 (ru) * | 2014-01-30 | 2020-01-22 | Общество с ограниченной ответственностью "Аби Девелопмент" | Определение порядка инициализации статических объектов |
US10922450B2 (en) | 2014-06-09 | 2021-02-16 | Dirtt Environmental Solutions, Ltd. | Associating computer-executable objects with timber frames within an architectural design environment |
US9465723B2 (en) * | 2014-10-27 | 2016-10-11 | Software Ag Usa, Inc. | Systems and/or methods for monitoring live software |
US20170090890A1 (en) * | 2015-09-30 | 2017-03-30 | Semmle Limited | Virtual compositions |
CN109644153B (zh) * | 2016-04-12 | 2020-10-13 | 伽德诺克斯信息技术有限公司 | 具有被配置为实现安全锁定的相关设备的特别编程的计算系统及其使用方法 |
US10146530B1 (en) | 2017-07-12 | 2018-12-04 | International Business Machines Corporation | Simulating and evaluating code branch merge |
US11651128B2 (en) * | 2019-03-25 | 2023-05-16 | Aurora Labs Ltd. | Verifying integrity of controller software updates |
US11113030B1 (en) * | 2019-05-23 | 2021-09-07 | Xilinx, Inc. | Constraints for applications in a heterogeneous programming environment |
US11776060B2 (en) | 2019-06-03 | 2023-10-03 | Cerebri AI Inc. | Object-oriented machine learning governance |
Family Cites Families (105)
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 |
US5481740A (en) | 1986-04-14 | 1996-01-02 | National Instruments Corporation | Method and apparatus for providing autoprobe features in a graphical data flow diagram |
US5481741A (en) | 1986-04-14 | 1996-01-02 | National Instruments Corporation | Method and apparatus for providing attribute nodes in a graphical data flow environment |
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 |
DE69126066T2 (de) | 1990-06-29 | 1997-09-25 | Oracle Corp | Verfahren und Gerät zur Optimierung des Logbuchaufhebungsgebrauchs |
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 |
US6233733B1 (en) | 1997-09-30 | 2001-05-15 | Sun Microsystems, Inc. | Method for generating a Java bytecode data flow graph |
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 |
AU2001253712A1 (en) | 2000-04-21 | 2001-11-07 | 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 |
AU2002243335A1 (en) | 2000-10-20 | 2002-06-18 | Polexis, Inc. | Extensible information system (xis) |
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 |
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 |
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 |
US7444287B2 (en) * | 2004-07-01 | 2008-10-28 | Emc Corporation | Efficient monitoring system and method |
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 |
WO2006031640A2 (en) | 2004-09-10 | 2006-03-23 | Graphlogic Inc. | Object process graph application development system |
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 |
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 |
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 |
US8191052B2 (en) | 2006-12-01 | 2012-05-29 | Murex S.A.S. | Producer graph oriented programming and execution |
US8332827B2 (en) | 2006-12-01 | 2012-12-11 | Murex S.A.S. | Produce graph oriented programming framework with scenario support |
-
2006
- 2006-12-01 US US11/607,199 patent/US8332827B2/en active Active
-
2007
- 2007-11-30 DE DE602007001443T patent/DE602007001443D1/de active Active
- 2007-11-30 RU RU2009125011/08A patent/RU2438161C2/ru active
- 2007-11-30 CN CN200780050596.4A patent/CN101601012B/zh active Active
- 2007-11-30 EP EP07856313A patent/EP1958062B1/en active Active
- 2007-11-30 JP JP2009538646A patent/JP5354603B2/ja active Active
- 2007-11-30 WO PCT/EP2007/010410 patent/WO2008064902A2/en active Application Filing
- 2007-11-30 ES ES07856313T patent/ES2327797T3/es active Active
- 2007-11-30 AT AT07856313T patent/ATE435453T1/de not_active IP Right Cessation
-
2012
- 2012-12-10 US US13/710,372 patent/US9201766B2/en active Active
Cited By (6)
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 |
CN107111490A (zh) * | 2014-12-19 | 2017-08-29 | 谢尔盖·阿纳托利耶维奇·格瑞斯尼 | 功能约束数据的管理系统和方法 |
CN105739983A (zh) * | 2016-01-29 | 2016-07-06 | 腾讯科技(深圳)有限公司 | 脚本程序编辑装置及其实现方法 |
CN105739983B (zh) * | 2016-01-29 | 2019-03-15 | 腾讯科技(深圳)有限公司 | 脚本程序编辑装置及其实现方法 |
CN105867907A (zh) * | 2016-03-23 | 2016-08-17 | 沈阳师范大学 | 去除业务耦合性的JSS多层Web开发框架设计方法 |
CN111857683A (zh) * | 2020-07-01 | 2020-10-30 | 北京黄金管家科技发展有限公司 | Java高效编程系统 |
Also Published As
Publication number | Publication date |
---|---|
EP1958062B1 (en) | 2009-07-01 |
RU2009125011A (ru) | 2011-01-10 |
WO2008064902A3 (en) | 2008-07-17 |
JP5354603B2 (ja) | 2013-11-27 |
ATE435453T1 (de) | 2009-07-15 |
JP2010511235A (ja) | 2010-04-08 |
WO2008064902A2 (en) | 2008-06-05 |
DE602007001443D1 (de) | 2009-08-13 |
ES2327797T3 (es) | 2009-11-03 |
RU2438161C2 (ru) | 2011-12-27 |
US20080134152A1 (en) | 2008-06-05 |
EP1958062A2 (en) | 2008-08-20 |
US20130104109A1 (en) | 2013-04-25 |
CN101601012B (zh) | 2014-03-19 |
US8332827B2 (en) | 2012-12-11 |
US9201766B2 (en) | 2015-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101601012B (zh) | 具有场景支持的面向生成器图的编程框架 | |
CN101617292B (zh) | 面向生成器图的编程和执行 | |
CN101589366B (zh) | 面向生成器图的编程框架中的并行化和植入 | |
US11487529B2 (en) | User interface that integrates plural client portals in plural user interface portions through sharing of one or more log records | |
US7694272B2 (en) | Method, a language and a system for the definition and implementation of software solutions by using a visualizable computer executable modeling language | |
US8819621B2 (en) | System and method for automated re-architectureing of legacy systems using object oriented language | |
CN107851001B (zh) | 用于基于设计规格显示软件型应用程序的计算机应用的方法 | |
CN112199086A (zh) | 自动编程控制系统、方法、装置、电子设备及存储介质 | |
CN105278945A (zh) | 程序可视化装置、程序可视化方法及程序可视化程序 | |
US7685155B2 (en) | System and method of providing and utilizing an object schema to facilitate mapping between disparate domains | |
US8707260B2 (en) | Resolving interdependencies between heterogeneous artifacts in a software system | |
US7505991B2 (en) | Semantic model development and deployment | |
US20100161676A1 (en) | Lifecycle management and consistency checking of object models using application platform tools | |
US20020199029A1 (en) | Method for associating data bearing objects with user interface objects | |
Mukhtar et al. | WSDMDA: An enhanced model driven web engineering methodology | |
Panas et al. | Towards the Unified Recovery Architecture for Reverse Engineering. | |
van den Heuvel et al. | A methodology to support web-services development using legacy systems | |
Dolog et al. | Towards variability modelling for reuse in hypermedia engineering | |
Folkegård et al. | Dynamic code generation for realtime shaders | |
SRAI et al. | INTEGRATION OF THE MDA APPROACH IN DOCUMENT-ORIENTED NOSQL DATABASES, GENERATION OF A PSM MODEL FROM A PIM MODEL | |
Labič et al. | Rapid ontology development | |
Golobisky et al. | Fundamentals for the Automation of Object-Relationa Database Design | |
CN114924721A (zh) | 代码生成方法、装置、计算机设备及存储介质 | |
Mossakowski et al. | Institution Independent Static Analysis forCasl | |
Delfmann et al. | Comprehensive Tool Support for Enterprise Modeling and Evaluation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |