轻量级的面向对语言编程框架介绍.docVIP

  • 1
  • 0
  • 约2.23万字
  • 约 17页
  • 2016-10-13 发布于贵州
  • 举报
轻量级的面向对语言编程框架介绍

轻量级的面向对象C语言编程框架LW_OOPC介绍 金永华、陈国栋 2010/03/02 摘要: 本文介绍一种轻量级的面向对象的C语言编程框架:LW_OOPC。LW_OOPC是Light-Weight Object-Oriented Programming in(with) C的缩写,总共一个.h文件,20个宏,约130行代码,非常的轻量级,但却很好的支持了很多面向对象的特性,比如继承、多态,可以优美的实现面向接口编程。这个框架系由台湾的高焕堂先生以及他的MISOO团队首创,之后由我继续改进优化,最后,经高焕堂同意以LGPL协议开源(开源网址参见后文)。 用C语言实现OO?我没听错吗?这听起来真是太疯狂了!… 大家都知道,C++支持了面向对象和面向泛型编程,比C要更强大些。那么,为什么要在C语言中实践面向对象呢?为什么不直接使用C++呢? 为什么要用面向对象? 面向过程方式开发的系统,代码复杂,耦合性强,难以维护,随着我们所要解决的问题越来越复杂,代码也变得越来越复杂,越来越难以掌控,而面向对象改变了程序员的思维方式,以更加符合客观世界的方式来认识世界,通过合理的运用抽象、封装、继承和多态,更好的组织程序,从而很好地应对这种复杂性。 为什么不直接使用C++? C和C++之争由来已久,可能要持续到它们中的一种去世^_^。C语言以其简洁明快,功能强大的特点,深得开发人员的喜爱,尤其是在嵌入式开发领域,C语言更是占据了绝对老大的地位。在我看来,语言只是工具,作为程序员,我们要做的是:选择合适的语言,解决恰当的问题。我们要尊重事实,考虑开发环境(软硬件环境),考虑团队成员的水平,从商用工程的角度讲,选择团队成员擅长的语言进行开发,风险要小很多。 一些从Java/C#转到C的程序员们,无法从面向对象切换到面向过程,但又必须与C语言同事们在遗留的C系统上开发软件,他们有时会非常困惑:C语言是面向过程的编程语言,如何实践面向对象,甚至面向接口编程呢?此时,就非常需要在C语言中实现面向对象的手段,而LW_OOPC正是应对这一难题的解决之道。 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)。显然,鱼和狗都属于动物,都会动,车子也会动,但是车子不是动物。会动是这些对象的共同特征,但是,显然它们不属于一个家族。因此,我们首先考虑抽象出一个接口(IMoveable),以描述会动这一行为特征: INTERFACE(IMoveable) { void (*move)(IMoveable* t); // Move行为 }; ABS_CLASS(Animal) { char name[128]; // 动物的昵称(假设小于128个字符) int age; // 动物的年龄 void (*setName)(Animal* t, const char* name); // 设置动物的昵称 void (*setAge)(Animal* t, int age); // 设置动物的年龄 void (*sayHello)(Animal* t); // 动物打招呼 void (*eat)(Animal* t); // 动物都会吃(抽象方法,由子类实现) void (*breathe)(Animal* t); // 动物都会呼吸(抽象方法,由子类实现) void (*init)(Animal* t, const char* name, int age); // 初始化昵称和年龄 }; CLASS(Fish) { EXTENDS(Animal); // 继承Animal抽象类 IMPLEMENTS(IMoveable); // 实现IMoveable接口 void (*init)(Fish* t, const char* name, int age); // 初始化昵称和年龄 }; CLASS(Dog) { EXTENDS(Animal)

文档评论(0)

1亿VIP精品文档

相关文档