详细说明
在所描述的实施中,通过使用该过程的元数据说明,运行时间多态性允许使用增强的多态性模式在运行时间将任意类型的对象强制转换到新的类型中。以下所描述的至少一项实施定义以在运行时间被加以解释的元数据形式定义了多态性,而不是在编译时间定义多态性。
以下所描述的至少一项实施通过包括对该源对象的各个特点的引用,增强了多态性,而不是单单根据类型来使对象多形态。例如,该元数据可以用特殊名称描述关于该源对象的属性,而不考虑其类型。另外,关于运行时间多态性的以下所描述的至少一项实施启用未知的源类型,以便在运行时间发现源类型信息,而不是在编译时间充分定义该源类型信息和该目的类型信息。
此外,利用正用于使任何源类型能进行多对一强制转换的相同的运行时间强制转换定义,以下所描述的至少一项实施可处理多种任意的源类型到目的类型的多态性,而不是依靠一对一强制转换,其中,利用关于每种唯一的源类型的唯一的目的类型,使一特定类型多态化为另一种特定类型。这样,可以使多个源对象多态化为单一的目的对象。而且,以下所描述的至少一项实施在运行时间很灵活,以便不管在运行时间所发现的源类型如何,都可建立目的类型。
图1是框图100,展示了运行时间多态性的第一种示范途径。在所描述的实施中,框图100包括由实线划定界线的运行时间环境(RTE)110。对象102属于第一种类型(例如,第一种类别的类型(比如“类型1”))。如从运行时间环境110的这些实线那里延伸的虚线所指出的,可以在运行时间环境110内或在运行时间环境110外定义对象102,例如,在运行时间环境110初始化之前。
如所展示的,运行时间环境110包括属于第二种类型(例如,第二种类的类型(比如“类型2”))的被强制转换对象104。运行时间环境110也包括强制转换过程106和元数据108。在运行时间环境110中时,通过使用元数据108,并经由强制转换过程106,这第一种类型的对象102多态化为这第二种类型的被强制转换对象104。例如,强制转换过程106涉及解释关于从对象102中创建被强制转换对象104的元数据说明108。
图2是流程图200,展示了关于运行时间多态性的第一种示范方法。流程图200包括三(3)个方框202-206。在方框202处,输入运行时间环境。例如,(图1中的)运行时间环境110可能被启用(或可能已经存在)。在方框204处,发现关于对象的源类型。例如,通过从运行时间环境110内检查对象102,可以发现对象102的类类型或类似的类型。
在方框206处,通过使用元数据从该对象强制转换它,来创建被强制转换对象。例如,可以使用元数据108将对象102强制转换到被强制转换对象104。换言之,在运行时间环境110中时,编码可以将对象102强制转换到被强制转换对象104。另外,在维持运行时间环境110的同时,可以(例如)根据应用程序或响应于用户界面输入,来修改元数据108。也可以在强制转换过程106中使用这种修改过的元数据,以便从(这第一种类型的)对象102中或从其他对象中创建(第三种类型的)被强制转换对象104。
通过使用多态性,可以允许将一种类型用作另一种类型。在所描述的示范实施中,关于运行时间多态性的元数据定义额外的强制转换函数或映射,以允许基于该类型和不一定是整体意义上的该类型的单独的特点的一种类型的强制转换。结果,各种类型本身可以在不同的时间被加以定义,而无须在编译时间具备关于其他类型的特殊知识,同时,这些类型仍然在运行时间被强制转换回(和任选地向前转换)。例如,可以作为强制转换目标的一种或多种类型的这些单独的特点是源对象上所包括的属性的名称和类型以及该源对象上所包括的方法的名称和签名。
在所描述的实施中,四项示范的强制转换操作可以被用于在源对象与目的对象之间映射特点:
(1)方法和属性的1对1映射
这项强制转换操作可以定义从具有特定名称的源属性或方法到具有特定名称的目的属性或方法的映射。这些属性可以具有同一种类型或不同的类型,尤其当可以来回强迫使用那些类型时。此外,可以将该源对象上的方法调用暴露为该目的对象上的属性,反之亦然。
(2)方法和属性的1对无映射
这项强制转换操作可以不将源属性或方法映射到该目的对象中的任何事物。换言之,该目的对象上无该源属性或方法可供使用。
(3)方法和属性的多对1映射
这项强制转换操作允许程序设计者或其他用户将目的属性或方法的该值定义为一个或多个源属性和/或方法调用的函数。这个函数可以是从源对象到目的对象单向的,或者,它可以是双向的。利用双向映射,可以在该目的对象上设置属性或方法,同样可以在该源对象上对其进行自动设置。如同在以上的(1)中,可以将该源对象上的方法调用暴露为该目的对象上的属性,反之亦然。
(4)新的方法和属性
这项强制转换操作允许在不是该源对象的特点或函数的该目的对象上定义新的属性或方法。该目的对象上的这些所产生的属性可以被认为是“expando”属性。
图3是框图300,展示了运行时间多态性的第二种示范途径。框图300包括对象102、被强制转换对象104和运行时间强制转换说明302。运行时间强制转换说明302是(图1中的)元数据108的例子。对象102和被强制转换对象104每个可以包括至少一个特点,或者可以与至少一个特点(例如,方法或属性)有关联。在所描述的实施中,属性是由对象拥有并由用于对象的名称来识别的数据,方法是由该对象拥有的代码例行程序。
更明确地说,对象102和被强制转换对象104每个可以具有一个或多个属性和/或一种或多种方法。如所展示的,对象102包括多个属性102P1、102P2、102P3、102P4、102P5……102Pn,以及多种方法102M1……102Mn。被强制转换对象104包括多个属性104P1、104P2、104P3、104P4……104Pn,以及多种方法104M1……104Mn。
在所描述的实施中,运行时间强制转换说明302包括一项或多项映射说明302M。如所展示的,运行时间强制转换说明302包括至少七(7)项示范映射说明302M:(属性)反映映射说明302M1、变换映射说明302M2、重新命名映射说明302M3、函数映射说明302M4、(属性)宣称映射说明302M5、(方法)反映映射说明302M6和(方法)宣称映射说明302M7。
运行时间强制转换说明302也可以明显地或隐含地包括滤波器映射说明302Mn。例如,在隐含的滤波器映射说明302Mn中,运行时间强制转换说明302可以省略对将不被强制转换(到被强制转换对象104)的(对象102的)实际或潜在的特点的任何引用。例如,在明显的滤波器映射说明302Mn中,运行时间强制转换说明302可以肯定地指出:(对象102的)所列举的特殊的特点和/或未加规定的一般特点将不被强制转换(到被强制转换对象104)。
这七项映射说明302M1……302M7中的每项映射说明对应于各自的映射或特点强制转换操作304(1)……304(7)。明确地说,框图300展示了七(7)个示范的对应的映射304,如下所述:(属性)反映映射304(1)、变换映射304(2)、重新命名映射304(3)、函数映射304(4)、(属性)宣称映射304(5),(方法)反映映射304(6)和(方法)宣称映射304(7)。关于属性特点和方法特点中的任何一种特点或这两种特点的过滤映射304(n)也可以由运行时间强制转换说明302来实施。
所以,可以在强制转换操作中使用映射说明302M中的一项或多项映射说明,以便将对象102强制转换到被强制转换对象104。每项单独的特点强制转换操作304由实线箭头和虚线箭头来表现。该实线箭头指出从对象102到被强制转换对象104的连接,该虚线箭头指出从被强制转换对象104到对象102的“向后”连接。以下进一步描述这个运行时间结合的方面。
单独的特点强制转换操作304可以被实行如下。反映映射304(1)将属性102P1直接反映到属性104P1中。变换映射304(2)为属性104P2转换一个或多个属性(例如,属性102P2的读取、写入、类型等)。重新命名映射304(3)将属性102P3改名为属性104P3。
函数映射304(4)将被强制转换对象104的属性104P4作为对象102的至少一个属性的函数来加以强制转换。如所展示的,属性104P4根据函数映射说明302M4是属性102P4和属性102P5的函数。关于宣称映射304(5),新近为被强制转换对象104宣称了属性104Pn,作为到和/或来自对象102的延伸。关于滤波器映射304(n)和对象102的属性102Pn,属性102Pn被加以过滤,作为解释运行时间强制转换说明302的结果,使得不为被强制转换对象104强制转换与此对应的属性。
反映映射304(6)将方法102M1直接反映到方法104M1中。关于宣称映射304(7),根据宣称映射说明302M7,新近为被强制转换对象104宣称方法104Mn,作为到和/或来自对象102的延伸。关于滤波器映射304(n)和对象102的方法102Mn,方法102Mn被加以过滤,作为解释运行时间强制转换说明302的结果,使得被强制转换对象104中不包括与此对应的方法。
框图300展示了从对象102创建被强制转换对象104的示范强制转换操作。如上所述,这项强制转换操作能够如这些虚线箭头所指出的那样来维持从被强制转换对象104到对象102的向后连接。所以,可以认为对象102与被强制转换对象104之间的连接具有向前的方面和向后的方面。如这些实线箭头所表现的,该向前连接方面在对象102与被强制转换对象104之间建立关系。如这些虚线箭头所表现的,该向后连接方面在对象102与被强制转换对象104之间建立运行时间的绑定。通过分离的方式和/或彼此结合的方式,该向前连接和向后连接促进了(i)对象102到被强制转换对象104和(ii)被强制转换对象104到对象102的运行时间的绑定。
应该注意,每项单独的特点强制转换操作304可能不具备相关的向后连接。例如,关于属性宣称映射304(5)和方法宣称映射304(7)的向后连接可能不相关。另一个例子是:可能难以或无法创立关于特定的函数映射304(4)的向后连接。
在所描述的实施中,运行时间强制转换说明302可能尝试为被强制转换对象104强制转换一目的特点,对于该对象104,没有如该特定的映射说明302M所期望的、对象102中的对应的源特点。例如,变换映射说明302M2期望对预定属性102P2进行定位,用于强制转换到属性104P2。但是,当在运行时间环境110中进行操作时,对象102中可能不存在这种预期的预定特点。关于这类可能发生的事件和/或不测事件,被定义成期望对源对象中的预定特点进行定位的一项或多项(包括所有的)映射说明302M可以包括一个或多个默认参数,用于:当该源对象缺乏该预期的预定特点时,为该目的对象创建被强制转换的特点。
图4是流程图400,展示了关于运行时间多态性的第二种示范方法。流程图400包括六(6)个方框402-412。流程图400提出一种所描述的实施,其中,可能无法在强制转换操作期间从源对象中检索到预期的预定特点。
在方框402处,输入运行时间环境。例如,(图1中的)运行时间环境110可能在代码处理计算设备中被启用(或可能已经存在于代码处理计算设备中)。在方框404处,从运行时间强制转换说明中检索关于对象的预定特点的映射说明。例如,可以从运行时间强制转换说明302中检索关于对象102的预定特点(例如,属性102P或方法102M)的(图3中的)特定的映射说明302M。
在方框406处,确定该对象中是否存在该预定特点。例如,检查对象102的特点102P和102M,以确定对象102内是否存在特定的映射说明302M所预期的预定特点。如果是,则在方框408处,根据该映射说明,将该对象的该预定特点作为被强制转换特点强制转换到被强制转换对象中。例如,根据特定的映射说明302M,将对象102的预期的预定特点102P或102M作为被强制转换特点104P或104M强制转换到被强制转换对象104中。
另一方面,如果在方框406处确定该对象中没有该预期的预定特点,那么,在方框410处,根据该运行时间强制转换说明来确定关于该预定特点(和/或该被强制转换的特点)的默认参数。这类默认参数具体地说可能是该映射说明的一部分,通常也可能是该运行时间强制转换说明的一部分。例如,可以参考全部的运行时间强制转换说明302和/或特定的映射说明302M,以确定关于对象102的预期的预定特点102P或102M(和/或被强制转换对象104的将要被强制转换的特点104P或104M)的默认参数。
在方框412处,根据该映射说明,将这些默认参数作为该被强制转换特点强制转换到该被强制转换对象中。例如,通过应用特定的映射说明302M的命令,并且/或者,通过将该默认参数直接放入被强制转换特点104P或104M而不作修改,可以将该默认参数强制转换到对象104的被强制转换特点104P或104M中。如被环绕的“A”和“B”所指出的,在执行方框408和412中的任何一个方框的动作之后,可以在方框404处继续流程,以处理该运行时间强制转换说明的另一项映射说明。
图5A是框图500A,该框图展示了运行时间多态性的第三种示范途径。框图500A包括:两个应用程序502和504;运行时间强制转换说明302;以及四个对象102(A)、102(B)、104(C1)和104(C2)。如为所描述的实施而展示的,应用程序502和504表现一般应用程序504和(可再用的)服务程序库502,它们可任选地可能是操作系统的一部分。
服务程序库502和应用程序504可以经由消息或类似的机制并使用链路506在彼此之间进行通信。应用程序504包括两个对象或与两个对象有关联,这两个对象是:类型“A”的对象102(A)和类型“B”的对象102(B),其中,类型A不同于类型B。在这个例子中,应用程序504请求:服务程序库502执行运行时间强制转换操作,以便从对象102(A)和对象102(B)中创建具有相同类型的两个对象。应该注意,应用程序504可以作为另一种方式执行该运行时间强制转换操作,而无须调用任何其他的应用程序。
服务程序库502使用运行时间强制转换说明302来控制所请求的运行时间强制转换操作。运行时间强制转换说明302可以由应用程序504、由服务程序库502、由操作系统(图5A中未作明确的展示)、由另一个应用程序等来提供。通过解释运行时间环境110中的运行时间强制转换说明302,可根据强制转换操作304(AC)中的对象102(A)来创建类型“C”的被强制转换对象104(C1)。同样,通过解释运行时间环境110中的运行时间强制转换说明302,可根据强制转换操作304(BC)中的对象102(B)来创建也具有类型“C”的被强制转换对象104(C2)。
这样,两种不同类型A和B的对象102(A)和对象102(B)被分别强制转换到同一种类型C的对象104(C1)和对象104(C2)。另外,不需要从相同的基类中导出对象102(A)和对象102(B)。至少部分地通过使用滤波器映射说明302Mn来过滤并非共有的特点,通过使用宣称映射说明302M5和/或302M7,并且/或者通过当如运行时间强制转换说明302中所规定的预期的预定特点不位于源对象中时依靠默认参数,可以实现不同类型的对象到相同类型的对象的这种强制转换。应该理解:也可以实施其他的映射说明302M,用于将不同类型的对象强制转换到相同类型的对象。
图6A是流程图600A,该流程图展示了关于运行时间多态性的第三种示范方法。流程图600A包括五(5)个方框602-610。在方框602处,应用程序调用服务程序库组件。例如,(图5A中的)应用程序504可以调用服务程序库502。在方框604处,该应用程序将第一种类型的第一对象和第二种类型的第二对象提供给该服务程序库。例如,应用程序504可以使用链接506将类型A的对象102(A)和类型B的对象102(B)(通过指针引用等直接地)提供给服务程序库502。
在方框606处,该服务程序库使用运行时间强制转换说明,将这第一对象强制转换到第三种类型的第一被强制转换对象。例如,服务程序库502可以使用运行时间强制转换说明302,将强制转换操作304(AC)中的对象102(A)强制转换到类型C的被强制转换对象104(C1)。在方框608处,该服务程序库使用该运行时间强制转换说明,将这第二对象强制转换到这第三种类型的第二被强制转换对象。例如,服务程序库502可以使用运行时间强制转换说明302,将强制转换操作304(BC)中的对象102(B)强制转换到类型C的被强制转换对象104(C2)。
在方框610处,该服务程序库维持由这些强制转换操作建立的绑定。这些绑定在这第一对象与这第一被强制转换对象之间,以及在这第二对象与这第二被强制转换对象之间。在终止这第一被强制转换对象和/或这第二被强制转换对象之前,可以维持这些绑定。举例来讲,服务程序库502可以维持对象102(A)与被强制转换对象104(C1)之间的绑定,以及对象102(B)与被强制转换对象104(C2)之间的绑定。作为选择,应用程序504或其他代码可以分别维持对象102(A)和102(B)跟被强制转换对象104(C1)和104(C2)之间的绑定。无论如何,都可以维持这些绑定,而无须进一步引用运行时间强制转换说明302。
图5B是框图500B,该框图展示了运行时间多态性的第四种示范途径。框图500B包括多个对象102(1,2…n)、运行时间强制转换说明302和被强制转换对象104。如所展示的,强制转换操作中涉及对象#1 102(1)、对象#2 102(2)和对象#n 102(n),以便使用运行时间强制转换说明302来创建被强制转换对象104。这样,可以使用运行时间强制转换说明302将两个或更多的对象102(1,2…n)强制转换到被强制转换对象104。
在所描述的实施中,通过使用运行时间强制转换说明302中的一项或多项特点映射说明302MF,从多个对象102(1,2…n)中创建被强制转换对象104。运行时间强制转换说明302包括映射说明302MF1和映射说明302MF2。多个对象102(1,2…n)中的每个对象至少包括一个特点102F(1,2…n),例如,源特点。如框图500B中所示,被强制转换对象104至少包括两个被强制转换特点104F(1,2),例如,目的特点。
映射说明302MF1利用特点映射304(111),将来自一个对象的一个特点映射到该被强制转换对象的一个被强制转换特点。明确地说,特点强制转换操作304(111)将对象#1 102(1)的特点102F1强制转换到被强制转换对象104的被强制转换特点104F1。映射说明302MF2利用特点映射304(222)/304(n22)/304(2n22),将来自多个(不同的)对象的多个特点映射到该被强制转换对象的一个被强制转换特点。明确地说,特点强制转换操作304(222)/304(n22)/304(2n22)将对象#2 102(2)的特点102F2和对象#n 102(n)的特点102Fn强制转换到被强制转换对象104的被强制转换特点104F2。
虽然图5B中如此展示,但是,应该理解:任何单一的强制转换操作中不都需要一定发生特点映射304(111)和特点映射304(222)/304(n22)/304(2n22)。另外,在示范实施中参照以下关于图7和图8的说明,对象#1 102(1)可以对应于字符串表格对象,对象#2 102(2)可以对应于图像对象,对象#3 102(3)(其中,n=3)可以对应于文件对象。应该注意,在这种示范实施中,运行时间强制转换说明302中可能包括不同的映射说明302MF。
图6B是流程图600B,该流程图展示了关于运行时间多态性的第四种示范方法。流程图600B包括两(2)个方框612和614。在方框612处,使用第一映射说明将第一对象的第一个特点强制转换到被强制转换对象的第一个被强制转换特点。例如,可以将对象#1 102(1)的(图5B中的)特点102F1强制转换到被强制转换对象104的被强制转换特点104F1。
在方框614处,使用第二映射说明将第二对象的第二个特点和第三对象的第三个特点强制转换到该被强制转换对象的第二个被强制转换特点。例如,可以将对象#2 102(2)的特点102F2和对象#n 102(n)的特点102Fn强制转换到被强制转换对象104的被强制转换特点104F2。这第一项和第二项(特点)映射说明可能来自相同的运行时间强制转换说明(例如,运行时间强制转换说明302)。作为选择,方框614的动作另一方面可能排除这第三对象的第三个特点,使得这第二项映射说明不是它的函数(并且任选地不是函数类型的映射说明)。
图7是框图700,该框图展示了运行时间多态性的第五种示范途径。框图700包括两个强制转换对象702V和702A、规则704、图形用户界面(GUI)方框706、经由GUI方框706而加以呈现的观看方框708、应用程序710和用户712。强制转换对象702V包括观看对象102V、运行时间强制转换说明302和被强制转换对象104V。观看对象102V包括面向观看的、与文件相关的信息。强制转换对象702A包括应用程序对象102A、运行时间强制转换说明302和被强制转换对象104A。应用程序对象102A包括面向应用的、与文件相关的信息。
在所描述的实施中,强制转换对象702V和702A用作按提钢性方式代表对象的增强型对象。这种提钢性对象表示法可以为更大的系统和/或环境提供关于自身的信息(例如,该增强型对象所暴露的那组属性和方法)。在运行时间,增强型对象使用运行时间强制转换说明,以便应用这些正确的映射来执行源对象与目的对象之间的多态特点层次的强制转换操作。
这种增强型对象能够执行该目的对象的各个特点,并且,它可以通过保持对其的内部引用来包括该源对象。该增强型对象使用该运行时间强制转换说明来创建运行时间绑定,这些运行时间绑定有效地执行如在那里所定义的这些特点强制转换操作。对于每种特点强制转换操作,可能有一种绑定。可以在每个绑定的内部用机会主义的方式(opportunistically)来评估这些特点强制转换操作本身。例如,在一对一属性映射中,当更新该目的属性值时,可以更新该源属性值,反之亦然。该更新可以任选地由该增强型对象来处理。
如关于所述实施的框图700中所示,在使用运行时间强制转换说明302的强制转换操作中,强制转换对象702V从观看对象102V中创建被强制转换对象104V。可能根据其间的单独的特点强制转换操作,通过监视对任何一个对象的变化,并通过响应地执行更新,强制转换对象702V能够维持观看对象102V与被强制转换对象104V之间的各种绑定。
同样,在使用运行时间强制转换说明302的强制转换操作中,强制转换对象702A从应用程序对象102A中创建被强制转换对象104A。可能根据其间的单独的特点强制转换操作,通过监视对任何一个对象的变化,并通过响应地执行更新,强制转换对象702A能够维持应用程序对象102A与被强制转换对象104A之间的各种绑定。
虽然未如此示出,但是,关于强制转换对象702V和702A中的任何一种对象或这两种对象的运行时间强制转换说明302可能仅仅与其有关联,并且不一定作为其一部分而被包括在内。此外,强制转换对象702V和702A可以共享运行时间强制转换说明302。也应该注意,例如,可以使用运行时间强制转换说明302从被强制转换对象104V中创建观看对象102V,以有助于维持应用程序对象102A与观看对象102V之间的一致性。
当使用相同的(例如,完全相同的或本质上类似的)运行时间强制转换说明302来加以创建时,被强制转换对象104V和被强制转换对象104A可能属于同一种类型。实际上,通过使用相同的运行时间强制转换说明302,可确保在被强制转换对象104V和104A的构成方面提高确定性和等效性。关于被强制转换对象104V和104A的特点集的所产生的可预测性促进了规则704的公式化及其随后的应用。
换言之,规则704在代码大小和操作复杂性方面会更有效率,这是因为:(i)不需要执行误差校验;以及(ii)保证将要被实行这些规则的这些被强制转换对象的特点集,作为使用运行时间强制转换说明302来强制转换它们的结果。例如,规则704中不需要适应关于被强制转换对象104V和104A的构成的运行时间期间的意外事件或发现,因为这可以得到有效的保证。
在操作中,当观看对象102V和应用程序对象102A分别被观看方框708/GUI706和应用程序710改变时,强制转换对象702V和702A以及规则704用于维持观看对象102V与应用程序对象102A之间的一致性。当应用程序710改变应用程序对象102A时,强制转换对象702A经由应用程序对象102A与被强制转换对象104A之间的各种绑定,将该变化传播给被强制转换对象104A。当对被强制转换对象104A实行规则704时,检测对被强制转换对象104A的变化。规则704将这个变化传播给被强制转换对象104V。
被强制转换对象104A中的该变化经由规则704到被强制转换对象104V的传播由其特点集的等效性的确定性来加以促进。强制转换对象702V经由其间的各种绑定,将被强制转换对象104V中的变化传播给观看对象102V。关于观看708,GUI 706可以用对于用户712而言显而易见的方式来反映观看对象102V中的变化。
也可以按相反的方向来执行用于维持观看对象102V与应用程序对象102A之间的一致性的过程/模式。因此,如果用户712经由观看708/GUI 706来改变观看对象102V,则可以通过被强制转换对象104V、规则704、被强制转换对象104A等,将这类变化传播给应用程序对象102A。应该注意,也可以在不使用强制转换对象702V和702A的提钢性对象表示法的情况下,实现用于维持观看对象102V与应用程序对象102A之间的一致性的过程。
图8是流程图800,该流程图展示了关于运行时间多态性的第五种示范方法。流程图800包括五(5)个方框802-810。(图7中的)框图700展示了管理对象的示范途径的至少一部分,流程图800展示了关于管理对象的示范方法的至少一部分。
在方框802处,使用运行时间强制转换说明将第一种类型的第一对象强制转换到第三种类型的第一被强制转换对象。例如,可以使用运行时间强制转换说明302将(图7中的)应用程序对象102A强制转换到被强制转换对象104A。被强制转换对象104A的类型由运行时间强制转换说明302来确定。这种强制转换可能任选地是增强型对象(例如,强制转换对象702A)的一部分。
在方框804处,使用该运行时间强制转换说明将第二种类型的第二对象强制转换到这第三种类型的第二被强制转换对象。例如,可以使用运行时间强制转换说明302将观看对象102V强制转换到被强制转换对象104V,或者,反之亦然。被强制转换对象104V的类型也由运行时间强制转换说明302来确定,并且等同于该所述实施中的被强制转换对象104A的类型。这种强制转换可能随意地是增强型对象(例如,强制转换对象702V)的一部分。
在方框806处,将算法应用于这第一被强制转换对象和这第二被强制转换对象。例如,可以对被强制转换对象104A和被强制转换对象104V实行规则704(是这类算法的例子),以便对它们进行监视并检测对其的任何变化。另外,可以使用规则704,将在被强制转换对象104A中所检测到的变化传播给被强制转换对象104V,反之亦然。
如果这第一被强制转换对象被一个或多个算法的应用改变(例如,因为这些算法曾将在这第二被强制转换对象中所检测到的变化传播给这第一被强制转换对象),那么,在方框808处,响应于对这第一被强制转换对象的基于算法的变化,来修改这第一对象。例如,利用如根据运行时间强制转换说明302而建立的应用程序对象102A与被强制转换对象104A之间的绑定,通过在其上实行规则704而产生的对被强制转换对象104A的变化可以被传播给应用程序对象102A。
同样,如果这第二被强制转换对象被一个或多个算法的应用改变(例如,因为这些算法曾将在这第一被强制转换对象中所检测到的变化传播给这第二被强制转换对象),那么,在方框810处,响应于对这第二被强制转换对象的基于算法的变化,来修改这第二对象。例如,利用如根据运行时间强制转换说明302而建立的观看对象102V与被强制转换对象104V之间的绑定,通过在其上实行规则704而产生的对被强制转换对象104V的变化可以被传播给观看对象102V。如被环绕的“A”和“B”所指出的,在已执行方框808和810中的任何一个方框的动作之后,可以在方框806处继续流程,以便继续应用这些算法。
在图示中展示了图1-8的各种途径和方法,这些图示被分成多个方框。但是,描述并/或示出这些途径和方法的顺序和/或布局并不意在被解释成起限制的作用,并且,可以按任何顺序来组合、增加、除去和/或重新排列任何数量的这些方框,以便为运行时间多态性执行一种或多种系统、方法、媒体、装置、布置等。另外,虽然这里的说明包括对特殊实施(例如图5A、5B和7中的实施)(以及图9中的示范系统环境)的参考,但是,可以在任何合适的硬件、软件、固件或其组合中实施这些途径和方法,并使用任何合适的数据建模、编程语言、编码机制等。
图9展示了示范的计算操作环境900(或一般计算设备),该示范的计算操作环境900(或一般计算设备)能够为如这里所描述的运行时间多态性(充分或部分地)实现至少一种系统、设备、媒体、部件、途径、方法、过程、及它们的某种组合等。可以在以下所描述的计算机和网络系统结构中,或在单机情况中利用计算环境900。
示范的计算设备操作环境900只是环境的一个例子,它并不意在对这些适用的计算设备结构(包括计算机、消费电子设备、游戏控制台、置顶盒、移动装置等的结构)的使用或功能性的范围提出任何限制。另外,计算设备环境900不会被解释为具有涉及如图9所示的任何一个部件或任何部件组合的任何从属性或要求。而且,这些适用的计算设备不受到其中所使用的处理器/处理机制的限制。例如,这类处理器/处理机制可以包括(但不局限于)电子集成电路(ICs)、量子计算、光计算、机械计算(例如,使用纳米技术)等。
此外,可以利用众多其他的通用或专用计算设备(包括电子的)环境或配置来实施运行时间多态性。可能适用的众所周知的计算(设备)系统、环境和/或配置包括(但不局限于)个人计算机、服务器计算机、瘦客户机、肥客户机、个人数字助理(PDAs)或移动电话、手持设备或便携式设备、多处理器系统、基于微处理器的系统、置顶盒、可编程消费电子设备、电视游戏机、游戏控制台、便携式或手持游戏设备、网络PC、小型计算机、大型计算机、包括任何以上系统或设备及其某种组合等的分布式计算环境。
可以在处理器可执行指令的一般上下文中描述关于运行时间多态性的实施。通常,处理器可执行指令包括执行特殊任务或实施特殊的抽象数据类型的例行程序、程序、对象、组件、数据结构、其他代码等。如这里的某些实施中所描述的,也可以在分布式计算环境中实践运行时间环境中的多态对象强制转换,在这些分布式计算环境中,由通过通信链路和/或网络被连接的远程联接的处理设备来执行任务。尤其在分布式计算环境中,处理器可执行指令可以位于分开的存储媒体(由不同的处理器执行)中,并且/或者存在于传输媒体上或在其上加以传播。
计算设备环境900包括采用计算机902形式的通用计算设备,它可以包括具有计算性能和/或处理性能的任何计算设备。计算机902的这些部件可以包括(但不局限于)一个或多个处理器或处理单元904、系统存储器906和系统总线908,系统总线908将包括处理器904的各种系统组件耦合到系统存储器906。
系统总线908表现了任何的几种类型的有线或无线总线结构(包括存储总线或存储控制器、外围总线、加速图形端口和使用各种总线构造中的任何总线构造的处理器或局部总线)中的一种或多种有线或无线总线结构。举例来讲,这类构造可以包括“工业标准结构”(ISA)总线、“微通道结构”(MCA)总线、“增强型ISA(EISA)”总线、“视频电子标准协会”(VESA)局域总线、也被称作“中间层(Mezzanine)总线”的“外围部件互连”(PCI)总线、它们的某种组合等。
计算机902通常包括各种处理器可存取介质。这类介质可以是可由计算机902或另一种计算设备进行存取的任何可用介质,并且,它包括易失和非易失介质、可移动和不可移动的介质,以及存储和传输介质。
系统存储器906包括采用易失存储器(例如,随机存取存储器(RAM)910)和/或非易失存储器(例如,只读存储器(ROM)912)的形式的处理器可存取存储介质。基本输入/输出系统(BIOS)914通常被存储在ROM 912中,该基本输入/输出系统包含有助于在计算机902内的各个元件之间传送信息(例如,在启动期间)的基本例行程序。RAM 910通常包含可由处理单元904立即存取并且/或者目前正由处理单元904进行操作的数据和/或程序模块/指令。
计算机902也可以包括其他的可移动/不可移动和/或易失/非易失存储介质。举例来讲,图9展示了:硬盘驱动器或磁盘驱动器阵列916,用于从(通常是)不可移动的非易失磁性介质读取并对其写入(未分开示出);磁盘驱动器918,用于从(通常是)可移动的非易失磁盘920(例如,“软盘”)读取并对其写入;以及光盘驱动器922,用于从(通常是)可移动的非易失光盘924(例如,CD-ROM、DVD-ROM或其他光学介质)读取并/或对其写入。硬盘驱动器916、磁盘驱动器918和光盘驱动器922每个都由一个或多个存储介质接口926连接到系统总线908。作为选择,硬盘驱动器916、磁盘驱动器918和光盘驱动器922可以由一个或多个其他分开的或组合的接口(未示出)连接到系统总线908。
这些磁盘驱动器及其关联的处理器可存取介质为计算机902提供处理器可执行指令(例如,数据结构、程序模块和其他数据)的非易失存储。虽然示范的计算机902展示了硬盘916、可移动磁盘920和可移动光盘924,但是,将会理解:其他类型的处理器可存取介质可以存储可由计算设备(例如,盒式磁带或其他磁性存储设备、快闪存储器、CD-ROM、数字通用光盘(DVD)或其他光学存储器、RAM、ROM、电可擦除可编程只读存储器(EEPROM)等)存取的指令。这类介质也可以包括所谓的专用或硬连线的集成电路(IC)芯片。换言之,可以利用任何处理器可存取介质来实现示范的计算系统和环境900的存储介质。
任何数量的程序模块(或处理器可执行指令的其他单位或集合)可以被存储在硬盘916、磁盘920、光盘924、ROM 912和/或RAM 910上,一般举例来讲,包括操作系统928、一个或多个应用程序930、其他程序模块932和程序数据934。特殊举例来讲(但不作限制),(图1、3、5A、5B和7中的)对象102、被强制转换对象104、运行时间强制转换说明302、应用程序504/710、服务程序库502、强制转换对象702、规则704等可能是这类程序模块928、930、932和934中的任何一个或多个程序模块的一部分。
例如,正在经由GUI 706修改观看对象102V的(图7中的)用户712可以经由输入设备(例如,键盘936)和指点设备938(例如,“鼠标”)来将命令和/或信息输入计算机902。其他输入设备940(未明确地示出)可以包括话筒、操纵杆、游戏垫、圆盘式卫星电视天线、串行端口、扫描仪和/或类似的输入设备。这些和其他的输入设备经由被耦合到系统总线908的输入/输出接口942而被连接到处理单元904。但是,它们也可以通过其他接口和总线结构(例如,并行端口、游戏端口、通用串行总线(USB)端口、IEEE 1394(“Firewire”)接口、IEEE 802.11无线接口、Bluetooth无线接口等来加以连接。
监视器/观看屏幕944或其他类型的显示设备也可以经由接口(例如,视频适配器946)被连接到系统总线908。视频适配器946(或另一个部件)可能是或可能包括图形卡,该图形卡用于处理图形密集的计算,并用于处理需要技能的显示要求。通常,图形卡包括图形处理单元(GPU)、视频RAM(VRAM)等,以促进图形操作的敏捷的性能。除监视器944以外,其他输出外围设备还可以包括诸如扬声器(未示出)和打印机948等部件,这些部件可以经由输入/输出接口942被连接到计算机902。
计算机902可以在使用与一台或多台远程计算机(例如,远程计算设备950)的逻辑连接的联网环境中进行操作。举例来讲,远程计算设备950可能是个人计算机、便携式计算机(例如,膝上型计算机、写字板计算机、PDA、移动站等)、掌上或可置于口袋的计算机、游戏设备、服务器、路由器、网络计算机、对等设备、其他公共网络节点、或如以上所列出的另一种计算机类型等。但是,远程计算设备950被展示为便携式计算机,该便携式计算机可以包括这里根据计算机902所描述的元件和特点中的许多或全部元件和特点。
计算机902与远程计算机950之间的逻辑连接被描绘成局域网(LAN)952和一般的广域网(WAN)954。这类联网环境在办公室、企业范围的计算机网络、内联网、因特网、固定和移动的电话网、其他无线网络、游戏网络、它们的某种组合等中很普遍。
当在LAN联网环境中加以实现时,计算机902通常经由网络接口或适配器956被连接到LAN 952。当在WAN联网环境中加以实现时,计算机902通常包括调制解调器958或用于在WAN 954上建立通信的其他装置。调制解调器958(可能在计算机902的内部或外部)可以经由输入/输出接口942或任何其他合适的方案而被连接到系统总线908。将会理解:所展示的网络连接起示范的作用,并且,可以使用在计算机902与950之间建立通信线路的其他装置。
在联网环境(例如,利用计算设备环境900所展示的联网环境)中,相对于计算机902或其各个部分而加以描绘的程序模块或其他指令可以被完全或部分地存储在远程记忆存储设备中。举例来讲,远程应用程序960驻留在远程计算机950的存储部件上,但可以经由计算机902来加以使用或存取。此外,出于说明的目的,应用程序930和其他处理器可执行指令(例如,操作系统928)在这里被展示为离散的框,但可以认识到:这类程序、部件和其他指令在各个时间上可以驻留在计算设备902(和/或远程计算设备950)的不同的存储部件中,并且由计算机902的数据处理器904(和/或远程计算设备950的数据处理器)来执行。
如上所述,传统的多态性模型单单基于类型,并需要具有在编译时间被定义的多态性。源类型信息和目的类型信息也在编译时间被加以充分定义。另外,在传统的多态性中,一特定类型被多态化为另一种特定类型,这需要对于每种唯一的源类型具有唯一的目的类型(一对一强制转换)。
另一方面,如这里所描述的某些实施提供了多态性范例,通过使用该过程的元数据说明,该多态性范例允许在运行时间使用增强型多态性模式将任意类型的对象强制转换到新的类型中。在某些所描述的实施中,该增强型多态性范例涉及以下的一项或多项内容:(i)通过包括源的特点,来实行多态性延伸;(ii)具有元数据的多态性定义,这在运行时间加以解释;(iii)源类型独立性,其中,可以在运行时间发现源类型信息;(iv)多对一强制转换,用于使任意的源类型多态化为具有正在被用于任何源类型的相同的运行时间强制转换定义的目的类型;以及(v)运行时间自适应性,其中,不管在运行时间所发现的源类型如何,都强制转换目的类型。
虽然已用针对组件、算法以及函数特点和/或图示的语言描述了系统、媒体、方法、途径、过程、布置、装置、设备和其他实施,但是,将会理解:所附权利要求书中所定义的发明并不一定局限于所描述的特殊的特点或图示。相反,这些特殊的特点和图示被揭示为实施所声明的发明的示范形式。