CN101882066A - 创建具体类的实现方法 - Google Patents
创建具体类的实现方法 Download PDFInfo
- 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
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所述的创建具体类的实现方法,其特征在于,该方法还包括步骤:
编译后的构件程序在运行时,动态检查所实现的具体类与所定义的泛类一致性。
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)
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)
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 | 上海科泰世纪科技有限公司 | 计算机软件系统中基于构件接口实现事件回调的方法 |
-
2009
- 2009-05-08 CN CN200910050882.1A patent/CN101882066B/zh not_active Expired - Fee Related
-
2011
- 2011-03-24 HK HK11102973.4A patent/HK1148843A1/zh not_active IP Right Cessation
Cited By (6)
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 | |
Heinecke et al. | Automotive open system architecture-an industry-wide initiative to manage the complexity of emerging automotive e/e-architectures | |
Breivold et al. | Component-based and service-oriented software engineering: Key concepts and principles | |
Wan et al. | Composition challenges and approaches for cyber physical systems | |
CN103617066A (zh) | 一种工作流引擎及其实现方法 | |
CN101882066A (zh) | 创建具体类的实现方法 | |
Hussain et al. | UML-based development process for IEC 61499 with automatic test-case generation | |
Moallemi et al. | Modeling and simulation-driven development of embedded real-time systems | |
Prayati et al. | A methodology for the development of distributed real-time control applications with focus on task allocation in heterogeneous 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. | |
CN103971225A (zh) | 一种工作流动态扩展方法及系统 | |
Fredj et al. | eC3M: Optimized model-based code generation for embedded distributed software systems | |
EP1565813B1 (en) | Code generation | |
TWI387924B (zh) | Integrated Software Component Management System | |
Mraidha et al. | An execution framework for MARTE-based models | |
Schmid et al. | Domain-Oriented Customization of Service Platforms: Combining Product Line Engineering and Service-Oriented Computing. | |
Dalibor et al. | Tagging Model Properties for Flexible Communication. | |
Bubeck et al. | Model driven engineering for the implementation of user roles in industrial service robot applications | |
Rajnak et al. | Computer-aided architecture design & optimized implementation of distributed automotive EE systems | |
Popović et al. | Modeling and development of autosar software components | |
Loiret et al. | Constructing domain-specific component frameworks through architecture refinement | |
Tsai et al. | Semantic interoperability and its verification and validation in C2 systems | |
López Martínez et al. | Ada-ccm: Component-based technology for distributed real-time systems |
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 |