轻量级的面向对象c语言编程框架介绍

轻量级的面向对象c语言编程框架介绍

ID:23793888

大小:156.50 KB

页数:17页

时间:2018-11-10

轻量级的面向对象c语言编程框架介绍_第1页
轻量级的面向对象c语言编程框架介绍_第2页
轻量级的面向对象c语言编程框架介绍_第3页
轻量级的面向对象c语言编程框架介绍_第4页
轻量级的面向对象c语言编程框架介绍_第5页
资源描述:

《轻量级的面向对象c语言编程框架介绍》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、轻量级的面向对象C语言编程框架LW_OOPC介绍金永华、陈国栋2010/03/02摘要:本文介绍一种轻量级的面向对象的C语言编程框架:LW_OOPC。LW_OOPC是Light-WeightObject-OrientedProgrammingin(with)C的缩写,总共一个.h文件,20个宏,约130行代码,非常的轻量级,但却很好的支持了很多面向对象的特性,比如继承、多态,可以优美的实现面向接口编程。这个框架系由台湾的高焕堂先生以及他的MISOO团队首创,之后由我继续改进优化,最后,经高焕堂同意以LGPL协议开源(开源网址参见后文)。用C语言实现OO?我没听错吗?

2、这听起来真是太疯狂了!…大家都知道,C++支持了面向对象和面向泛型编程,比C要更强大些。那么,为什么要在C语言中实践面向对象呢?为什么不直接使用C++呢?为什么要用面向对象?面向过程方式开发的系统,代码复杂,耦合性强,难以维护,随着我们所要解决的问题越来越复杂,代码也变得越来越复杂,越来越难以掌控,而面向对象改变了程序员的思维方式,以更加符合客观世界的方式来认识世界,通过合理的运用抽象、封装、继承和多态,更好的组织程序,从而很好地应对这种复杂性。为什么不直接使用C++?C和C++之争由来已久,可能要持续到它们中的一种去世^_^。C语言以其简洁明快,功能强大的特点,深

3、得开发人员的喜爱,尤其是在嵌入式开发领域,C语言更是占据了绝对老大的地位。在我看来,语言只是工具,作为程序员,我们要做的是:选择合适的语言,解决恰当的问题。我们要尊重事实,考虑开发环境(软硬件环境),考虑团队成员的水平,从商用工程的角度讲,选择团队成员擅长的语言进行开发,风险要小很多。一些从Java/C#转到C的程序员们,无法从面向对象切换到面向过程,但又必须与C语言同事们在遗留的C系统上开发软件,他们有时会非常困惑:C语言是面向过程的编程语言,如何实践面向对象,甚至面向接口编程呢?此时,就非常需要在C语言中实现面向对象的手段,而LW_OOPC正是应对这一难题的解决

4、之道。LW_OOPC是什么?简而言之:LW_OOPC是一套C语言的宏,总共1个.h文件(如果需要内存泄漏检测支持以及调试打印支持,那么还需要1个.c文件(lw_oopc.c,约145行)),20个宏,约130行代码。LW_OOPC是一种C语言编程框架,用于支持在C语言中进行面向对象编程。LW_OOPC宏介绍下面,先通过一个简单的示例来展示LW_OOPC这套宏的使用方法。我们要创建这样一些对象:动物(Animal),鱼(Fish),狗(Dog),车子(Car)。显然,鱼和狗都属于动物,都会动,车子也会动,但是车子不是动物。会动是这些对象的共同特征,但是,显然它们不属于

5、一个家族。因此,我们首先考虑抽象出一个接口(IMoveable),以描述会动这一行为特征:INTERFACE(IMoveable){void(*move)(IMoveable*t);//Move行为};INTERFACE宏用于定义接口,其成员(方法)均是函数指针类型。然后,我们分析Animal,它应该是抽象类还是接口呢?动物都会吃,都需要呼吸,如果仅仅考虑这两个特征,显然可以把Animal定为接口。不过,这里,为了展示抽象类在LW_OOPC中如何应用。我们让Animal拥有昵称和年龄属性,并且,让动物和我们打招呼(sayHello方法),但,我们不允许用户直接创建A

6、nimal对象,所以,这里把Animal定为抽象类:ABS_CLASS(Animal){charname[128];//动物的昵称(假设小于128个字符)intage;//动物的年龄void(*setName)(Animal*t,constchar*name);//设置动物的昵称void(*setAge)(Animal*t,intage);//设置动物的年龄void(*sayHello)(Animal*t);//动物打招呼void(*eat)(Animal*t);//动物都会吃(抽象方法,由子类实现)void(*breathe)(Animal*t);//动物都会呼吸

7、(抽象方法,由子类实现)void(*init)(Animal*t,constchar*name,intage);//初始化昵称和年龄};ABS_CLASS宏用于定义抽象类,允许有成员属性。代码的含义参见代码注释。紧接着,我们来定义Fish和Dog类,它们都继承动物,然后还实现了IMoveable接口:CLASS(Fish){EXTENDS(Animal);//继承Animal抽象类IMPLEMENTS(IMoveable);//实现IMoveable接口void(*init)(Fish*t,constchar*name,intage);//初始化昵称和年龄};C

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。