创建具体类的实现方法

文档序号:6482594阅读:155来源:国知局
专利名称:创建具体类的实现方法
技术领域
本发明涉及一种在计算机技术领域中创建类的实现方法,尤其指创建具体类的实 现方法。
背景技术
现在计算机软件编程技术从面向对象编程到面向构件、中间件编程,是网络时代 编程技术的飞跃。在面向对象编程中,对象的概念拘泥于数据结构加运算。对象实现了程序模块的 封装,带来了更加清晰的程序结构。作为面向对象程序设计语言的C++,其编译生成的目标 代码Obj文件,不含有类信息,因此系统不可能利用类提供动态服务。在面向构件编程中,构件化编程模型是建立在面向对象技术的基础之上,是完全 面向对象的,提供了动态构造部件模块的机制。其中,Elastor操作系统的CAR (Component Application Runtime)作为一个面向构件的编程模型,表现为一组编程规范,包括构件、 类、对象、接口等定义与访问构件对象的规定。CAR规定了一组构件间互相调用的标准,使得 二进制构件能够自描述,能够在运行时实现动态链接。但是在面向构件编程时,客户端需要考虑到底要创建哪些具体的类,增加了编程 的复杂度。

发明内容
鉴于以上内容,有必要提供一种创建具体类的实现方法。该方法包括步骤在构件 程序中声明接口 ;定义声明了上述接口的泛类;声明实现所定义的泛类的具体类;编译构 件程序并生成一个类厂函数;调用所述类厂函数实现具体类。本发明可以在编程时,定义出一种泛类,该泛类抽象出各个一般类所具有的共同 的类或接口特性,并且在定义该泛类的创建函数时,可以根据不同的策略自动选择创建不 同的具体类。只要这些具体类都是从该所定义的泛类继承来的,创建具体类时可以直接使 用该泛类的创建函数完成,客户端就无需关心创建的是哪些具体类。


图1是本发明较佳实施例所声明的类之间的继承关系示意图。图2是本发明较佳实施例创建具体类的实现方法的流程图。
具体实施例方式首先讲述本发明涉及的术语CAR S卩 Component Assemble at Runtime,为应用于 Elastos 操作系统上的构件技 术;CAR文件是Elastos操作系统中定义的用来描述构件(component)的接口(interface)特征的描述文件。如图1所示,是本发明较佳实施例所声明的泛类与具体类之间的继承关系示意 图。在CAR (Component Assemble at Runtime)文件中,可以通过下列程序代码定义一 个Generic泛类,在这里将Generic看作是一个规范Generic GCarrier {interface ICarrier ;}在上面的程序代码中,通过该Generic关键字定义了 一个继承某些接口的 Generic 泛类,艮口 GCarrier0然后再在CAR文件中声明实现该Generic泛类的具体类,如Class CGSMCarrier:GCarrier{interface ICarrier ;interface IGSMC arrier ;}及Class CCDMACarrierGCarrier{interface ICarrier ;interface ICDMACarrier ;}如图1所示,在上面两段程序代码中,声明了两个实现所定义的泛类的具体类 CGSMCarrier和CCDMACarrier。该两个具体类会继承和实现泛类GCarrier的所有接口。如图2所示,是本发明较佳实施例创建具体类的实现方法的流程图。在本较佳实 施例中,以得到一个GSM或CDMA或者WiFi网络的访问构件为例进行说明。步骤S200,在CAR文件中,首先声明一些接口,再通过关键字Generic定义一个泛 类,如GCarrier,该泛类实现上述声明的接口。如下列代码段所示interface ICarrier { // j^X ICarrier ^ ΠConnect ();Disconnect ();GetName(WStringBuf_<50>name);}generic GCarrier { //定义一个 GCarrier 泛类interface ICarrier ;}步骤S202,在上述 CAR文件中,声明实现该泛类的具体类,如CGSMCarrier和 CCDMACarrier,该两个具体类实现了该泛类GCarrier所声明的所有接口,见下列代码段所 示interface IGSMCarrier { //定义一个 IGSMCarrier 接口DoSomethingffithGSM();}
interface ICDMACarrier { //定义一个 ICDM ACarrier 接口DoSomethingffithCDMA();}class CGSMCarrier: :GCarrier{//声明一个CGSMCarrier类,实现GCarrier所声 明的所有接口interface ICarrier ;interface IGSMCarrier ;}class CCDMACarrier GCarrieH//声明一个 CCDMACarrier 类,实现GCarrier 所 声明的所有接口interface ICarrier ;interface ICDMACarrier ;}步骤S204,CAR编译工具编译上述CAR文件,生成代码框架,该代码框架中包含了 IGSMCarrier和ICDMACarrier的所有函数,也隐含生成了 ICarrier的所有函数。让该两个 具体类CGSMCarrier和CCDMACarrier的实现者去填写具体代码。步骤S206,对应于在CAR文件中的通过generic关键字所定义的继承ICarrier 接口的泛类GCarrier,CAR编译工具生成一个如GCarr i er New ()的类厂函数,并实现该 New()函数的方法,在本较佳实施例的叙述中,可将该New()函数称之为创建函数。这个 GCarrier::New()函数的实现者在该函数里可以使用不同的策略决定生成具体哪一个继 承GCarrier的具体类的实例。在上面的代码段里GCarrier: New ()函数通过一个随机数 决定生成哪一个具体类的实例。步骤S204及步骤S206可参考下列代码段所示ECode GCarrier:New(/氺[out]氺/ICarrier氺氺ppICarrier){ECode ec ;//pretend to find a GSM or CDMA networkIlsrand(time (NULL));Int32 i = rand() % 10 -JI通过一个随机数决定生成的具体类的实例if (i <= 5) {ec = CGSMCarrierNew(ppICarrier);}else {ec = CCDMACarrier:New(ppICarrier);}//可以根据不同的策略调用PickCarrierWiFi. dll中的WiFi network//ec = GCarrierNewByImplementor(L" PickCarrierffiFi. dll",
pp I Carrier);return ec ;} 步骤S210,在用户端程序中,调用上述的GCarrier::NeW()函数,从而实例化一 个上述泛类的具体类,如下述代码段所示ECode ElastosMain(const BufferOf<WString>& args){ICarrier^pCarrier = NULL ;ECode ec = GCarrierNew(&pCarrier);if (FAILED (ec)) {CConsole: iffriteLineC Sorry, no carrier available 丨〃);return ec ;}Il比较是否为generic的具体类pClsId = (ClassId*)pCarrier- > Probe(EIID_GENERIC_INF0);if(*pClsId ! = ECLSID_GCarrier) {pCarrier- > Release ();return E_CLASS_N0T_AVAILABLE ;}WStringBuf_<40>name ;pCarrier- > GetName(&name);CConsole::WriteLine(name);pCarrier- > Connect ();//do something…;;;;pCarrier-> Disconnect ();pCarrier- > Release ();eProcess: :Exit(O);return N0ERR0R ;}在上面的代码段中可以看出,程序在运行时会动态地检查CGSMCarrier 与GCarrier的一致性及/或CCDMACarrier与GCarrier的一致性,也就是说, 在 CAR 文件中必须已经声明 “class CGSMCarrier GCarrier {···} ” 或"class CCDMACarrier GCarrier {...} ”。用户应用代码中只要写"ECode ec = GCarrier: :New (&pCarrier); ”就可以得到一个GSM或CDMA或者WiFi网络的访问构件,从 而也就实例化了一个具体类。由以上结合代码的叙述可知,在编程时,定义出一种抽象出各个一般类所具有的 共同的类或接口特性的泛类,并且在定义该泛类的创建函数时,还可以根据不同的策略自 动选择创建不同的具体类。只要创建的这些具体类都是从该所定义的泛类继承来的,创建具体类时就可以直接使用该泛类的创建函数完成,客户端就不需要关心创建的是哪些具体 的类 。
权利要求
一种创建具体类的实现方法,其特征在于,该方法包括步骤在构件程序中声明接口;定义声明了上述接口的泛类;声明实现所定义的泛类的具体类;编译构件程序并生成一个类厂函数;调用所述类厂函数实现具体类。
2.如权利要求1所述的创建具体类的实现方法,其特征在于,所声明的具体类实现了 泛类所声明的所有接口。
3.如权利要求1所述的创建具体类的实现方法,其特征在于,步骤编译构件程序具体 包括对构件程序进行编译,生成代码框架;在该代码框架中填写所声明的具体类的代码。
4.如权利要求1所述的创建具体类的实现方法,其特征在于,所述步骤调用所述类厂 函数实现具体类包括在该类厂函数中,使用不同的策略决定生成继承所述泛类的具体类的实例。
5.如权利要求4所述的创建具体类的实现方法,其特征在于,所述类厂函数为一个创 建函数,在步骤调用所述类厂函数实现具体类中所使用的策略是在该创建函数里通过一个随机数决定生成对应的具体类的实例。
6.如权利要求1所述的创建具体类的实现方法,其特征在于,所述步骤定义一个泛类 是通过一个generic关键字定义的,该generic关键字是对一类构件的类及其函数实现的 抽象描述。
7.如权利要求1所述的创建具体类的实现方法,其特征在于,该方法还包括步骤编译后的构件程序在运行时,动态检查所实现的具体类与所定义的泛类一致性。
全文摘要
本发明提供一种创建具体类的实现方法,该方法包括在构件程序中声明接口;定义声明了上述接口的泛类;声明实现所定义的泛类的具体类;编译构件程序并生成一个类厂函数;调用所述类厂函数实现具体类。本发明定义出一种泛类,该泛类抽象出各个一般类所具有的共同的类或接口特性,并且在定义该泛类的创建函数时,可以根据不同的策略自动选择创建不同的具体类。只要这些具体的类都是从该所定义的泛类继承来的,创建具体类时可以直接使用该泛类的创建函数完成,客户端就无需关心创建的是哪些具体类。
文档编号G06F9/44GK101882066SQ20091005088
公开日2010年11月10日 申请日期2009年5月8日 优先权日2009年5月8日
发明者宋世军, 陈冬晓, 陈榕 申请人:上海科泰世纪科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1