CN101882066A - 创建具体类的实现方法 - Google Patents

创建具体类的实现方法 Download PDF

Info

Publication number
CN101882066A
CN101882066A CN2009100508821A CN200910050882A CN101882066A CN 101882066 A CN101882066 A CN 101882066A CN 2009100508821 A CN2009100508821 A CN 2009100508821A CN 200910050882 A CN200910050882 A CN 200910050882A CN 101882066 A CN101882066 A CN 101882066A
Authority
CN
China
Prior art keywords
class
concrete
function
concrete class
pan
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.)
Granted
Application number
CN2009100508821A
Other languages
English (en)
Other versions
CN101882066B (zh
Inventor
陈冬晓
陈榕
宋世军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI
Original Assignee
KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI filed Critical KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI
Priority to CN200910050882.1A priority Critical patent/CN101882066B/zh
Publication of CN101882066A publication Critical patent/CN101882066A/zh
Priority to HK11102973.4A priority patent/HK1148843A1/zh
Application granted granted Critical
Publication of CN101882066B publication Critical patent/CN101882066B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

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

Description

创建具体类的实现方法
技术领域
本发明涉及一种在计算机技术领域中创建类的实现方法,尤其指创建具体类的实现方法。
背景技术
现在计算机软件编程技术从面向对象编程到面向构件、中间件编程,是网络时代编程技术的飞跃。
在面向对象编程中,对象的概念拘泥于数据结构加运算。对象实现了程序模块的封装,带来了更加清晰的程序结构。作为面向对象程序设计语言的C++,其编译生成的目标代码obj文件,不含有类信息,因此系统不可能利用类提供动态服务。
在面向构件编程中,构件化编程模型是建立在面向对象技术的基础之上,是完全面向对象的,提供了动态构造部件模块的机制。其中,Elastor操作系统的CAR(Component Application Runtime)作为一个面向构件的编程模型,表现为一组编程规范,包括构件、类、对象、接口等定义与访问构件对象的规定。CAR规定了一组构件间互相调用的标准,使得二进制构件能够自描述,能够在运行时实现动态链接。
但是在面向构件编程时,客户端需要考虑到底要创建哪些具体的类,增加了编程的复杂度。
发明内容
鉴于以上内容,有必要提供一种创建具体类的实现方法。该方法包括步骤:在构件程序中声明接口;定义声明了上述接口的泛类;声明实现所定义的泛类的具体类;编译构件程序并生成一个类厂函数;调用所述类厂函数实现具体类。
本发明可以在编程时,定义出一种泛类,该泛类抽象出各个一般类所具有的共同的类或接口特性,并且在定义该泛类的创建函数时,可以根据不同的策略自动选择创建不同的具体类。只要这些具体类都是从该所定义的泛类继承来的,创建具体类时可以直接使用该泛类的创建函数完成,客户端就无需关心创建的是哪些具体类。
附图说明
图1是本发明较佳实施例所声明的类之间的继承关系示意图。
图2是本发明较佳实施例创建具体类的实现方法的流程图。
具体实施方式
首先讲述本发明涉及的术语:
CAR即Component Assemble at Runtime,为应用于Elastos操作系统上的构件技术;
CAR文件是Elastos操作系统中定义的用来描述构件(component)的接口(interface)特征的描述文件。
如图1所示,是本发明较佳实施例所声明的泛类与具体类之间的继承关系示意图。
在CAR(Component Assemble at Runtime)文件中,可以通过下列程序代码定义一个Generic泛类,在这里将Generic看作是一个规范:
Generic GCarrier{
     interface ICarrier;
}
在上面的程序代码中,通过该Generic关键字定义了一个继承某些接口的Generic泛类,即GCarrier。
然后再在CAR文件中声明实现该Generic泛类的具体类,如:
Class CGSMCarrier::GCarrier{
      interface ICarrier;
      interface IGSMC arrier;
}及
Class CCDMACarrier::GCarrier{
      interface ICarrier;
      interface ICDMACarrier;
}
如图1所示,在上面两段程序代码中,声明了两个实现所定义的泛类的具体类CGSMCarrier和CCDMACarrier。该两个具体类会继承和实现泛类GCarrier的所有接口。
如图2所示,是本发明较佳实施例创建具体类的实现方法的流程图。在本较佳实施例中,以得到一个GSM或CDMA或者WiFi网络的访问构件为例进行说明。
步骤S200,在CAR文件中,首先声明一些接口,再通过关键字Generic定义一个泛类,如GCarrier,该泛类实现上述声明的接口。如下列代码段所示:
interface ICarrier{  //定义ICarrier接口
     Connect( );
     Disconnect( );
     GetName(WStringBuf_<50>name);
}
generic GCarrier{  //定义一个GCarrier泛类
     interface ICarrier;
}
步骤S202,在上述CAR文件中,声明实现该泛类的具体类,如CGSMCarrier和CCDMACarrier,该两个具体类实现了该泛类GCarrier所声明的所有接口,见下列代码段所示:
interface IGSMCarrier{  //定义一个IGSMCarrier接口
     DoSomethingWithGSM( );
}
interface ICDMACarrier{  //定义一个ICDMACarrier接口
     DoSomethingWithCDMA( );
}
class CGSMCarrier::GCarrier{//声明一个CGSMCarrier类,实现GCarrier所声明的所有接口
    interface ICarrier;
    interface IGSMCarrier;
}
class CCDMACarrier::GCarrier{//声明一个CCDMACarrier类,实现GCarrier所声明的所有接口
   interface ICarrier;
   interface ICDMACarrier;
}
步骤S204,CAR编译工具编译上述CAR文件,生成代码框架,该代码框架中包含了IGSMCarrier和ICDMACarrier的所有函数,也隐含生成了ICarrier的所有函数。让该两个具体类CGSMCarrier和CCDMACarrier的实现者去填写具体代码。
步骤S206,对应于在CAR文件中的通过generic关键字所定义的继承ICarrier接口的泛类GCarrier,CAR编译工具生成一个如:GCarrier::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 network
 //
 srand(time(NULL));
Int32 i=rand()%10;//通过一个随机数决定生成的具体类的实例
  if(i<=5){
       ec=CGSMCarrier::New(ppICarrier);
}
  else {
       ec=CCDMACarrier::New(ppICarrier);
  }
  //可以根据不同的策略调用PickCarrierWiFi.dll中的WiFi network
    //ec=GCarrier::NewByImplementor(L″PickCarrierWiFi.dll″,
ppICarrier);
    return ec;
}
步骤S210,在用户端程序中,调用上述的GCarrier::New( )函数,从而实例化一个上述泛类的具体类,如下述代码段所示:
ECode ElastosMain(const BufferOf<WString>& args)
{
   ICarrier*pCarrier=NULL;
   ECode ec=GCarrier::New(&pCarrier);
   if(FAILED(ec)){
       CConsole::WriteLine(″Sorry,no carrier available!″);
       return ec;
   }
//比较是否为generic的具体类
  pClsId=(ClassId*)pCarrier->Probe(EIID_GENERIC_INFO);
   if(*pClsId!=ECLSID_GCarrier){
   pCarrier->Release();
      return E_CLASS_NOT_AVAILABLE;
}
   WStringBuf_<40>name;
   pCarrier->GetName(&name);
   CConsole::WriteLine(name);
   pCarrier->Connect();
   //do something...
   ;;;;
pCarrier->Disconnect();
pCarrier->Release();
CProcess::Exit(0);
return NOERROR;
}
在上面的代码段中可以看出,程序在运行时会动态地检查CGSMCarrier与GCarrier的一致性及/或CCDMACarrier与GCarrier的一致性,也就是说,在CAR文件中必须已经声明“class CGSMCarrier::GCarrier{...}”或“class CCDMACarrier::GCarrier{...}”。用户应用代码中只要写:“ECode ec=GCarrier::New(&pCarrier);”就可以得到一个GSM或CDMA或者WiFi网络的访问构件,从而也就实例化了一个具体类。
由以上结合代码的叙述可知,在编程时,定义出一种抽象出各个一般类所具有的共同的类或接口特性的泛类,并且在定义该泛类的创建函数时,还可以根据不同的策略自动选择创建不同的具体类。只要创建的这些具体类都是从该所定义的泛类继承来的,创建具体类时就可以直接使用该泛类的创建函数完成,客户端就不需要关心创建的是哪些具体的类。

Claims (7)

1.一种创建具体类的实现方法,其特征在于,该方法包括步骤:
在构件程序中声明接口;
定义声明了上述接口的泛类;
声明实现所定义的泛类的具体类;
编译构件程序并生成一个类厂函数;
调用所述类厂函数实现具体类。
2.如权利要求1所述的创建具体类的实现方法,其特征在于,所声明的具体类实现了泛类所声明的所有接口。
3.如权利要求1所述的创建具体类的实现方法,其特征在于,步骤编译构件程序具体包括:
对构件程序进行编译,生成代码框架;
在该代码框架中填写所声明的具体类的代码。
4.如权利要求1所述的创建具体类的实现方法,其特征在于,所述步骤调用所述类厂函数实现具体类包括:
在该类厂函数中,使用不同的策略决定生成继承所述泛类的具体类的实例。
5.如权利要求4所述的创建具体类的实现方法,其特征在于,所述类厂函数为一个创建函数,在步骤调用所述类厂函数实现具体类中所使用的策略是:
在该创建函数里通过一个随机数决定生成对应的具体类的实例。
6.如权利要求1所述的创建具体类的实现方法,其特征在于,所述步骤定义一个泛类是通过一个generic关键字定义的,该generic关键字是对一类构件的类及其函数实现的抽象描述。
7.如权利要求1所述的创建具体类的实现方法,其特征在于,该方法还包括步骤:
编译后的构件程序在运行时,动态检查所实现的具体类与所定义的泛类一致性。
CN200910050882.1A 2009-05-08 2009-05-08 创建具体类的实现方法 Expired - Fee Related CN101882066B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN200910050882.1A CN101882066B (zh) 2009-05-08 2009-05-08 创建具体类的实现方法
HK11102973.4A HK1148843A1 (zh) 2009-05-08 2011-03-24 創建具體類的實現方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200910050882.1A CN101882066B (zh) 2009-05-08 2009-05-08 创建具体类的实现方法

Publications (2)

Publication Number Publication Date
CN101882066A true CN101882066A (zh) 2010-11-10
CN101882066B CN101882066B (zh) 2014-06-04

Family

ID=43054087

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200910050882.1A Expired - Fee Related CN101882066B (zh) 2009-05-08 2009-05-08 创建具体类的实现方法

Country Status (2)

Country Link
CN (1) CN101882066B (zh)
HK (1) HK1148843A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103077033A (zh) * 2012-08-20 2013-05-01 南京南瑞继保电气有限公司 一种优化组态系统
CN104991452A (zh) * 2015-05-12 2015-10-21 广东瑞德智能科技股份有限公司 一种在面向对象编程中用于家电控制框架的设计方法
CN107038057A (zh) * 2016-10-31 2017-08-11 东软集团股份有限公司 创建类的方法及装置
CN110659017A (zh) * 2019-09-19 2020-01-07 上海客佳信息科技有限公司 一种外部请求处理方法及相关装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6459441B1 (en) * 1999-03-03 2002-10-01 Dassault Systemes Software interface
US7503038B2 (en) * 2004-08-27 2009-03-10 Microsoft Corporation System and method for seamlessly comparing objects
CN100543675C (zh) * 2007-12-26 2009-09-23 上海科泰世纪科技有限公司 计算机软件系统中基于构件接口实现事件回调的方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103077033A (zh) * 2012-08-20 2013-05-01 南京南瑞继保电气有限公司 一种优化组态系统
CN103077033B (zh) * 2012-08-20 2016-08-24 南京南瑞继保电气有限公司 一种优化组态系统
CN104991452A (zh) * 2015-05-12 2015-10-21 广东瑞德智能科技股份有限公司 一种在面向对象编程中用于家电控制框架的设计方法
CN107038057A (zh) * 2016-10-31 2017-08-11 东软集团股份有限公司 创建类的方法及装置
CN110659017A (zh) * 2019-09-19 2020-01-07 上海客佳信息科技有限公司 一种外部请求处理方法及相关装置
CN110659017B (zh) * 2019-09-19 2024-03-29 上海客佳信息科技有限公司 一种外部请求处理方法及相关装置

Also Published As

Publication number Publication date
CN101882066B (zh) 2014-06-04
HK1148843A1 (zh) 2011-09-16

Similar Documents

Publication Publication Date Title
Broy et al. Engineering automotive software
Breivold et al. Component-based and service-oriented software engineering: Key concepts and principles
CN103617066A (zh) 一种工作流引擎及其实现方法
CN110399119A (zh) 一种组件化构建方法、装置、电子设备及存储介质
CN101882066A (zh) 创建具体类的实现方法
Wan et al. Investigation on composition mechanisms for cyber physical systems
Hussain et al. UML-based development process for IEC 61499 with automatic test-case generation
Dimitrov et al. UML-based performance engineering possibilities and techniques
CN103455339A (zh) 一种通用仿真组件的执行方法
US20040015816A1 (en) Coordination synthesis for software systems
Moallemi et al. Modeling and simulation-driven development of embedded real-time systems
CN110955412B (zh) 面向服务的智能座舱系统及其设计方法和设计系统
Hartmann et al. Using MDA for integration of heterogeneous components in software supply chains
Alves et al. Comparitive Study of Variability Management in Software Product Lines and Runtime Adaptable Systems.
Fredj et al. eC3M: Optimized model-based code generation for embedded distributed software systems
JP2010049439A (ja) ソフトウェアモデルを用いたシステム構築方法およびモデリング装置
EP1565813B1 (en) Code generation
Mraidha et al. An execution framework for MARTE-based models
Thramboulidis Towards an Object-Oriented extension for IEC 61131
Thramboulidis Model integrated mechatronics: An architecture for the model driven development of manufacturing systems
Bubeck et al. Model driven engineering for the implementation of user roles in industrial service robot applications
Popović et al. Modeling and development of autosar software components
Loiret et al. Constructing domain-specific component frameworks through architecture refinement
Thramboulidis Τhe Function Block Model in Embedded Control and Automation: From IEC61131 to IEC61499
Haberl Code generation and system integration of distributed automotive applications

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1148843

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1148843

Country of ref document: HK

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20140604

Termination date: 20160508