用于创建、管理和使用代码段的***和方法
发明领域
本发明涉及编程工具,特别是涉及创建、管理和使用代码段的方法。
发明背景
随着软件解决方案发展的需求,提高程序员的效率变得越来越重要。一种提高程序员效率的方法是重复利用已写好的代码段。传统上,这种方式由手工实现:用户查找并保存代码段,并且对其进行修改以用在新的环境中。尽管这是有帮助的,但是在某些情况下,要找到开发者需要的特定代码段是很困难的,并且一旦找到,修改代码段使之符合预期的应用也是一项很重要的工作。
如果存在一种方法使代码段更容易查找和修改并且产生提供更强代码段的解决方案将是很有益的。
发明概述
代码段和与该代码段相关的信息(例如元信息)元素可以一起编码在XML文件或其它类型的文件或数据库中。一个或多个编码的代码段存留作为一个编码的代码段库。该库的中心库可以是一个文件***或数据库。编码的代码段可以使用搜索操作进行选择,并且***到一个源代码文件中。当编码的代码***到源代码中时,自动包含该代码段所需的相关元素,并且识别可能需要修改的部分代码段。管理和组织所述代码段,以促进所述代码段的共享。提供利用其可以创建新的代码段并添加到所述库中供以后使用的工具。
附图的简要说明
当结合附图阅读时,将更好的理解以上概述及以下对示意实施例的详细说明。为了举例说明本发明,在附图中示出了本发明的典型结构;但是,本发明并不局限于所公开的特定方法和工具。附图中:
附图1是表示其中可以实现本发明各个方面的典型计算环境的方框图;
附图2是根据本发明的一个实施例用于创建、管理和重复利用代码段的一个***的典型方框图;
附图3是根据本发明的一个实施例用于创建、管理和重复利用代码段的一个过程的流程图;
附图4a-b描述了根据本发明的一个方面的典型的编码代码段;
附图5是根据本发明的一个实施例用于选择一个代码段***到一个源程序中的典型的用户界面屏幕图;
附图6是根据本发明的一个实施例用于选择一个代码段***到一个源程序中的另一个典型的用户界面屏幕图;
附图7是根据本发明的一个方面用于***一个代码段到一个源程序中的过程的流程图;
附图8是根据本发明的一个方面当***一个代码段到一个源程序中时,可能显示的典型的用户界面屏幕图;
附图9是根据本发明的一个方面当***一个代码段到一个源程序中时,可能显示的典型的用户界面屏幕图;
附图10是根据本发明的一个方面当选择一个元素修改时,可能显示的典型的用户界面屏幕图;
附图11是当选择一个元素的新实例***时,可能显示的典型的用户界面屏幕图;
附图12是根据本发明的一个方面可能显示的典型的用户界面屏幕图;并且
附图13a-c描述了根据图12所示本发明的一个方面的典型的编码代码段。
示意实施例的详细说明
概论
代码段以及与所述代码段相关的信息(例如与代码段相关的元信息,如所需参考值)元素编码在一个或多个文件中。在本发明的一个实施例中,代码段和元信息编码在一个XML文件中。一个或多个编码的代码段保存在一个编码代码段库中。从所述库中可以选择一个段并***到源代码文件中。当所述段***到源代码中时,可以自动包含该代码段所需的相关元素。识别可能需要修改的部分代码段,并且提供一种便于通过可修改元素导航的装置。可以显示修改所述代码段的提示。也可以显示有关该代码段的注释。此外,可以执行正确***代码段的验证。更适宜地,管理和组织所述代码段以促进代码段的共享。
典型计算环境
附图1和以下论述将对可以实现本发明的一个适合的计算环境提供简要概括的描述。但是,应当理解,手持式、便携式和其他所有类型的计算设备都可以考虑与本发明结合使用。虽然以下描述了一种通用计算机,但是这仅仅是一个例子,本发明仅需要一具有网络服务器互用性和交互性的瘦客户机。因此,本发明可以在其中含有非常小或最小的客户机资源的网络主服务环境中实现,例如这样一个网络环境,其中客户机设备仅用作浏览器或万维网的接口。
尽管不需要,但是本发明也可以通过应用程序接口(API)实现,以供开发者使用,并且/或者包含在将在计算机可执行指令的普通上下文例如由一个或多个计算机如客户工作站、服务器或其他设备执行的程序模块中描述的网络浏览软件中。通常,程序模块包括例程、程序、对象、组件、数据结构和执行特定任务或实现特定抽象数据类型的类似模块。一般来说,程序模块的功能根据需要可以组合或分布在各个实施例中。此外,那些本领域技术人员将会理解本发明可以用其他计算机***结构实施。其他适合本发明使用的公知的计算***、环境、和/或结构包括,但不局限于个人计算机(PCs)、自动取款机、服务器计算机、手持或膝上设备、多处理器***、基于微处理器的***、可编程消费电子设备、网络PCs、小型计算机、大型计算机等等。本发明还可以在分布式计算环境中实施,其中通过远程处理设备执行任务,这些远程处理设备通过通信网络或其他数据传输介质链接。在分布式计算环境中,程序模块位于包括存储器存储设备的本地和远程计算机存储介质中。
附图1示出了其中可以实现本发明的一个适合的计算***环境100的例子。尽管上面已澄清,计算***环境100仅仅是适合的计算环境中的一个例子,并不打算对本发明的使用或功能的范围给出任何限制。计算环境100不应当被解释为对与典型的操作环境100所示的任何一个部件或多个部件的组合具有任何依赖或需求。
参照附图1,实现本发明的一个典型的***包括以计算机110为形式的通用计算设备。计算机110的部件可以包括但不局限于处理单元120、***存储器130和***总线121,***总线121将包括***存储器的各个***部件耦合到处理单元120。***总线121可以是包括存储器总线或存储器控制器、外部总线和使用多种总线结构的任何一种的局部总线的几种类型的总线结构中的任何一种。为了举例,而不是限定,这种结构包括工业标准结构(ISA)总线、微通道结构(MCA)总线、增强的ISA(EISA)总线、视频电子标准协会(VESA)局部总线、以及***部件互连(PCI)总线(也称作中间总线)。
计算机110一般包括多种计算机可读介质。计算机可读介质可以是可由计算机110存取的任意可用的介质,包括易失性和非易失性介质、可移动和不可移动介质。为了举例,而不是限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括在用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的方法或技术中实现的易失性和非易失性介质、可移动和不可移动介质。计算机存储介质包括,但不局限于RAM、ROM、EEPROM、闪存或其他存储器技术、CDROM、数字通用光盘(DVD)或其他光盘存储器、盒式磁带、磁带、磁盘存储器或其他磁存储设备,或其他可用于存储所需信息并且可由计算机110存取的任何介质。通信介质一般包含调制数据信号例如载波或其他传输结构中的计算机可读指令、数据结构、程序模块或其他数据,并且包括任何信息发送介质。术语“调制数据信号”是指以在信号中编码信息这样一种方式设置或改变其一个或多个特性的信号。为了举例,而不是限制,通信介质包括诸如有线网络或直线连接的有线介质,和诸如声学、RF、红外、及其他无线介质的无线介质。上述介质的任意组合也都包含在计算机可读介质的范围之内。
***存储器130包括以易失性和/或非易失性存储器为形式的,诸如只读存储器(ROM)131和随机存取存储器(RAM)132的计算机存储介质。基本输入/输出***133(BIOS)一般存储在ROM131中,所述基本输入/输出***133包含促进计算机110内部元件之间,例如在启动期间的信息的传送的基本例程。RAM132一般包含可由处理单元120快速存取和/或即时操作的数据和/或程序模块。为了举例,而不是限制,附图1示出了操作***134、应用程序135、其他程序模块136,和程序数据137。
计算机110还可以包括其他可移动/不可移动、易失性/非易失性计算机存储介质。仅为了举例,附图1a示出了从不可移动、非易失性磁介质读取或向其写入的硬盘驱动器141,从可移动、非易失性磁盘152读取或向其写入的磁盘驱动器151,以及从可移动、非易失性光盘156,例如CD-ROM或其他光盘介质读取或向其写入的光盘驱动器155。其他可用于所述典型的操作环境中的可移动/不可移动、易失性/非易失性计算机存储介质包括,但不局限于盒式磁带、闪存卡、数字通用光盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器141一般通过不可移动存储器接口,如接口140连接到***总线121,且磁盘驱动器151和光盘驱动器155一般通过可移动存储器接口,例如接口150连接到***总线121。
上述讨论并在图1中示出的驱动器及其相关的计算机存储介质,提供对计算机可读指令、数据结构、程序模块及其他用于计算机110的数据的存储。在图1中,例如,硬盘驱动器141示意为存储操作***144、应用程序145、其他程序模块146和程序数据147。应当注意,这些部件既可以与操作***134、应用程序135、其他程序模块136和程序数据137相同也可以不同。操作***144、应用程序145、其他程序模块146、以及程序数据147给出了不同的标记,以最低限度说明它们是不同的版本。用户可以通过输入设备,例如键盘162和点击设备161,通常称作鼠标、轨迹球或触摸板,将命令和信息输入到计算机110中。其他输入设备(未示出)可以包括麦克风、操纵杆、游戏柄、圆盘式***天线、扫描仪等等。这些及其他输入设备通常通过耦合到***总线121的用户输入接口160连接到处理单元120,但是也可以通过其他接口和总线结构,例如并行端口、游戏端口或通用串行总线(USB)连接。
监视器191或其它类型的显示设备也可以通过接口,如视频接口190连接到所述***总线121。图形接口182,如北桥,也可以连接到***总线121。北桥是与CPU或主处理单元120通信的芯片组,并且承担加速图形端口(AGP)通信的责任。一个或多个图形处理单元(GPUs)184可以与图形接口182通信。在这点上,GPUs184通常包括片内存储存储器,例如寄存器存储器,并且GPUs184与视频存储器186通信。但是,GPUs184仅仅是协处理器的一个例子,且在计算机110中可以包含多种协处理设备。监视器191或其它类型的显示设备也可以通过接口,例如视频接口190连接到***总线121,其可以轮流与视频存储器186通信。除了监视器191,计算机还可以包括其他外部设备输出设备,例如扬声器197和打印机196,这些设备可以通过输出外部设备接口195连接。
计算机110可以使用逻辑连接到一个或多个远程计算机,例如远程计算机180,而工作在网络环境中。远程计算机180可以是个人计算机、服务器、路由器、网络PC、端对端设备或其他公共网络节点,并且一般包括上述与计算机110相关的多个或所有元件,尽管在图1a中仅示出了存储器存储设备181。在图1a中描述的逻辑连接,包括局域网(LAN)171和广域网(WAN)173,但是也可以包括其他网络。这种网络环境通常在办公室、企业范围计算机网络、企业内部互联网和因特网中。
当用在LAN网络环境中时,计算机110通过网络接口或适配器170连接到LAN171。当用在WAN网络环境中时,计算机110一般包括调制解调器172或其他用于通过WAN173,例如因特网建立通信的装置。调制解调器172,可以是内部的或外部的,其可以通过用户输入接口160或其他适合的结构连接到***总线121。在网络环境中,相对于计算机110描述的程序模块或部分该模块,可以存储在远程存储器存储设备中。为了举例,而不是限制,附图1a示出了驻留在存储器设备181中的远程应用程序185。将会理解到所示的网络连接是示意性的,也可以使用其他建立计算机之间通信链接的装置。
本领域普通技术人员能够理解到计算机110或其他客户机设备可以配置作为计算机网络的一部分。在这点上,本发明属于具有任意数量的存储器或存储单元,以及任意数量的应用程序,和任意数量的存储器单元或卷中发生的处理过程的任意计算机***。本发明可以应用于具有服务器计算机和客户机计算机的环境中,该环境是在网络环境中配置的,并含有远程或本地存储器。本发明还可以应用于独立的计算设备中,该设备具有程序设计语言功能、解释和执行能力。
用于创建、管理和使用代码段的***和方法
附图2是根据本发明的一个实施例,用于创建、管理和使用代码段的***的方框图。在图2中,计算机202表示但不局限于一种如本发明可以驻留于其上的用户或开发型计算机的计算机。本发明可以被实现作为集成设计环境或作为独立***部件。所述工具可以包括代码段管理器216,及以下一个或多个部件:代码段库222,一个或多个语言调试器,这里由调试器214表示,一个或多个语言设备(未示出),一个或多个由编辑器206表示的编辑器,用于起草和编辑源代码212,以及一个或多个编译器,由编译器208表示。那些本领域普通技术人员将会理解设计环境IDE204也可以包括在图2中未示出的其他部件。
源代码文件212一般为程序员或开发者键入或编辑的一组指令,并且以一给定的编程语言或编程语言的组合来编写。源代码212一般包括一个或多个语句,每个语句一般包括一个或多个表达式和/或实体。所述语句中的表达式和/或实体可以由多个部分构成。源代码212可以通过编辑器206创建或修改,并且存留在一稳定的存储介质中。
使用设计环境(例如典型的集成设计环境(IDE)204)可以从源代码212创建应用程序。所述设计环境可以包括一个或多个编译器,这里由编译器208表示,一个或多个语言设备(未示出),一个或多个设计工具(这里由调试器214表示)、一个或多个编辑器,这里由编辑器206表示,浏览器(未示出)等等。IDE204例如可以表示MICROSOFT VISUAL STUDIO.NET,或者MACROMEDIA的DREAMWEAVER,或者BORLAND C++ BUILDER STUDIO6或者其他任何软件开发/设计工具、编译器或环境。
诸如IDE204的设计环境可以从源代码212产生能够运行于独立执行的环境中(未示出)的可执行代码210,或者可以产生经过再次解译或编译的代码的中间形式,并且由执行环境运行。这种执行环境可以包括为了从源代码212运行由设计环境IDE204产生的编译所需的元素。所述执行环境可以包括从非特定设备中间语言代码产生本机代码的元素。此外开发和执行环境可以包括各种类库(未示出)。一个适合的执行环境可以表现为例如MICROSOFT COMMONLANGUAGE RUNTIME.NET,或JAVA,或者其他任何适合的执行环境。可执行应用程序可以与共享类库和执行环境一起加载到一个或多个计算机中(未示出)并运行。
编辑器206帮助计算机程序源代码212的开发。编辑器206可以是BASIC,COBOL,FORTRAN,C,C++,aC#,JAVA,J#,VISUALBASIC,REALBASIC,DELPHI,ASP,PASCAL,HTML,XML,ADA,PERL,DYLAN,PYTHON,SMALLTALK,TCL-TK,EIFFEL编辑器等等。
编译器208可以表现为BASIC,COBOL,FORTRAN,C,C++,C#,JAVA,J#,VISUALBASIC,REALBASIC,DELPHI,ASP,PASCAL,HTML,XML,ADA,PERL,DYLAN,PYTHON,SMALLTALK,TCL-TK,EIFFEL编译器或解释器或其他任何适合的编译器或解释器。
在本发明的一个实施例中,代码段由代码段管理器216接收,转换成诸如XML文件的文件,并保存在代码段库222中。然后根据以下更完整的说明,代码段库222中的代码段可以用于***在源代码中。
图3是根据本发明的一个实施例用于创建、存储和重复使用代码段的过程的流程图。下面参照附图3,在步骤302,产生用于保存和重复使用的代码段,可以选择源程序中的一部分代码(例如,通过加亮一部分代码和右键点击或通过其他任何适合的方式)。在本发明的一个实施例中,在选择一个代码块包含在代码段库222中之后,显示一个新的程序编辑器用户界面的会话。在这点上,在本发明的一个实施例中,代码段的创建者能够编辑所述代码段,设置一个或多个选择的元素或部分代码段的缺省值,定义一个选择作为一个可修改的对象、变量或常量等等,并且如果选择重复使用,则提供用于修改所述代码段部分的帮助文本。预期的修改类型也可以指定。(作为非限制性的一个例子,对象、变量或基本式可以是整数型、字符串型或类)。类型的模板可以与可修改元素关联。例如,如果一个代码段与一个数据源交互,则该代码段可以与一个数据库表,以及该表所涉及的强类型对象相关联。此外,可以提供代码段的标题、搜索以查找该代码段的关键字,如果选择重复使用,可以为代码段中所选择的元素指明用于修改所述代码段的提示和/或注释。显示有关可从其在源程序的原始应用中推得的代码段的元信息。其与用户所需的其他任何附加元信息都可以与所述代码段相关联。
在步骤304,在本发明的一个实施例中所述代码段被转换成一个XML文件。在图4中示出了可从代码段创建的一个典型的XML文件400。在本发明的一个实施例中库222是一个重复使用的对象的集合,并且包括一个或多个编码代码段,例如示意的编码代码段400。编码代码段400可以包括以下一项或多项:代码段的标题404,由开始和结束标记402a和402b指示(“<title>”),由开始标记“<uniqueid>”408a和结束标记“<uniqueid>”408b指示的唯一的标识符406,以及包括诸如代码段的版本,代码段的地点,代码段的作者,代码段是干什么的描述,代码段帮助主题的统一资源***(URL),代码段所属的一个或多个种类(例如诸如某一类),可以用于查找所述代码段的关键字,打算在其上运行代码段的执行环境的版本,诸如由运行所述代码段所需的库和集合的引用,代码段中控件、对象、常量等的声明,用于编码代码段的编程语言,代码段410中的实际代码和所需要的其他信息。将会理解到,在XML文件中,代码段的这些部分可以通过任何适合的开始和结束标记来划定界限,根据参照上述分隔符所选择的特定标记仅仅是示意性的。任何适合的标记或指示符都可以用于识别存留的信息。同时也将会理解到,虽然在本发明的一个实施例中,所述文件是XML文件,所述元信息在该XML文件中编码,但是在其他实施例中,所述信息可以在非XML文件的一个或多个文件或数据库中进行编码。
在步骤306,开发者或其他用户为了重复利用所述代码,可以存取编码代码段例如库222中的编码代码段400。在本发明的一个实施例中,为了在一个新的环境中重复利用,代码段库222中的编码代码段可以从开发环境内部存取。附图5示出了本发明的一个实施例的典型屏幕图500,其中显示有一程序编辑器用户界面,并且其中上下文菜单504显示为一个可能的选项“***片断”504a(在图5中简化为“***”)。在选择“***片断”504a之后,显示一列操作,其中“执行代码”504b是一项操作,并且显示可能的编码代码段,其中显示“读命令行变元”(简化为“READ COM LINE ARGS”504c)。在选择编码代码段504c之后,所选择的编码代码段的代码部分被***到程序源代码212中。对将不能正确地***指示***到特定位置的代码段可以变成灰色或者禁止选择。
在本发明的一个实施例中,为了重复使用,开发者或其他用户通过引出驱动器或目录内容的显示,并从驱动器或目录内容显示(即库)中选择和拖拽所述编码代码段可以存取诸如库222的编码代码段400之类的代码段库的成员,如图6的典型屏幕图600所示,其中已这样选择了编码代码段602。在其他实施例中,代码段可以通过选择用于编辑器中的文本的公知方式进行选择。表示所选择的代码段将被***的位置的光标604由一个竖线606标明。在一个实施例中如果所选择的***代码段的位置是一个允许***的位置,则仅显示竖线606。
附图7是根据本发明的一个方面,将一个代码段***到源代码的过程。在步骤702,选择***到源代码的代码段。附图5和6表示选择***代码段的两种方法,尽管如此,如上所解释的,也可以计划用其他选择代码段的方法。
在步骤704,对编码代码段进行解析以确定可用的元信息。在一个实施例中,其中所述代码段被编码作为一个XML文件,对该XML代码进行解析以确定由XML标记划定界限的元信息元素,如上所述的。
在步骤706,比较所述代码段元信息中的编程语言与源代码编程语言。如果所述编程语言不兼容,则不允许***所述代码段。(例如,如果选择***的代码段为C++代码段,则该代码段要***的源代码必须也是C++代码)。预期的可以实现本发明的编程语言包括BASIC,COBOL,FORTRAN,C,C++,C#,JAVA,J#,VISUALBASIC,REALBASIC,DELPHI,ASP,PASCAL,HTML,XML,ADA,PERL,DYLAN,PYTHON,SMALLTALK,TCL-TK,EIFFEL以及其他任何编程语言。
在步骤708,确定将所述代码段***到源代码中的可行性。例如,在MICROSOFF VISUAL BASIC语言中,属性不能放置到方法中,因此在步骤708,在本发明的一个实施例中,不允许将属性代码段***到方法中。同样地,在本发明的一个实施例中,如果代码行不能封装入方法中,所述代码行将不能***到名字空间或模块中,因为代码行必须包含在诸如例程、属性或函数之类的过程内。在本发明的一个实施例中,包括函数的代码段不可以***到其他函数内。在本发明的一个实施例中,类、结构、或接口定义都不可以***到方法内。上述所列的及其他***规则可以应用到包括C#的多种编程语言、以及诸如上述所列的其他多种语言中。
在步骤710,所述代码段被拷贝到源代码的指示位置(例如当选择该代码段时,通过光标位置所确定的位置)。图8示出了本发明一个实施例的典型屏幕图,其中由分界线806划定界限的代码段802已被***到源代码804中。可以显示如由注释814和816所示的一个或多个注释。注释可以提供有助于为其新环境而修改所述代码段的信息(例如注释814),或者可以包括一个帮助主题(例如注释816)或其他适合的信息的链接,并且如上所论述的,可以表示生成所述代码段时由该代码段的创建者所输入的注释信息。
在步骤712,识别每个可能需要修改例如但不局限于诸如但不局限于所述代码段内的常量、控件以及对象的字段的元素(例如,通过比较以适当的标记划定界限的XML文件中的元信息与在所述代码段的代码部分找到的识别控件、常量和对象)。将所识别的常量、控件、和对象等高亮显示,或者在源代码中区分,如图8中由控件810和812所示的。
在步骤714,在所述编码代码段文件中检查表示库、组件和运行所述代码段所需的其它编程元素的输入和引用,并且将那些还未包含在源代码中的输入和引用***到源代码中(例如,图12的输入语句1202已被***,并且引用列表已被更新为包括“System.Web”1204)。
在步骤716,由脱字符号或光标表示的焦点以及加亮移动到需要修改的第一个元素(例如TextBox1 810)。在步骤718,激活标记。在一个实施例中,通过在具有焦点的元素周围显示边界来指示激活,如由边界820所示的。
在本发明的一个实施例中,改变一个常量、变量或控件的操作,导致自动更新相同代码段内的所有其它常量、变量或控件的实例。例如,如图8所示,假定将“TextBox1”810变为“TextBox2”。在本发明的一个实施例中,在改变“TextBox1”810为“TextBox2”之后,“TextBox1”812同样自动变为“TextBox2”。
在本发明的一个实施例中,在接收一个指定的用户操作或事件之后(例如但不局限于:输入CONTROL+SPACE),显示变量的有效替代表。在本发明的一个实施例中,包含在列表框1004中的项包括缺省元素和出现在源代码内的任何相似元素。例如,下面参照图10,如果在选择“TextBox2”1002之后,输入CONTROL-SPACE,列表框1004包括元素TextBox1 1014(缺省),以及任何存在于所述表格中的TextBox变量(例如附有图标或指示这是来自源代码的一个元素的指示符1012的TextBox1 1008,以及TextBox2 1010)。所述列表中的一项可以提供一个选项来声明所选择元素的其他实例。例如,在图10中,NewTextBox1006就是这样一种元素。选择NewTextBox 1006会导致声明TextBox变量的一个新的实例,如图11线1102所示的。在所示的例子中,“TextBox1”1014是由所述代码段的创建者为该元素指定的缺省值。在本发明的一个实施例中,自动附加一个数字到所述缺省值上以创建一个唯一的名字。如果声明了其他新的元素,则可以再次增加新实例的名字(例如产生唯一的标识符“TextBox12”)。
在本发明的一个实施例中,保持代码段802的分界线806。按下tab键,将使激活操作移动到下一个可能修改的标记字段。在已到达最后的标记字段之后,在本发明的一个实施例中再次按下tab键,将会使激活操作移动到所述代码段的第一个字段。在本发明的一个实施例中,撤销选项允许用户将所述代码段返回到其原始状态(即在选择重复使用代码段之后,该代码段被原始地***到源代码中)。
附图9示出了根据本发明的一个方面可以显示的提示。当选择与所述提示相关的一个元素904时,显示提示902。在本发明的一个实施例中,通过在与一个提示相关的字段内悬浮光标,来显示提示。
在此所述的各种技术可以结合硬件或软件来实现,或者适当的两者的结合来实现。因此,本发明的方法和装置,或其某些方面或部分,都可以采取包含在有形介质中的程序代码(即指令)的形式,例如软盘、CD-ROMs、硬盘驱动器、或其他任何机器可读的存储介质,其中,当程序代码装载到机器中并由机器例如计算机执行时,该机器成为用于实施本发明的装置。在可编程计算机上执行程序代码时,通常计算设备将包括处理器、可由处理器读取的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入设备,以及至少一个输出设备。可以使用本发明特定域的编程模型,例如通过使用数据处理API等创建和/或执行的一个或多个程序,最好用高级程序或面向对象的编程语言实现,从而与计算机***进行通信。但是,如果需要的话,所述程序也可以以汇编或机器语言实现。在任何情况下,所述语言都可以为编译或解释语言,并且可与硬件实现结合。
虽然已结合各附图的优选实施例对本发明进行了说明,但是可以理解其它类似的实施例也是能够使用,或者可以对所描述的实施例进行修改或添加,以执行与本发明相同的功能而不背离本发明。因此,本发明并不应当局限于任何单个实施例,而是在宽度和范围上根据所附的权利要求进行解释。