灵活的基类库的制作方法

文档序号:6594730阅读:131来源:国知局
专利名称:灵活的基类库的制作方法
灵活的基类库
背景技术
软件框架提供了由应用程开发者构建且定制的通用应用程序功能。不同的框架可 提供不同的通用应用程序功能,并且由此适用于应用程序不同的域。由此,应用程序开发者 选择在其上构建他们的应用程序的适当框架,并且在考虑框架的情况下创作该应用程序。由框架提供的一种系统被称为“类型系统”,它定义了框架使用的各种扩展的类型 集,并且定义了在扩展的类型集中各类型之间的关系。框架使用由应用程序将在其中执行 的运行时所提供的原语类库(也被称为“基类库”)。这样的类可包括基本的基类型,诸如 例如,根对象类、串类、整数类、浮点类等等。这样的基类例如可包括在基类库中。框架常常提供从运行时所定义的基类对象集中导出的扩展的分层类型的系统。如 果多个框架要使用运行时,每一框架具有其自己的扩展的类型系统,每一类型系统从在运 行时上构建的任何框架可以使用的相同的通用基类对象集中导出。简要概述本文描述的各实施例涉及在以更适合框架所服务的应用程序的域的方式允许在 改变通用基类库集时框架的显著的灵活性的机制。这与常规的整体式模型形成对比,其中 即使对框架所服务的应用程序不需要它们,框架也支持整个通用基类库对象集及其整个功 能集°运行时提供基类的数据结构的数据契约,而不是提供该基类库。只要对应的数据 契约被履行,则框架可随后以定制方式来定义基类。由此,例如,框架可提供定制的框架专 用方法和/或适于框架的属性。另一框架可以以不同方式来定义基类。由此,框架可与运 行时互操作,并且建立包括对专用框架的需求更为定制化的原语基类型的类型系统。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用 于帮助确定所要求保护的主题的范围。


为了描述可以获得本发明的上文所列举的及其他优点和特征的方式,下面将通过 参考附图来呈现对各实施例的更具体的描述。可以理解,这些附图只描绘了样本实施例,并 且因此不被认为是对其范围的限制,将通过使用附图并利用附加属性和细节来描述和解释 各实施例,在附图中图1示出了可实现本文描述的一个或多个特征的计算系统;图2示出了计算机框架,其中运行时提供基类的数据契约,从而只要对应的数据 契约被履行,则允许框架灵活地定义相应的基类;图3示出了由运行时来提供类型系统基础的方法的流程图;图4示出了指定类型描述指针和对象布局的示例数据契约,其中该类型描述指针 指向类型描述符;以及图5示出了一种用于提供框架类型系统的方法的流程图。
具体实施例方式根据本文描述的各实施例,本文描述的原理提供了以最适合框架所服务的应用程 序的域的方式来允许在改变通用基类库集时的框架的显著灵活性的机制。运行时提供每一 基类的数据结构的数据契约,而不是提供该基类库。只要对应的数据契约被履行,则框架可 随后以定制方式来定义基类。首先,通用计算系统将参考图1来描述。随后,各种实施例将 参考图2至5来描述。图1示出了计算系统100。计算系统现在越来越多地呈现各种形式。计算系统可 以例如是手持式设备、电器、膝上型计算机、台式计算机、大型机、分布式计算系统,或者甚 至通常不被视为计算系统的设备。在本说明书以及权利要求书中,术语“计算系统”被广义 地定义为包括包含至少一个处理器以及其上能含有可由处理器执行的计算机可执行指令 的存储器的任何设备或系统(或其组合)。存储器可以采取任何形式,并可以取决于计算系 统的属性和形式。计算系统可以分布在网络环境中,并可包括多个组成计算系统。如图1所示,在其最基本的配置中,计算系统100通常包括至少一个处理单元102 和存储器104。存储器104可以是物理系统存储器,可以是易失性、非易失性、或两者的某种 组合。术语“存储器”在此也可用来指诸如物理存储介质等非易失性大容量存储。如果计算 系统是分布式的,那么,处理、存储器和/或存储能力也可以是分布式的。如此处所使用的, 术语“模块”或“组件”可以指在计算系统上执行的软件对象或例程。此处所描述的不同组 件、模块、引擎,以及服务可以实现为在计算系统上执行的对象或进程(例如,作为分开的 线程)。在随后的描述中,参考由一个或多个计算系统执行的动作描述了各实施例。如果 这样的动作是以软件实现的,则执行动作的相关联计算系统的一个或多个处理器响应于已 经执行了计算机可执行指令,引导计算系统的操作。这样的操作的示例涉及对数据的操纵。 计算机可执行指令(以及被操纵的数据)可以存储在计算系统100的存储器104中。计算系统100还可以包含可允许计算系统100通过例如网络110 (诸如可能因特 网)与其他消息处理器进行通信的通信信道108。通信信道108是通信介质的示例。通 信介质通常以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结 构、程序模块或其它数据,并包括任何信息递送介质。作为示例而非限制,通信介质包括有 线介质,如有线网络或直接线连接,以及诸如声学、无线电、红外线及其他无线介质之类的 无线介质。如此处所用的术语“计算机可读介质”既包括存储介质又包括通信介质。本发明的范围内的实施例还包括用于携带或其上储存有计算机可执行指令或数 据结构的计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机访问的 任何可用介质。作为示例而非限制,这样的计算机可读介质可包括诸如RAM、ROM、EEPROM、 CD-ROM之类的物理存储器和/或存储介质或其他光盘存储、磁盘存储或其他磁存储设备、 或可用于携带或存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用 或专用计算机访问的任何其他介质。当信息通过网络或另一通信连接(硬连线、无线或硬 连线或无线的组合)传输或提供给计算机时,计算机将该连接完全视为计算机可读介质。 因此,任何这样的连接被适当地称为计算机可读介质。上述的组合也应被包括在计算机可 读介质的范围内。计算机可执行指令例如包括,使通用计算机、专用计算机、或专用处理设备执行某
5一功能或某组功能的指令和数据。尽管用结构特征和/或方法动作专用的语言描述了本主 题,但可以理解,所附权利要求书中定义的主题不必限于此处所描述的具体特征或动作。相 反,此处所描述的具体特征和动作是作为实现权利要求的示例形式来公开的。图2示出了计算体系结构200。在一个实施例中,尽管不需要,但体系结构200的 某些或所有组件可以是基于软件的。例如,在软件体系结构的情况下,在计算系统100的处 理器102执行计算机可执行指令之后,体系结构200的某些或所有组件可在图1的计算系 统100的存储器104中被实例化。这些计算机可执行指令可存储在诸如先前描述的一个或 多个计算机可读介质上。计算体系结构包括运行时210。运行时210提供了多个基类中的每一个的数据契 约,而实际上没有提供基类本身。例如,运行时210可指定应如何结构化特定基类的对象, 而对特定基类可支持什么方法、基类可具有什么属性、以及什么构造函数被用于创建基类 的实例保留灵活性。在图2中,运行时210被示为提供对应于四个基类的四个数据契约211A至211D。 然而,省略号211E表示运行时210还可提供其他基类的数据契约,并且甚至提供少于四个 基类的数据契约,并且可能与单个基类的单个数据契约一样低。注意,作为面向对象的复杂 软件组件的运行时210可使用基类来构建,并且运行时本身可具有其自己的类型系统。然 而,运行时210不迫使外部框架使用该类型系统,甚至不迫使其具有特别定义的基类库。相 反,只要外部框架遵守由运行时210提供的数据契约,则运行时210准许外部框架建立它们 自己的基类。体系结构210可能还包括框架220,该框架220定义和由运行时210提供的数据契 约相对应的框架专用基类的第一集合221。例如,基类221A由框架220定义,并且遵守由运 行时210指定的数据契约211A。基类221B由框架220定义,并且遵守由运行时210指定 的数据契约211B。注意,没有示出基类221C。这强调至少在某些实施例中,某些类可以是 可任选的。因此,即使运行时210要指定特定基类的数据契约,也不需要框架定义对应的基 类。继续该示例,基类221D由框架220定义,但与数据契约211D对应。由于框架对如何定义基类提供有相当大的自由,因此框架专用基类对于框架是相 当唯一的,并且可修改框架专用基类来适应由框架服务的目标和应用程序的域。例如,考虑被称为“串”的通用基类型。串是由字符序列来定义的。运行时210可 提供串应包括两个字节单元的序列的数据契约,其中每两个字节单元可被解释为字符。运 行时210还可指定串要具有与其相关联的某些管理数据。例如,可能串对象应以指向具有 特定方案的类型描述符的某一长度的类型描述符指针来开始。可包括在数据契约中的管理 数据的其他示例包括串中的字符总数、以及可能在串中的有效字符总数,因为某些两个字 节序列可能完全不必与特定字符相对应。给定这一数据契约,框架在进一步定义串基类中具有相当的灵活性。例如,框架可 将串基类定义为完全没有可在串基类的对象上调用的方法。另一方面,框架可定义可在串 基类对象上调用的方法。例如,可以存在用于以ASCII码升序来排序的方法,用于ASCII码 降序的方法,用于大写该串中所有字母的方法,用于移除该串中所有数字的方法,用于用某 些单词代替另一些的方法等等。取决于框架服务的应用程序的域,不同的框架对于某些方 法比另一些具有更多用处,并且由此可以将更有用的方法并入其串基类中。通过不需要支持较不有用的方法,可使类型系统更高效。框架还可定义与串相关联的专用属性。例如,串基类可具有大写字母的总数的计 数、对数字总数的计数、对特殊字符的总数的计数、指定串的所断言的语言的语言属性等 等。再次,某些框架比另一些对于某些属性具有更多的用处,并且由此框架可将基类定义为 具有对该框架最有用的属性,而另一框架可将串基类定义为具有不同的属性。每一框架还可定义可用于生成特定类的对象的一组构造函数,由此留给该框架进 一步的灵活性。框架总是能够定义构建基类的通用集合的定制的类型系统。然而,框架已 经使用运行时所提供的通用基类库。使用本文描述的原理,框架无需使用通用基类库。相 反,它们可以以框架专用方式向基类提供方法、属性和构造函数。在一个实施例中,即使基 类名被改变,或命名空间内基类的分配还可能从一个框架变成另一个。基类通常是可用于生成更复杂类和类型的核心构件块。此处更详细一些地讨论串 的示例。然而,基类的其他示例可以是字符、整数、以及根类(诸如,例如,系统.对象)。尽 管可为每一个指定数据契约,但框架可以其他方式具有相当的灵活性以定义适合框架目的 的基类。进一步探究整数基类的例子,运行时可指定某一字节长度来表示整数,并且可指 示对象应在对象的指定部分具有指定长度的类型描述符点。框架可随后可能完全不用定制 的方法、或可能用适合特定框架目的的一个或多个框架专用方法来定义整数基类。作为一 个示例,一种定制方法可能是将整数的平方根返回为浮点的平方根方法。其他定制方法可 对框架作者是显而易见的,该框架作者更可能知道在该框架的上下文中什么方法是有帮助 的。这一体系结构的优点之一是多个框架可在单个计算系统上使用单个运行时,并且 仍不仅维护其自己的类型系统,而且完全使用不同的基类。例如,第二框架230定义基类 231的朝着框架230的目的来修改的另一集合。在这一情况下,框架作者已经选择合并对应 于运行时210向其提供数据契约的所有基类的对应基类231A至231D。因此,基类231A至 231D的每一个都是对框架230专用的基类,虽然它们是以定义遵守对应的数据契约的方式 来定义的。由此,例如,即使由框架230定义的基类231A和由框架220定义的基类221A — 样遵循相同的数据契约,它们也可具有差别很大的方法、属性和构造函数。注意,尽管框架作者使用本文描述的原理可在定义基类时具有相当的灵活性,但 框架作者仍可选择定义基类,使得由该框架定义的一个、某些、或甚至全部基类与由另一框 架定义的一个、某些、或甚至全部基类相同。然而,框架作者可定义基类,使得该框架的所定 义的基类没有一个与任何其他框架所定义的任何其他基类相同。然而,在框架220和230定 义不同的基类的情况下,框架不能共享对象实例,因为它们不能解释来自其他框架的实例。 换言之,由于类型系统是不相交的,因此各框架之间的通信是用值(即,作为平面数据)来 传递的通过诸如机器类型和机器类型的集合等类型来完成的。因此,尽管不需要,即使两个不同的框架220和230遵循两个完全不同的类型系 统,并且使用两个不同的基类集,但运行时210可允许两个不同框架220和230存在并且使 用运行时210的服务。这允许可在单个运行时上运行的框架的类型的多样性,从而允许框 架变得更高效地面向该框架意图服务的应用程序的域。这还允许对框架更高效的版本化, 并且允许后续版本使用不同的基类。由此,框架作者不再限于由框架的先前版本定义的基类。框架作者可仅修改基类定义,使框架的后续版本更好地适应框架的操作。因此,运行时提供类型系统基础,而仅指定某些或可能所有的基类集的数据契约。 图3示出了用于提供类型系统基础的方法300的流程图。可对多个基类的每一个执行方法 300。运行时定义基类的数据契约,而无需实际定义该基类(动作301)。这不排除可能 存在运行时确实实际定义的其他基类。然而,在一个实施例中,运行时不定义任何基类,而 仅提供每一基类的数据契约。只要基类定义遵循数据契约,则运行时还根据框架专用基类定义与定义该基类的 框架接口(动作302)。对定义基类它们自己的版本的多个框架可执行该动作。例如,框架 220和230定义对应于数据契约211A的基类的它们自己的版本221A和231A。然而,无论 这些版本221A和231A是否不同,它们确实都遵循数据契约211A。因此,当对对应于数据契 约211A的对象来回通信时,仅在通信中使用平面数据。如果框架对遵循数据契约211A的 对象进行通信,则即使将不使用该对象的定制的框架专用特征,关于该数据契约的知识也 准许该数据被解释。假定接收实体将仅仅把对象用作平面数据,则框架或运行时发送该对 象,除非接收对象是正在使用该框架的应用程序。图4示出了指定类型描述指针401和对象布局402的示例数据契约400。在这一 实施例中,所有数据契约都指定基类要以类型描述指针401开始。对象布局402可对基类 专用。例如,对于串,对象布局402可指定两个字节的字符的序列。类型描述指针401指向 类型描述符403。类型描述符403可具有通用方案,使得可以解释该类型描述符来理解类 型。因此,类型描述符403可用于需要对基类的精确理解的各种各样的目的。作为示例,类型描述符403可用于执行不同类型系统之间的类型安全。例如,为确 定两个对象是否是相同类型或等价类型,可以查看这两个对象的类型描述符,并且将可从 每一个对象中正确地提取和解释适当信息来制定类型等价性的合理结论。类型描述符还可 用于执行自动存储器管理、执行虚拟调用、或执行接口调用、或关于类型的详细知识将是有 用的任何其他用途。在自动存储器管理的情况下,由运行时定义的数据契约可以允许运行 时的垃圾收集。图5示出了用于提供框架类型系统的方法500的流程图。可在构造要与图2的运 行时210接口的框架时执行方法500。首先,确定由运行时为每一基类提供的数据契约(动 作501)。随后,对于一个、某些、或可能所有基类的每一个,框架作者使用数据契约来定义基 类型,由此制定基类型的框架专用定义(动作502)。因此,本文描述的原理准许框架具有定制的框架专用基类,而仍允许应用程序使 用通用运行时。本发明可具体化为其它具体形式而不背离其精神或本质特征。所描述的实 施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要 求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变应被权利 要求书的范围所涵盖。
权利要求
1.一种包括其上含有计算机可执行指令的一个或多个物理计算机可读介质(103)的 计算机程序产品,所述指令被构造,使得当所述指令由计算系统(100)的一个或多个处理 器(10 执行时,使所述计算系统执行一种执行用于提供类型系统基础的方法(300)的运 行时010),所述方法包括定义(301)基类的数据契约(211)而无需实际定义所述基类的动作;以及只要所述基类定义遵循所述数据契约(211A),则根据框架专用基类定义与定义所述基 类(221A、231A)的框架(220,230)接口 (302)的动作。
2.如权利要求1所述的计算机程序产品,其特征在于,所述框架是第一框架,并且所述 基类的框架专用基类定义是所述基类的第一框架专用基类定义,所述方法还包括只要所述基类定义遵循所述数据契约,则根据第二框架专用基类定义与定义所述基类 的第二框架接口的动作,其中所述基类的第一框架专用基类定义与所述第二框架专用基类 定义不同。
3.如权利要求1所述的计算机程序产品,其特征在于,所述数据契约至少隐式地准许 所述框架命名所述基类。
4.如权利要求1所述的计算机程序产品,其特征在于,所述数据契约至少隐式地准许 所述框架将命名空间分配给所述基类。
5.如权利要求1所述的计算机程序产品,其特征在于,所述数据契约至少隐式地准许 所述框架将框架专用方法分配给所述基类。
6.如权利要求1所述的计算机程序产品,其特征在于,所述数据契约至少隐式地准许 所述框架将框架专用属性分配给所述基类。
7.如权利要求1所述的计算机程序产品,其特征在于,所述数据契约至少隐式地准许 所述框架将构造函数分配给所述基类。
8.如权利要求1所述的计算机程序产品,其特征在于,所述基类是第一基类,并且所述 框架专用基类定义是第一框架专用基类定义,所述方法还包括定义第二基类的数据契约而无需实际定义所述第二基类的动作;以及只要所述第二基类定义遵循第二数据契约,则根据第二框架专用基类定义与定义所述 第二基类的框架接口的动作。
9.如权利要求8所述的计算机程序产品,其特征在于,定义所述第一基类的框架与定 义所述第二基类的框架相同。
10.如权利要求1所述的计算机程序产品,其特征在于,所述基类是串。
11.如权利要求1所述的计算机程序产品,其特征在于,所述基类是整数。
12.如权利要求1所述的计算机程序产品,其特征在于,所述基类是浮点。
13.如权利要求1所述的计算机程序产品,其特征在于,所述基类是字符。
14.一种用于提供框架类型系统的方法(500),所述方法包括确定(501)运行时在多个基类型上施加的数据契约011)的动作;对于至少一些所述多个基类型中每一个,执行以下动作使用所述数据契约OllA)来定义(50 所述基类型Q21A)由此制定所述基类型的框 架专用定义的动作。
15.一种其上含有计算机可执行指令的一个或多个物理计算机可读介质(104),当所述指令由计算系统(100)的一个或多个处理器(10 执行时,使所述计算系统在存储器 (104)中实例化软件体系结构000),所述软件体系结构包括 运行时010),所述运行时提供多个基类的数据契约Oil);第一框架020),所述第一框架定义和所述多个基类的至少第一子集(211A、211B、 211D)相对应的框架专用基类的第一集合(221A、221B、221D),所述第一集合的框架专用基 类中的每一个遵循由所述运行时提供的对应的数据契约,而所述第一集合的框架专用基类 中的至少一个对所述第一框架是唯一的;以及第二框架030),所述第二框架定义和所述多个基类的至少第二子集(211A、211B、 211C、211D)相对应的框架专用基类的第二集合Q31A、231B、231C、231D),所述第二集合的 框架专用基类中的每一个遵循由所述运行时提供的对应的数据契约,而所述第二集合的框 架专用基类中的至少一个对所述第二框架是唯一的。
全文摘要
在以更适合框架所服务的应用程序的域的方式来允许在改变通用基类库时框架的显著灵活性的机制。运行时提供每一基类的数据结构的数据契约,而不是提供该基类库。只要该数据契约被履行,则框架可随后以定制方式来定义每一基类。由此,例如,框架可提供适于框架的定制的框架专用方法和/或属性。另一框架可以以不同方式来定义基类。
文档编号G06F17/00GK102144226SQ200980135194
公开日2011年8月3日 申请日期2009年8月19日 优先权日2008年9月3日
发明者A·帕多, F·V·佩斯彻-盖里, M·M·马格鲁德, M·塔卢里, P·F·索利趣, P·H·杜斯德, R·克里希纳斯瓦米, R·马丁, S·D·莫热, S·J·霍尔 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1