CN100559346C - 用于实例化抽象类的系统和方法 - Google Patents
用于实例化抽象类的系统和方法 Download PDFInfo
- Publication number
- CN100559346C CN100559346C CNB2007101816568A CN200710181656A CN100559346C CN 100559346 C CN100559346 C CN 100559346C CN B2007101816568 A CNB2007101816568 A CN B2007101816568A CN 200710181656 A CN200710181656 A CN 200710181656A CN 100559346 C CN100559346 C CN 100559346C
- Authority
- CN
- China
- Prior art keywords
- class
- mapping
- metadata
- code
- comments
- 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.)
- Active
Links
Images
Classifications
-
- 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/445—Program loading or initiating
-
- 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
- G06F9/4492—Inheritance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
提供了用于实例化应用程序代码中的接口或抽象类的系统和方法。扩展了面向对象的编程语言,以便可以在应用程序代码中实例化接口和抽象类,无需指定具体类。定义了元数据,该元数据将应用程序代码中的每一个接口或抽象类实例化映射到由编译器在编译时或者由虚拟机在运行时使用的具体类。一旦根据元数据确定了适当的具体类,就利用常规的类加载器实例化类了。元数据可以例如作为单独的文件(如标记语言文件)来提供,也可以在应用程序代码等中,用虚拟机开关作为批注来进行定义。
Description
技术领域
本申请一般涉及改进的数据处理系统和方法。具体来说,本申请涉及用于实例化应用程序代码中的接口或抽象类的系统和方法。
背景技术
在面向对象的编程中,使用类来对相关变量和函数进行分组。类描述了封装的实例变量和方法(函数)的集合,可能具有那些类型的实现方式以及可以用来创建该类的对象的构造函数。
类是包括特定类型的编译时元数据的内聚数据包。类描述了对象,即,类的实例,应该遵循的规则。类指定了类的每一个实例(即,对象)包含的数据的结构以及操纵对象的数据以及执行任务的方法。方法是具有特殊属性的函数,它可以访问存储在对象中的数据。
类的实例,即,对象,将共同地具有某些方面,即,特征、属性。利用类进行编程的其中一个优点是,某一个特定类的所有实例都将遵循它们实例化的类的所定义的行为。
类可以“实现”多个接口,每一个接口都指定必须在该类中定义的一个或多个抽象方法签名(方法的名称和类型以及其参数)。与继承实际代码(以及命名和逻辑冲突)的多继承不同,接口允许定义实现了接口的所有类应该能够满足的行为接口(方法)。
接口一种类型的抽象类。抽象类,或抽象基类(ABC),是被设计只作为父类而且可以从中导出子类,并且其本身不适合于实例化的类。另一方面,具体类,是可以为其创建实例(即,对象)的类。抽象类常常用于代表抽象概念或实体。然后,抽象类的不完整的特征由一组添加了遗漏片段(missing piece)的不同变化的同辈子类来共享。
当设计应用程序的架构并开发应用程序时,接口和抽象类允许分离顾虑和互操作性。当生成这样的应用程序时,必须在具体类中实现接口和抽象类。接口和抽象类的这样的实现要求在具体类中进行接口或抽象类实现的“硬编码”。结果,如果接口或抽象类实现将要被替换,则需要进行源代码更新和重新编译。
请看下列示例,提供了AudioDevice接口,并提供了实现AudioDevice接口的两个具体类“Radio”和“MP3Player”:
public interface AudioDevice{
public void play()throws playbackException;
public void stop()throws discontinuationException;
}
public class Radio implements AudioDevice{
public void play()throws playbackException{...}
public void stop()throws discontinuationException{...}
}
public class MP3Player implements AudioDevice{
public void play()throws playbackException{...}
public void stop()throws discontinuationException{...}
public void shuf f le(){...}
再请看下列应用程序源代码的片断:
[36]AudioDevice myStereo=new MP3Player();
[37]myStereo.play();
…
[52]myStereo.stop();
…
如示例所示,对AudioDevice接口的实例化要求在实现该接口的具体类的应用程序源代码中说明。结果,如果程序员以后希望切换到AudioDevice接口的替代的实现方式,程序员必须修改应用程序源代码本身,才能更改接口的具体类实现方式。例如,如果将使用新的MP3PDA组合设备,则必须提供MP3PDA组合设备的新的具体类,必须按如下方式修改应用程序源代码,以使用新的MP3PDA具体类来实现AudioDevice接口:
[36]AudioDevice myStereo=new MP3PDA();
甚至只是单个应用程序源代码的更改,如上面的例子,仍要求新开发应用程序源代码并重新编译应用程序源代码。这样的开发和重新编译需要花费时间、精力以及资源才能实现。考虑到可能有成千上万行应用程序源代码的现代的应用程序,这会更加麻烦。
发明内容
说明性实施例提供了用于实例化应用程序代码中的接口或抽象类的系统和方法。利用说明性实施例的机制,扩展了面向对象的编程语言,以便可以在应用程序代码中实例化接口和抽象类,无需指定具体类。定义了元数据,该元数据将应用程序代码中的每一个接口或抽象类实例化映射到由编译器在编译时或者由虚拟机在运行时使用的具体类。一旦根据元数据确定了适当的具体类,就利用常规的类加载器实例化类。元数据可以例如作为单独的文件(如标记语言文件)来提供,也可以在应用程序代码等等中,用虚拟机开关作为批注来进行定义。
在一个说明性实施例中,提供了用于实例化抽象类的方法。该方法可以包括提供映射元数据,用于将抽象类映射到实现所述抽象类的对应的具体类。该方法可以进一步包括在对应用程序代码进行处理的过程中遇到抽象类的实例化语句,该实例化语句不指定实现所述抽象类的具体类。该方法还可以包括基于映射元数据转换实例化语句,以指定实现所述抽象类的具体类。抽象类可以是接口类。映射元数据可以作为与应用程序代码分开的映射元数据文件数据结构的一部分来提供。
映射元数据可以作为应用程序代码内的批注来提供。批注可以在类级别、方法级别、声明级别或数据包级别中的某一个级别提供。
遇到和转换操作可以由编译器在应用程序代码的编译时执行。或者,遇到和转换操作可以由解释字节代码指令的虚拟机在运行时执行。
应用程序代码可以是应用程序源代码,映射元数据可以作为应用程序源代码中提供的批注元数据和作为单独的映射元数据文件中提供的映射元数据来提供。应用程序源代码中提供的批注元数据和单独的映射元数据文件中提供的映射元数据之间的冲突可以有利于单独的映射元数据文件中提供的映射元数据地被解决。
遇到和转换操作可以作为上下文检查的一部分由编译器来执行。此外,转换操作还可以包括检查单独的映射元数据文件中的具体类映射,以及如果在单独的元数据文件中没有找到具体类映射,则检查应用程序源代码批注中的具体类映射。可以使用在单独的映射元数据文件中或者应用程序源代码批注中找到的具体类映射来执行转换操作。
在其他说明性实施例中,提供了包括其中有计算机可读程序的计算机可用介质的计算机程序产品。当在计算设备上执行计算机可读程序时,使计算设备执行上文关于方法的说明性实施例中概述的各种操作以及操作的组合。
在再一个说明性实施例中,提供了一种系统。该系统可以包括处理器和耦接到处理器的存储器。存储器可以包括指令,当由处理器执行这些指令时,使处理器执行上文关于方法的说明性实施例中概述的各种操作以及操作的组合。
将在下面的对本发明的示范性实施例的详细描述中描述本发明的这些及其他特征和优点,或者,通过下面的对本发明的示范性实施例的详细描述,本发明的这些及其他特征和优点对于那些精通本技术的人员将变得显而易见。
附图说明
本发明,以及优选的使用模式,进一步的目的和优点,通过参考对说明性的实施例的详细描述并参考附图,将得到最好的理解,其中:
图1是其中可以实现说明性实施例的示范性方面的分布式数据处理环境的示范性方框图;
图2是其中可以实现说明性实施例的示范性方面的数据处理设备的示范性方框图;
图3是显示了在可以实现说明性实施例的计算机系统内操作的软件组件的关系的示范性方框图;
图4是显示了根据一个说明性实施例的在编译时将具体类绑定到接口和抽象类的示范性图形;
图5是显示了根据一个说明性实施例的在运行时将具体类绑定到接口和抽象类的示范性图形;
图6是概述了根据一个说明性实施例的在编译时将具体类绑定到接口和抽象类的示范性操作的流程图;以及
图7是概述了根据一个说明性实施例的在运行时将具体类绑定到接口和抽象类的示范性操作的流程图。
具体实施方式
说明性实施例提供了用于扩展面向对象的编程语言的功能的机制,以便能在应用程序代码中实例化接口和抽象类,而无需指定具体类。如此,说明性实施例的机制可以用来生成可以在分布式数据处理系统、独立数据处理系统等等中实现的应用程序代码。此外,分布式应用程序开发机制(其中,在通过一个或多个通信网络连接起来的不同数据处理设备上提供应用程序开发机制的各个部分),可以用于使用说明性实施例的机制来实际开发应用程序代码。
鉴于此,下面作为其中可以实现说明性实施例的一些方面的可能的数据处理环境的示范性附图,提供了图1-2。图1-2只是示范性的,而不声明或暗指关于其中可以实现说明性实施例的机制的数据处理系统的类型或配置的任何限制。在不偏离本发明的精神和范围的情况下,可以对所描述的数据处理系统进行许多修改。
现在参考附图,图1描述了其中可以实现说明性实施例的一些方面的示范性分布式数据处理系统的图形表示。分布式数据处理系统100可以包括其中可以实现说明性实施例的一些方面的计算机网络。分布式数据处理系统100包含至少一个网络102,该网络102是用来在分布式数据处理系统100内连接在一起的各种设备和计算机之间提供通信链路的媒介。网络102可以包括诸如有线、无线通信链路或光纤电缆之类的连接。
在所描述的示例中,服务器104和服务器106与存储单元108一起连接到网络102。此外,客户端110、112和114也连接到网络102。这些客户端110、112和114可以是,例如,个人计算机,网络计算机等等。在所描述的示例中,服务器104向客户端110,112,以及114提供诸如引导文件、操作系统映像和应用程序之类的数据。客户端110、112,和114是所描述的示例中的服务器104的客户端。分布式数据处理系统100可以包括额外的服务器、客户端,及没有显示的其他设备。
在所描述的示例中,分布式数据处理系统100是具有网络102的因特网,表示使用传输控制协议/因特网协议(TCP/IP)协议套件彼此进行通信的网络和网关的世界范围内的集合。因特网的核心是主节点或主机计算机之间的高速数据通信线路构成的主干网,包括成千上万的商业的、政府的、教育的及其他用于路由数据和消息的计算机系统。当然,还可以使分布式数据处理系统100包括许多不同类型的网络,例如,内部网、局域网(LAN)或广域网(WAN)等等。如上所述,图1只作为示例,而不对本发明的不同实施例的体系结构作出限制,因此,如图1所示的特定元件不应该被视为对于其中可以实现本发明的说明性实施例的环境作出限制。
现在参考图2,该图显示了其中可以实现说明性实施例的一些方面的示范性数据处理系统的方框图。数据处理系统200是诸如图1中的主机110之类的计算机的示例,其中,可以放置实现本发明的说明性实施例的过程的计算机可使用的代码或指令。
在所描述的示例中,数据处理系统200使用集线器体系结构,包括北桥和存储器控制器集线器(NB/MCH)202和南桥和输入/输出(I/O)控制器集线器(SB/ICH)204。处理单元206、主存储器208,以及图形处理器210连接到NB/MCH 202。图形处理器210可以通过加速图形端口(AGP)连接到NB/MCH 202。
在所描述的示例中,局域网(LAN)适配器212连接到SB/ICH 204。音频适配器216、键盘和鼠标适配器220、调制解调器222、只读存储器(ROM)224、硬盘驱动器(HDD)226、CD-ROM驱动器230、通用串行总线(USB)端口及其他通信端口232,以及PCI/PCIe设备234通过总线238和总线240连接到SB/ICH204。PCI/PCIe设备可以包括,例如,以太网适配器、插入式卡,以及用于笔记本电脑的PC卡。PCI使用卡总线控制器,而PCIe却不使用。ROM 224可以是,例如,闪存二进制输入/输出系统(BIOS)。
HDD 226和CD-ROM驱动器230通过总线240连接到SB/ICH 204。HDD 226和CD-ROM驱动器230可以使用,例如,集成驱动器电子电路(IDE)或串行高级技术连接(SATA)接口。超级I/O(SIO)设备236可以连接到SB/ICH 204。
操作系统在处理单元206上运行。操作系统协调图2中的数据处理系统200内的各种组件,并对它们进行控制。作为客户端,操作系统可以是诸如MicrosoftWindowsXP之类的市场上可买到的操作系统(Microsoft和Windows是Microsoft Corporation在美国、其他国家,或两者的商标)。诸如JavaTM编程系统之类的面向对象的编程系统可以与操作系统一起运行,并提供从在数据处理系统200上执行的JavaTM程序或应用程序对操作系统的调用(Java是Sun Microsystems,Inc.在美国、其他国家,或两者的商标)。
作为服务器,数据处理系统200可以是,例如,运行高级交互执行(AIX)操作系统或LINUX操作系统的IBMeServerTMpSeries计算机系统(eServer、pSeries和AIX是IBM公司在美国、其他国家,或两者的商标,而Linux是Linus Torvalds在美国、其他国家或两者的商标)。数据处理系统200可以是包括处理单元206中的多个处理器的对称多处理器(SMP)系统。或者,也可以使用单处理器系统。
操作系统、面向对象的编程系统和应用程序或程序的指令位于诸如硬盘驱动器326之类的存储设备上,并可以加载到主存储器208中以供处理单元206执行。本发明的说明性实施例的过程可以由处理单元206使用计算机可使用的程序代码来执行,程序代码可以位于诸如,例如,主存储器208、ROM 224之类的存储器或例如位于一个或多个外围设备226和230中。
诸如如图2所示的总线238或总线240之类的总线系统,可以包括一个或多个总线。当然,总线系统可以使用任何种类的通信结构或体系结构来实现,用于在连接到结构或体系结构的不同组件或设备之间进行数据传输。诸如图2的调制解调器222或网络适配器212之类的通信单元,可以包括一个或多个用于传输与接收数据的设备。存储器可以是,例如,主存储器208、ROM 224或诸如在图2中的NB/MCH 202中所看到的。
那些本领域普通技术人员将认识到,图1-2中的硬件可以随实现方式不同而不同。除了图1-2中所描述的硬件之外,还可以使用诸如闪存存储器、等效的非易失性存储器或光盘驱动器之类的其他内部硬件或外围设备,或代替它们。此外,除了前面所提及的SMP系统之外,在不偏离本发明的精神和范围的情况下,说明性实施例的过程也可以应用于多处理器数据处理系统。
此外,数据处理系统200还可以呈现许多不同的数据处理系统的任何形式,包括客户端计算设备、服务器计算设备、平板计算机、膝上型计算机、电话或其他通信设备、个人数字助理(PDA)等等。在某些说明性示例中,数据处理系统200可以是便携式计算设备,配置有闪存存储器,以提供用于例如存储操作系统文件和/或用户生成的数据的非易失性存储器。基本上,数据处理系统200可以是任何已知的或以后开发的数据处理系统,没有体系结构的限制。
说明性实施例可以在各种计算机平台和操作系统上操作。在一个说明性实施例中,计算机平台提供解释性环境,如REXX、Smalltalk、Java运行时环境等等。例如,说明性实施例可以与如Java标准技术规范所定义的JVM的边界内的Java虚拟机(JVM)一起操作。尽管对说明性实施例的下列说明将假设使用Java面向对象的编程语言的实现方式,但是,说明性实施例和本发明不仅限于这样的情况。说明性实施例和本发明的机制也适用于目前可用的或以后开发的任何面向对象的编程语言。
为了为这里的说明性实施例的说明提供上下文,将假设其中使用了说明性实施例的示范性解释性环境为Java解释性环境。如此,下列描述提供了根据Java规范的JVM的操作的某些部分的说明。
现在参考图3,方框图显示了在可以实现说明性实施例的计算机系统内操作的软件组件的关系。基于Java的系统300包含平台特定的操作系统302,该操作系统302为在特定的硬件平台上运行的软件提供硬件和系统支持。JVM 304是一个可以与操作系统一起运行的软件应用程序。或者,JVM 304可以嵌入在诸如MicrosoftInternet ExplorerTM或Netscape CommunicatorTM之类的启用Java的浏览器应用程序内。JVM 304给Java运行时环境提供了运行Java应用程序或小程序306的能力,Java应用程序或小程序306是Java编程语言编写的程序、servlet或软件组件。其中可以运转JVM 304的计算机系统可以类似于上文所描述的数据处理系统200或计算机100。然而,JVM 304也可以在专用硬件中以所谓的Java芯片、Java-on-silicon或具有嵌入的picoJava核心的Java处理器来实现。在Java运行时环境的中心是JVM 304,它支持Java环境的各个方面,包括其体系结构、安全功能、跨网络之间的移动性,以及平台独立性。
JVM 304是虚拟计算机,即,抽象地指定的计算机。规范定义了每个JVM必须实现的某些特征,设计选择的某些范围可以取决于JVM被设计运行的平台。例如,所有JVM必须运行Java字节代码,并可以使用一系列技术来执行由字节代码表示的指令。JVM可以完全用软件或某些以硬件来实现。此灵活性允许为大型计算机和PDA设计不同的JVM。
JVM 304是实际执行Java程序的虚拟计算机组件。Java程序不直接由中央处理器运行,而是由JVM 304运行,JVM 304本身是在处理器上运行的一段软件。JVM 304允许Java程序在不同的平台上执行,而不是只在编译代码所针对的一个平台上运行。Java程序是为JVM 304编译的。如此,Java能够支持许多类型的数据处理系统的应用程序,数据处理系统可以包含各种中央处理单元和操作系统体系结构。为使Java应用程序能在不同类型的数据处理系统上运行,编译器通常生成不依赖于体系结构的文件格式-编译的代码可在许多处理器上执行,假设存在Java运行时系统。
Java编译器生成并非特定的计算机体系结构所专用的字节代码指令。字节代码是由Java编译器生成的并由Java解释器执行的不依赖于机器的代码。Java解释器是交替地对字节代码进行解码并进行解释的JVM的一部分。这些字节代码指令被设计得容易在任何计算机上解释并容易地动态地转换为原始机器代码。
JVM 304必须加载类文件,并在它们内执行字节代码。JVM 304包含类加载器,该加载器从应用程序中加载类文件,并从应用程序所需要的Java应用程序编程接口(API)中加载类文件。执行字节代码的执行引擎可以在不同平台和实现方式之间有所不同。执行引擎还可以在硬件中实现,并嵌入在芯片上,以便Java字节代码天然地执行。JVM通常对字节代码进行解释,但是,JVM也可以使用其他技术,如实时编译,来执行字节代码。
当应用程序在平台特定的操作系统上的以软件实现的JVM 304上执行时,Java应用程序可以通过调用本地方法来与主机操作系统进行交互。Java方法是以Java语言编写的,被编译为字节代码,并存储在类文件中。本地方法是以某些其他语言编写的,并编译为特定处理器的原始机器代码。本地方法存储在动态链接库中,动态链接库的准确的形式是平台特定的。
利用上述计算环境,说明性实施例提供了定义接口和/或抽象类的实现方式的机制,无需利用特定具体类对实现方式进行硬编码。可以在应用程序源代码中指定关于一般对象实例化的接口和抽象类的实现方式。例如,实例化语句可以是:
AudioDevice myStereo=new AudioDevice()
其中,“AudioDevice”是接口,“myStereo”是实例变量,“newAudioDevice()”是一般对象实例化。
可以使用应用程序源代码中提供的单独的文件或批注,提供元数据,该元数据指定将在接口或抽象类实现方式语句中指定的一般类到特定具体类的映射。可以在编译时利用这些映射来生成字节代码,就像原始的实现方式语句指定具体类那样。或者,这些映射可以用来在运行时将特定具体类绑定到接口或抽象类。
在一个说明性实施例中,可以作为实际应用程序源代码中的批注,提供用于映射实现方式语句中指定的一般类的元数据。在本说明书的上下文中,术语“批注”是指,附加到属性、方法、类或数据包的源代码的元数据,可以供程序本身、编译器或虚拟机在对源代码进行处理时使用。可以在应用程序源代码的各种级别提供元数据,包括在类或方法级别,在声明级别,或在数据包级别。请看AudioDevice接口的下列示例:
@MapInterface(class=org.audio.device.Radio)
class AudioApplication{
…
AudioDevice myStereo=new AudioDevice();
…
}
在此示例中,元数据“@MapInterface(class=org.audo.device.Radio)”是在类级别提供的。在此级别,“AudioApplication”类中的实例化AudioDevice接口的所有语句都将使用“org.audio.device.Radio”具体类。如此,通过在类级别指定映射元数据,可以将映射应用到类中的实例化对应的接口的所有语句。
下面是在方法级别提供映射元数据的示例:
Class AudioApplication{
@MapInterface(class=org.audio.device.MP3Player)
void initstereot){
AudioDevice myStereo=new AudioDevice();
…
}
}
在此示例中,将具体类映射到特定接口的映射元数据是在“AudioApplication”类定义内提供的。如此,映射元数据应用于与该映射元数据关联的方法。例如,在上文的示例中,映射元数据与类定义中的紧随在它后面的方法关联。在编译时,批注实际变为紧随在批注后面的方法的一部分。编译器或虚拟机使用批注反射应用程序编程接口(API)来从方法中提取批注信息,然后,根据需要将具体类插入在方法范围内。
映射元数据可以进一步在声明级别提供,如下面的示例所显示的:
Class AudioApplication{void initStereo(){
@MapInterface(class=org.audio.device.MP3PDA)
AudioDevice myStereo=new AudioDevice();
…
}
}
在声明级别,简单地将实现方式类硬编码为“new”语句的一部分可能更方便。然而,为了确保本说明书的完整性,说明如果需要可以在声明级别利用说明性实施例的机制是十分重要的。
除上述情况之外,还可以在数据包级别提供映射元数据,即,与标识作为同一个命名空间的一部分的类的Java数据包相关联。在数据包级别,Java数据包内的标准“package-info.Java”类可以,例如,根据Java SE 5.0来指定。在此package-info.Java类内,可以提供映射元数据:
public class package-info{
SMapInterface(class=org.audio.device.MP3Player)
}
结果,package-info.Java类中指定的映射元数据可以应用于作为同一个数据包命名空间的一部分的所有类。因此,在数据包级别指定的映射元数据不是只是可应用到一个类,如在上文所描述的类级别实现方式中,而是可使多个类使用同一个接口-具体类的映射信息。利用批注实现的映射元数据实施例,数据包级别提供了指定的映射的最大的适用范围,可能是在实践中最广泛地使用的一个方式。
可以进一步从应用程序源代码的外部提供映射元数据,如在可被JVM或编译器访问的单独的文件中提供。例如,当生成字节代码或JVM时,当解释应用程序代码时,可以在由编译器处理的可扩展标记语言(XML)文件中提供映射元数据。尽管XML文件将用于描述说明性实施例,但是,应该认识到,可以使用其他类型的文件替换XML文件,或作为补充。例如,可以利用其他类型的标记语言文件,而不会偏离本发明的精神和范围。
可以使用外部文件,例如,XML文件,要么作为应用程序源代码中的批注的替代方案,要么和应用程序源代码中的批注一起使用。在同时利用批注和外部文件的情况下,在发生冲突时,取决于实现方式,可以选择一种方式来覆盖另一种方式。例如,在一个说明性实施例中,在批注元数据和XML元数据文件的元数据之间的任何冲突,被以有利于XML元数据文件的元数据的方式解决,以便XML元数据文件的元数据覆盖批注元数据。这样可以在应用程序源代码的外面进行管理。
利用XML元数据文件,XML元数据文件的元数据可以控制给定数据包中的所有应用程序类的功能。或者,可以为整个应用程序定义全局XML元数据文件。例如,在一个说明性实施例中,可以向编译器或JVM自动地检测的已编译的代码的数据包中添加叫做“instantiation-map.xml”的XML元数据文件。可以作为javac编译器参数或者JVM参数添加叫做“global-instantiation-map.xml”的文件,该文件覆盖所有其他元数据并控制整个应用程序的映射。
下面是可以与说明性实施例一起使用的XML元数据文件的一个示例:
<instantiation-map>
<map scope=″global″>
<entry interface=″AudioDevice″
class=″org.audio.device.Radio″/></map>
<map scope=″class″class=″org.audio.app.AudioApplication″><entry
interface=″AudioDevice″
class=″org.audio.device.MP3Player″/>
</map>
<map scope=″method″class=″org.audio.app.AudioApplication″
method=″playRadio″>
<entry abstractClass=″RadioStation″
class=″org.audio.stations.W3KM″/>
</map>
</instantiation-map>
在上面的示例中,XML元数据文件定义映射元数据适用性的各种范围,包括全局映射、类级别的映射,方法级别的映射等等。在XML元数据文件中不提供语句级别的映射,但是,可以使用应用程序源代码批注元数据来进行,如上面所述,例如。在XML元数据文件本身内,比较具体的范围的映射元数据条目始终覆盖比较宽的范围的映射元数据条目。如此,例如,在上面的示例中,由于此覆盖方法,AudioApplication类中的所有接口都绑定到MP3Player类,而不是Radio类。
说明性实施例所提供的映射元数据,无论是作为批注元数据还是作为单独的外部元数据文件提供的,都可以供编译器在编译时使用或者供JVM在运行时使用。现在将对两者进行描述。
关于在编译时使用映射元数据,可以使用编译器开关,例如,javac编译器开关,来指定编译器应该用映射元数据中定义的适当的具体类替换所有接口和抽象类实例化语句。例如,可以使用诸如下面的内容的javac编译器开关:
javac-cp org.audio.app;global-instantiation-map.xml-bindConcrete*.java
利用这样的javac编译器开关,如果javac编译器在其上下文检查操作过程中遇到应用程序源代码中的接口或抽象类实例化语句,则它搜索适当的元数据,批注元数据或外部元数据文件元数据中的任何一个或者两者,以便判断哪一个具体类绑定到接口或抽象类。结果是正好与应用程序源代码在接口和抽象类实例化语句中的适当的位置具有硬编码的绑定的情况相同的字节代码,如在现有技术中那样。如此,获得了与现有技术相同的结果,但是,有了在元数据中提供可以容易修改的具体类绑定的额外的灵活性,无需进行繁琐的应用程序源代码修改。
图4是显示了根据一个说明性实施例的在编译时将具体类绑定到接口和抽象类的示范性图形。如图4所示,在编译时,编译器410,如javac编译器,例如,对应用程序源代码文件420进行上下文检查。为了此示例,假设编译器410具有适当的开关,被设置为指示编译器410将所有接口和抽象类实例化语句替换为映射元数据中定义的适当的具体类。
作为此上下文检查的一部分,编译器410标识应用程序源代码文件420中的一个或多个接口或抽象类实例化语句。响应标识了应用程序源代码文件420中的接口或抽象类实例化语句的情况,编译器410搜索映射元数据文件430,例如,XML元数据文件,以便查找接口或抽象类的任何具体类映射元数据。如果在映射元数据文件430中没有找到映射元数据,则编译器410搜索应用程序源代码文件420,以查找任何定义的映射元数据批注。
如果编译器410没有在批注中找到适当的映射元数据,那么,可以生成编译错误并将其输出。如果编译器410在映射元数据文件430中或者在应用程序源代码文件420中的批注中发现适当的映射元数据,那么,编译器410使用找到的映射元数据中指定的对应的具体类来生成字节代码440。所产生的字节代码440与在应用程序源代码的实现方式语句中以硬编码的方式指定了具体类作为实现方式类的情况相同。
为了在编译器410中提供额外的功能,可以提供静态分析依赖关系工具412作为编译器410的一部分。此工具用于对映射元数据和应用程序的各种具体类的额外的依赖关系进行静态分析。静态分析依赖关系工具412可以由编译器410对应用程序源代码文件420运行,以判断是否满足了映射元数据和具体类的所有依赖关系或是否有没有被满足的依赖关系。可以在执行上文所概述的操作以将接口和抽象类实例化语句替换为具体类映射之前,由编译器410作为上下文检查中的最初步骤来运行此工具412。
静态分析依赖关系工具412可以通过扫描寻找实例化语句的每一个类来判断是否满足或不满足依赖关系。映射元数据文件和批注信息可以加载到运行查询表中。如果发现了在查询表中没有对应的映射的实例化语句,则向用户报告有价值的信息,如数据包、类、行编号,以及实例化语句的接口。
例如,如果满足了所有依赖关系,静态分析依赖关系工具412可能返回一个类似于下列语句的语句:
Interface and abstract class verification complete.Alldependencies are met.
或者,如果不满足依赖关系,则静态分析依赖关系工具412可能返回有关没有被满足的依赖关系的有用信息,如:
Interface dependencies not met:
Java Interface:org.audio.device.AudioDevice [Line 36]
org.audio.app.AudioApplication.java AudioDevice myStereo=new AudioDevice();
Abstract class verification complete.
Not all dependencies are met.
应该认识到,尽管上面的描述假设编译器410作为其上下文检查的一部分对应用程序源代码文件420中的接口和抽象类实例化语句进行修改,但是,说明性实施例不仅限于这样的情况。也可以通过在编译器410对应用程序源代码文件420进行操作之前操作的预编译器工具(未显示)来对接口和抽象类实例化语句进行修改。如此,不必从现有技术的编译器修改编译器的操作,因为应用程序源代码被修改为基本上与在应用程序源代码的原始实例化语句中具体类被硬编码的情况相同。
除在编译时利用说明性实施例的机制之外,也可以通过允许虚拟机,例如,Java虚拟机(JVM),在运行时绑定实现方式具体类,来在运行时使用说明性实施例。利用这样的实施例,当在运行时遇到抽象类或接口类时,JVM可以使用映射元数据信息来判断应该加载哪一个类。然后,JVM可以利用诸如自举类加载器之类的类加载器来加载元数据中指定的类。如果元数据没有提供适当的实现方式类,则可能引发叫做“InterfacelnstantiationException”和“AbstractClassInstantiationException”的“ClassNotFoundException”的子类。
类似于编译时实现方式,可以使用JVM开关来通知JVM,它可以使用说明性实施例的映射元数据来实例化抽象类和接口。例如,JVM开关可以呈现下列形式:
java-bindConcrete-cp org.audio.bin;global-
instantiation-map.xml AudioApplication
图5是显示了根据一个说明性实施例的在运行时将具体类绑定到接口和抽象类的示范性图形。如图5所示,当在运行时JVM 510遇到字节代码指令栈520中的接口或抽象类实例化522时,JVM搜索映射元数据文件530,例如,XML元数据文件,以查找匹配实例化语句522的映射信息。如果在映射元数据文件530中没有找到映射元数据,则JVM 510搜索字节代码指令栈520中的批注524。
如果在批注524中没有找到适当的映射信息,则引发运行时异常。如果在映射元数据文件530或者在批注524中发现适当的映射,则JVM 510以常规方式使用类加载器540加载由JVM 510找到的映射元数据信息中指定的具体类550。
在启动时,JVM 510的默认行为是进行从映射元数据文件530将XML映射信息“懒惰地加载”到存储器中,在那里,它被高速缓存,以备将来使用。多少存储器被分配用于存储器中的映射元数据是由JVM 510提供商所选择的。然而,可以用″-bindConcreteSize″设置存储器的大小。
此外,当使用XML元数据时还有两个其它选项可用:″-bindConcrete greedy″和″-bindConcrete minimal″。在JVM 510启动启动时,″greedy″策略对所有XML信息(数据包级别和全局)进行分析。如果没有足够的存储器可用,则进行高速缓存,如在上文所描述的“懒惰加载”策略中那样。“minimal”策略通过每次需要时对XML元数据进行分析而尽可能地多地节省存储器。如此,没有高速缓存映射元数据信息。应该注意,批注元数据可以使用″@Retention(RUNTIME)″元批注,以便映射元数据在运行时对JVM 510“可见”,如Java SE 5.0规范中所说明的。
为了是在运行时被绑定,为编译器提供有效语法,以便在一开始就有运行时代码。可以提供在应用程序源代码上运行的预编译器工具,该工具用占位符类替换接口和抽象类实例化语句。一个方法是预编译器工具利用当前时间作为名称创建空类:
public class MyInterface_113529609327 extends
MyInterface{}
public class AudioDevice_113529609327 extends
AudioDevice{}
然后,预编译器工具可以按如下方式替换语句:
MyInterface mi=new MyInterface();MyInterface mi=new
MyInterface_113529609327();
在运行时,类级别“BindConcrete”批注充当回叫,以使用适当元数据将占位符类替换为正确的具体类。例如,源代码可以看起来像:
@BindConcrete
public class AudioApplication{
…
Interface AudioDevice=new AudioDevice();
…
Interface AudioDevice=new AudioDevice();
…
图6和7概述了说明性实施例的示范性操作。可以理解,流程图例图的每一方框,流程图例图中的方框的组合,可以由计算机程序指令来实现。这些计算机程序指令可以提供到处理器或其他可编程数据处理设备,以产生机器,以便在处理器或其他可编程数据处理设备上执行的指令产生用于实现流程图方框中指定的功能的装置。这些计算机程序指令还可以存储在计算机可读取的存储器或存储介质中,该存储器或存储介质可以指示处理器或其他可编程数据处理设备以特定方式运转,以便存储在计算机可读的存储器或存储介质中的指令产生一种包括了指令装置的产品,该指令装置实现了流程图方框中所指定的功能。
相应地,流程图例图的方框支持用于执行指定的功能的装置的组合,用于执行指定的功能的步骤和用于执行指定的功能的程序指令装置的组合。还应该理解,流程图例图的每一个方框,以及流程图例图中的方框的组合,可以通过执行指定的功能或步骤的基于专用硬件的计算机系统来实现,或通过专用硬件和计算机指令的组合来实现。
图6是概述了根据一个说明性实施例的在编译时将具体类绑定到接口和抽象类的示范性操作的流程图。如图6所示,操作开始时,编译器对应用程序源代码进行静态分析依赖关系检查(步骤605)。然后,编译器对应用程序源代码文件进行上下文检查(步骤610)。为了此示例的操作,假设编译器具有适当的开关,被设置为指示编译器将所有接口和抽象类实例化语句替换为映射元数据中定义的适当的具体类。
作为上下文检查的一部分,编译器判断是否遇到接口或抽象类实例化(步骤620)。如果否,则就是否完成了上下文检查作出判断(步骤630)。如果已经完成了上下文检查,操作结束。如果没有完成上下文检查,则操作返回到步骤610。
如果遇到接口或抽象类实例化,编译器搜索一个或多个映射元数据文件,例如,XML元数据文件,以查找是否有接口或抽象类的任何具体类映射元数据(步骤640)。编译器判断是否找到接口或抽象类的具体类映射元数据(步骤650)。如果在映射元数据文件中没有找到映射元数据,则编译器搜索应用程序源代码文件,以查找任何定义的映射元数据批注(步骤660)。
编译器判断是否在批注中找到接口或抽象类的适当的映射元数据(步骤670)。如果编译器没有在批注中找到适当的映射元数据,那么,编译器生成编译错误并将其输出(步骤680)。如果编译器在映射元数据文件中或者在应用程序源代码文件中的批注中发现适当的映射元数据,那么,编译器使用找到的映射元数据中指定的对应的具体类来生成字节代码(步骤690)。所产生的字节代码与在应用程序源代码的实现方式语句中以硬编码的方式指定了具体类作为实现方式类的情况相同。然后,操作结束。
图7是概述了根据一个说明性实施例的在运行时将具体类绑定到接口和抽象类的示范性操作的流程图。如图7所示,操作开始时,虚拟机遇到应用程序的字节代码指令栈中的接口或抽象类实例化(步骤710)。然后,虚拟机搜索映射元数据文件,以查找是否有匹配接口或抽象类实例化的任何映射元数据(步骤720)。
虚拟机判断是否找到这样的映射元数据(步骤730)。如果没有为接口或抽象类实例化找到映射元数据,则虚拟机搜索字节代码指令栈,以查找是否有指定了抽象类实例化的接口的映射元数据的任何批注(步骤740)。虚拟机判断批注中是否存在适当的映射元数据(步骤750)。如果不,则引发运行时异常(步骤760)。如果在映射元数据文件中或者在批注中找到适当的映射元数据,则虚拟机指示类加载器加载在映射元数据中找到的对应的具体类(步骤770)。然后,由虚拟机以普通方式继续应用程序字节代码的运行时执行(步骤780),操作结束。应该认识到,在字节代码指令栈中的运行时过程中,每次遇到接口或抽象类实例化时,都可以重复图7的操作。
如此,说明性实施例的机制允许实例化应用程序代码中的接口或抽象类,无需对将接口或抽象类绑定到实例化语句中的特定实现具体类的绑定进行硬编码。相反,可以使用作为应用程序源代码中的批注提供的,以单独的元数据文件提供的或者以这两种方式提供的映射元数据来指定具体类。
说明性实施例的机制可以用于各种目的,说明性实施例的优点对那些使用面向对象的编程语言开发应用程序源代码的人是显而易见的。说明性实施例的机制的应用的一个示例是在进行性能测试时。性能测试常常试图以应用程序的特定组件为目标。举个例子,试图将J2EE应用程序的Java数据库连接(JDBC)后端与企业JavaBean(EJB)实体bean后端进行比较的性能测试。自然方法将是编写两个后端实现方式必须符合的接口。如此,两种实现方式共享相同的呈现层,业务逻辑,事务服务等等。可以使用说明性实施例来在使用哪一种实现方式来实例化接口之间进行切换,从而,比较了两种实现方式。
应该认识到,说明性实施例可以呈现完全是硬件实施例、完全是软件实施例或包含硬件和软件元件两者的实施例的形式。在一个示范性实施例中,说明性实施例的机制是以软件实现的,包括但不仅限于固件、常驻软件、微代码等等。
此外,说明性实施例还可以呈现计算机程序产品的形式,该产品可以从计算机可使用的或计算机可读取的介质进行访问,介质提供了程序代码,供计算机或任何指令执行系统使用或与它们一起使用。对于此说明书,计算机可使用的或计算机可读取的介质可以是可以包含、存储、传递、传播或传输供指令执行系统、设备使用或与它们一起使用的程序的任何设备。
介质可以是电子的、磁性的、光学的、电磁的、红外线的或半导体系统(或设备)或传播介质。计算机可读取的介质的示例包括半导体或固态存储器,磁带,可移动计算机磁盘,随机存取存储器(RAM),只读存储器(ROM),硬磁盘和光盘。光盘的当前示例包括光盘-只读存储器(CD-ROM),光盘读取/写入(CD-R/W)和DVD。
适用于存储和/或执行程序代码的数据处理系统将包括至少一个通过系统总线直接或间接地连接到存储器元件的处理器。存储器元件可以包括在程序代码的实际执行过程中使用的本地存储器,大容量存储器,以及高速缓冲存储器,该高速缓冲存储器提供了至少某些程序代码的临时存储器,以便减少在执行过程中必须从大容量存储器检索代码的次数。
输入/输出或I/O设备(包括但不仅限于,键盘、显示器、指示设备,等等)可以直接或者通过I/O控制器连接到系统。网络适配器也可以连接到系统,以使得数据处理系统通过私有的或公共网络连接到其他数据处理系统或远程打印机或存储设备。调制解调器,电缆调制解调器和以太网卡只是几个当前可用的的网络适配器类型。
对本发明的描述只作说明,而不是详尽的说明或限于所说明的形式。那些本领域普通技术人员将认识到,可以进行许多修改。所选择的实施例只是为了最好地说明本发明的原理,实际应用,并使精通本技术的其他人懂得,带有各种修改的各种实施例也是可以接受的。
Claims (20)
1.一种数据处理系统中的用于实例化抽象类的方法,包括:
提供映射元数据,用于将抽象类映射到实现所述抽象类的对应的具体类;
在对应用程序代码进行处理的过程中遇到所述抽象类的实例化语句,其中,所述实例化语句不指定实现所述抽象类的具体类;以及
基于所述映射元数据转换所述实例化语句,以指定实现所述抽象类的所述具体类。
2.根据权利要求1所述的方法,其中,所述抽象类是接口类。
3.根据权利要求1所述的方法,其中,所述映射元数据是作为与所述应用程序代码分开的映射元数据文件数据结构的一部分提供的。
4.根据权利要求1所述的方法,其中,所述映射元数据是作为所述应用程序代码内的批注提供的。
5.根据权利要求4所述的方法,其中,所述批注是在类级别、方法级别、声明级别或数据包级别中的某一个级别提供的。
6.根据权利要求1所述的方法,其中,所述遇到和转换操作是由编译器在所述应用程序代码的编译时执行的。
7.根据权利要求1所述的方法,其中,所述遇到和转换操作是由解释字节代码指令的虚拟机在运行时执行的。
8.根据权利要求1所述的方法,其中,所述应用程序代码是应用程序源代码,其中,所述映射元数据作为应用程序源代码中提供的批注元数据和作为单独的映射元数据文件中提供的映射元数据来提供。
9.根据权利要求8所述的方法,其中,所述应用程序源代码中提供的批注元数据和单独的映射元数据文件中提供的映射元数据之间的冲突以有利于所述单独的映射元数据文件中提供的所述映射元数据的方式被解决。
10.根据权利要求1所述的方法,其中,所述遇到和转换操作是作为上下文检查的一部分由编译器来执行的,其中,所述转换操作包括:
检查单独的映射元数据文件中的具体类映射;
如果在所述单独的元数据文件中没有找到具体类映射,则检查应用程序源代码批注中的具体类映射;以及
使用在所述单独的映射元数据文件中或者所述应用程序源代码批注中找到的具体类映射来执行所述转换操作。
11.一种数据处理系统中的用于实例化抽象类的系统,包括:
用于提供映射元数据,将抽象类映射到实现所述抽象类的对应的具体类的装置;
用于在对应用程序代码进行处理的过程中遇到所述抽象类的实例化语句的装置,其中,所述实例化语句不指定实现所述抽象类的具体类;以及
用于基于所述映射元数据转换所述实例化语句,以指定实现所述抽象类的所述具体类的装置。
12.根据权利要求11所述的系统,其中,所述抽象类是接口类。
13.根据权利要求11所述的系统,其中,所述映射元数据是作为与所述应用程序代码分开的映射元数据文件数据结构的一部分提供的。
14.根据权利要求11所述的系统,其中,所述映射元数据是作为所述应用程序代码内的批注提供的。
15.根据权利要求14所述的系统,其中,所述批注是在类级别、方法级别、声明级别或数据包级别中的某一个级别提供的。
16.根据权利要求11所述的系统,其中,所述遇到和转换装置是由编译器在所述应用程序代码的编译时执行的。
17.根据权利要求11所述的系统,其中,所述遇到和转换装置是由解释字节代码指令的虚拟机在运行时执行的。
18.根据权利要求11所述的系统,其中,所述应用程序代码是应用程序源代码,其中,所述映射元数据作为应用程序源代码中提供的批注元数据和作为单独的映射元数据文件中提供的映射元数据来提供。
19.根据权利要求18所述的系统,其中,所述应用程序源代码中提供的批注元数据和单独的映射元数据文件中提供的映射元数据之间的冲突以有利于所述单独的映射元数据文件中提供的所述映射元数据的方式被解决。
20.根据权利要求11所述的系统,其中,所述遇到和转换装置是作为上下文检查的一部分由编译器来执行的,其中,所述转换装置包括:
用于检查单独的映射元数据文件中的具体类映射的装置;
用于如果在所述单独的元数据文件中没有找到具体类映射,则检查应用程序源代码批注中的具体类映射的装置;以及
用于使用在所述单独的映射元数据文件中或者所述应用程序源代码批注中找到的具体类映射来执行所述转换装置的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/551,892 | 2006-10-23 | ||
US11/551,892 US8214811B2 (en) | 2006-10-23 | 2006-10-23 | Instantiating an interface or abstract class in application code |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101169718A CN101169718A (zh) | 2008-04-30 |
CN100559346C true CN100559346C (zh) | 2009-11-11 |
Family
ID=39390357
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007101816568A Active CN100559346C (zh) | 2006-10-23 | 2007-10-22 | 用于实例化抽象类的系统和方法 |
Country Status (2)
Country | Link |
---|---|
US (2) | US8214811B2 (zh) |
CN (1) | CN100559346C (zh) |
Families Citing this family (60)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8214811B2 (en) | 2006-10-23 | 2012-07-03 | International Business Machines Corporation | Instantiating an interface or abstract class in application code |
US20080270974A1 (en) * | 2007-04-30 | 2008-10-30 | Krasimir Topchiyski | Enterprise JavaBeans Metadata Model |
US20090199159A1 (en) * | 2008-01-31 | 2009-08-06 | Microsoft Corporation | Declarative execution context splitting |
US20100149215A1 (en) * | 2008-12-15 | 2010-06-17 | Personal Web Systems, Inc. | Media Action Script Acceleration Apparatus, System and Method |
US8432404B2 (en) * | 2008-12-15 | 2013-04-30 | Leonovus Usa Inc. | Media action script acceleration method |
US8432403B2 (en) * | 2008-12-15 | 2013-04-30 | Leonovus Usa Inc. | Media action script acceleration apparatus |
US8359568B2 (en) * | 2008-12-22 | 2013-01-22 | International Business Machines Corporation | Method and system for automatically adding generic change log to legacy application |
US8843920B2 (en) * | 2009-09-15 | 2014-09-23 | Advanced Micro Devices, Inc. | Systems and methods for deferring software implementation decisions until load time |
US9003380B2 (en) | 2010-01-12 | 2015-04-07 | Qualcomm Incorporated | Execution of dynamic languages via metadata extraction |
US8510728B2 (en) | 2010-06-30 | 2013-08-13 | International Business Machines Corporation | Dynamic determination of application server runtime classloading |
US8719777B2 (en) * | 2010-11-22 | 2014-05-06 | Sap Ag | Object, for object-oriented programming, with state-dependent behaviors |
US8881127B2 (en) * | 2011-06-14 | 2014-11-04 | Sap Ag | Systems and methods to automatically generate classes from API source code |
CN102323910A (zh) * | 2011-08-19 | 2012-01-18 | 中国航天科工运载技术研究院 | 一种设备显示与管理装置 |
US20130097584A1 (en) * | 2011-10-18 | 2013-04-18 | Michal Ayash | Mapping software modules to source code |
US8863129B2 (en) * | 2011-12-06 | 2014-10-14 | International Business Machines Corporation | Automated caching and mirroring of immutable data in distributed virtual machines via native interface components |
CN103207787B (zh) * | 2012-01-12 | 2017-03-01 | 阿里巴巴集团控股有限公司 | 一种项目开发中数据包的加载方法及系统 |
US10148285B1 (en) * | 2012-07-25 | 2018-12-04 | Erich Schmitt | Abstraction and de-abstraction of a digital data stream |
US9720660B2 (en) * | 2013-05-21 | 2017-08-01 | Red Hat, Inc. | Binary interface instrumentation |
JP6058498B2 (ja) * | 2013-07-26 | 2017-01-11 | 株式会社日立製作所 | コンパイル方法、プログラム及びコンパイル装置 |
US9471345B2 (en) * | 2013-09-25 | 2016-10-18 | Sap Se | Runtime generation and injection of java annotations |
US9509761B2 (en) | 2013-10-23 | 2016-11-29 | Sap Se | Open user interface |
US10795858B1 (en) | 2014-02-18 | 2020-10-06 | Erich Schmitt | Universal abstraction and de-abstraction of a digital data stream |
US9389890B2 (en) | 2014-03-27 | 2016-07-12 | Microsoft Technology Licensing, Llc | Hierarchical directives-based management of runtime behaviors |
US9292270B2 (en) | 2014-03-27 | 2016-03-22 | Microsoft Technology Licensing, Llc | Supporting dynamic behavior in statically compiled programs |
BR112016021725A2 (pt) * | 2014-03-27 | 2017-08-15 | Microsoft Technology Licensing Llc | Apoio de comportamento dinâmico em programas estatisticamente compilados |
WO2016122340A1 (en) * | 2015-01-26 | 2016-08-04 | Huawei Technologies Co., Ltd | Systems and methods for constructing distributed programs |
US9841959B2 (en) * | 2015-02-02 | 2017-12-12 | Google Llc | Fine-grained demand driven IPO infrastructure |
US10120661B2 (en) * | 2015-07-16 | 2018-11-06 | Sugarcrm Inc. | Multi-flavored software execution from a singular code base |
US9626171B2 (en) | 2015-07-24 | 2017-04-18 | Oracle International Corporation | Composing a module system and a non-module system |
CN106663011B (zh) * | 2015-07-24 | 2021-08-24 | 甲骨文国际公司 | 桥接模块系统和非模块系统 |
US10104090B2 (en) * | 2015-08-25 | 2018-10-16 | Oracle International Corporation | Restrictive access control for modular reflection |
US10275226B2 (en) | 2015-10-23 | 2019-04-30 | Oracle International Corporation | Structural representation of generic type variable in a nominally typed virtual machine |
US9684497B1 (en) * | 2015-12-10 | 2017-06-20 | International Business Machines Corporation | Optimized compiling of a template function |
US10191753B2 (en) | 2016-03-30 | 2019-01-29 | Oracle International Corporation | Generating verification metadata and verifying a runtime type based on verification metadata |
US10394528B2 (en) | 2016-03-30 | 2019-08-27 | Oracle International Corporation | Returning a runtime type loaded from an archive in a module system |
RU2016137177A (ru) | 2016-09-16 | 2018-03-19 | Оракл Интернэйшнл Корпорейшн | Усовершенствованное преобразование исходного кода языка программирования |
US10282184B2 (en) | 2016-09-16 | 2019-05-07 | Oracle International Corporation | Metadata application constraints within a module system based on modular dependencies |
RU2016137176A (ru) | 2016-09-16 | 2018-03-19 | Оракл Интернэйшнл Корпорейшн | Связывание преобразованного исходного кода с первоначальным исходным кодом с помощью метаданных |
US10387142B2 (en) | 2016-09-16 | 2019-08-20 | Oracle International Corporation | Using annotation processors defined by modules with annotation processors defined by non-module code |
CN107704479B (zh) * | 2017-02-08 | 2020-06-30 | 深圳壹账通智能科技有限公司 | 文件生成方法和装置 |
RU2017110071A (ru) | 2017-03-24 | 2018-09-24 | Оракл Интернэйшнл Корпорейшн | Преобразование исходного кода языка программирования |
US10848410B2 (en) | 2017-03-29 | 2020-11-24 | Oracle International Corporation | Ranking service implementations for a service interface |
US10521208B2 (en) * | 2017-06-23 | 2019-12-31 | Microsoft Technology Licensing, Llc. | Differentiated static analysis for dynamic code optimization |
CN107463380B (zh) * | 2017-08-01 | 2018-07-06 | 武汉斗鱼网络科技有限公司 | 消息处理方法、装置及电子设备 |
CN109739526A (zh) * | 2017-10-30 | 2019-05-10 | 北京京东尚科信息技术有限公司 | 代码更新方法和装置 |
CN108170613B (zh) * | 2018-03-08 | 2021-08-03 | 国家计算机网络与信息安全管理中心 | 一种软件测试用例自动生成方法 |
CN110737468A (zh) * | 2018-07-19 | 2020-01-31 | 北京路上创客技术服务有限责任公司 | 一种可执行程序的跨平台实现方法 |
US10782948B2 (en) | 2018-11-19 | 2020-09-22 | Red Hat, Inc. | Reducing application startup time by generating bytecode from metadata at build time |
CN111240681B (zh) * | 2019-12-30 | 2023-08-15 | 瑞庭网络技术(上海)有限公司 | 一种不同编程语言的转换方法及装置 |
CN111625227A (zh) * | 2020-06-08 | 2020-09-04 | 成都信息工程大学 | 一种兼容多种数据库的系统设计方法 |
US11385905B2 (en) | 2020-06-10 | 2022-07-12 | Red Hat, Inc. | Managing boot device orders for computing devices |
CN111752551A (zh) * | 2020-06-29 | 2020-10-09 | 广东浪潮大数据研究有限公司 | 一种实例化对象的生成方法、系统、电子设备及存储介质 |
CN111831277B (zh) * | 2020-09-21 | 2021-06-25 | 腾讯科技(深圳)有限公司 | 虚拟数据生成方法、系统、设备及计算机可读存储介质 |
CN112232003B (zh) * | 2020-12-17 | 2021-03-30 | 芯华章科技股份有限公司 | 对设计进行仿真的方法、电子设备及存储介质 |
US10963228B1 (en) * | 2020-12-22 | 2021-03-30 | Temper Systems, Inc. | Preventing garbage object accumulation on minimal runtimes |
CN112612477B (zh) * | 2020-12-29 | 2024-05-24 | 亚美智联数据科技有限公司 | 业务实现方法、装置、设备和存储介质 |
CN113779467A (zh) * | 2021-01-05 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 可视化功能组件管理的方法和装置 |
CN113360219B (zh) * | 2021-06-17 | 2022-05-13 | 上海销氪信息科技有限公司 | 一种呼叫线路接入方法、装置、设备及可读存储介质 |
CN114385540B (zh) * | 2021-12-23 | 2024-09-13 | 新奥数能科技有限公司 | 一种数据单位换算方法及装置 |
CN114528337B (zh) * | 2022-01-12 | 2024-03-15 | 南湖实验室 | 面向多源异构数据源的接口系统、通用接口及其实现方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6578090B1 (en) * | 1998-06-08 | 2003-06-10 | Ricoh Company, Ltd. | System and method for interfacing two modules supporting various applications |
US6675227B1 (en) * | 2000-06-05 | 2004-01-06 | International Business Machines Corporation | Method for providing a service implementation for both EJB and non-EJB environments |
CN1622644A (zh) * | 2003-11-28 | 2005-06-01 | 中兴通讯股份有限公司 | 一种电信网管机架板位图的数据绑定方法 |
CN1801093A (zh) * | 2006-01-17 | 2006-07-12 | 浙江大学 | Java操作系统中类装载的实现方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2242293A (en) | 1990-01-05 | 1991-09-25 | Apple Computer | Apparatus and method for dynamic linking of computer software components |
US6430569B1 (en) | 1998-08-14 | 2002-08-06 | Sun Microsystems, Inc. | Methods and apparatus for type safe, lazy, user-defined class loading |
US7349912B2 (en) | 2000-12-22 | 2008-03-25 | Oracle International Corporation | Runtime modification of entries in an identity system |
US7356803B2 (en) * | 2001-07-02 | 2008-04-08 | Bea Systems, Inc. | Annotation based development platform for asynchronous web services |
US7454743B2 (en) * | 2001-12-28 | 2008-11-18 | Sun Microsystems, Inc. | Java to SNMP MIB mapping |
US7318215B1 (en) * | 2003-02-26 | 2008-01-08 | Microsoft Corporation | Stored procedure interface language and tools |
US7827527B1 (en) * | 2004-02-12 | 2010-11-02 | Chiluvuri Raju V | System and method of application development |
US20060225053A1 (en) * | 2004-10-21 | 2006-10-05 | Microsoft Corporation | Programming language improvements |
US7562342B2 (en) * | 2004-12-02 | 2009-07-14 | International Business Machines Corporation | Method and apparatus for incrementally processing program annotations |
US7716246B2 (en) * | 2005-11-30 | 2010-05-11 | Microsoft Corporation | Dynamic mechanism for providing metadata |
US8214811B2 (en) | 2006-10-23 | 2012-07-03 | International Business Machines Corporation | Instantiating an interface or abstract class in application code |
-
2006
- 2006-10-23 US US11/551,892 patent/US8214811B2/en active Active
-
2007
- 2007-10-22 CN CNB2007101816568A patent/CN100559346C/zh active Active
-
2012
- 2012-05-10 US US13/468,142 patent/US8819650B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6578090B1 (en) * | 1998-06-08 | 2003-06-10 | Ricoh Company, Ltd. | System and method for interfacing two modules supporting various applications |
US6675227B1 (en) * | 2000-06-05 | 2004-01-06 | International Business Machines Corporation | Method for providing a service implementation for both EJB and non-EJB environments |
CN1622644A (zh) * | 2003-11-28 | 2005-06-01 | 中兴通讯股份有限公司 | 一种电信网管机架板位图的数据绑定方法 |
CN1801093A (zh) * | 2006-01-17 | 2006-07-12 | 浙江大学 | Java操作系统中类装载的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
US20120222022A1 (en) | 2012-08-30 |
US8214811B2 (en) | 2012-07-03 |
US8819650B2 (en) | 2014-08-26 |
US20080127070A1 (en) | 2008-05-29 |
CN101169718A (zh) | 2008-04-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100559346C (zh) | 用于实例化抽象类的系统和方法 | |
JP5208350B2 (ja) | 自己記述型ソフトウェアイメージ更新コンポーネント | |
JP4928717B2 (ja) | 物理ストレージ表現とは独立した論理ビューの同期化 | |
RU2598600C2 (ru) | Проецирование собственных интерфейсов прикладного программирования операционной системы в другие языки программирования | |
US8266588B2 (en) | Creating projects in a rational application developer workspace | |
US7693913B2 (en) | Method and system for remote accessing a virtual database system | |
CN1573693A (zh) | 用于创建、管理和使用代码段的系统和方法 | |
CN1577268A (zh) | 共享库系统及构建该系统的方法 | |
CN102866910A (zh) | 用元数据描述操作系统的本机应用编程接口 | |
US10649744B1 (en) | Systems and methods for handling renaming of programming constructs in programming environments | |
CN102664746A (zh) | 用于分布式数据中心各分量的在全局上健全且一致的配置管理 | |
CN103119561A (zh) | 用于对非叶代码进行基于编译器的矢量化的系统和方法 | |
CN1619546A (zh) | 文本的标号系统-翻译和在运行时间的多语言支持以及设计 | |
Schröder et al. | An empirical investigation of command-line customization | |
US10387142B2 (en) | Using annotation processors defined by modules with annotation processors defined by non-module code | |
Reichel et al. | Proof repair infrastructure for supervised models: Building a large proof repair dataset | |
US20170075668A1 (en) | Methods and Systems for Generating Client-Server Applications for Target Devices | |
WO2013186642A1 (en) | Instantiating a coding competition to develop a program module in a networked computing environment | |
US7631302B2 (en) | System and method for validation of arguments provided to an application | |
US8615736B2 (en) | Module facility for JAVASCRIPT language | |
Mateos et al. | A stitch in time saves nine: Early improving code-first web services discoverability | |
Lopez-Rojas | OMCCp: A MetaModelica Based Parser Generator Applied to Modelica | |
US8978007B2 (en) | Static metadata in dynamic programs | |
US7917893B2 (en) | Using a system of annotations to generate views and adapters | |
US7926022B2 (en) | Surrogate-based and extends-based context look-up |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |