当前位置: 首页 > news >正文

轻量级的C语言面向对象编程框架

轻量级的C语言面向对象编程框架(约130行代码)
 
摘要:
本文推荐一种新开源(2010.1.24开源)的轻量级的面向对象C编程框架LW_OOPC(Light Weight Object-oriented Programming with C),总共一个.h文件、25个宏、约100行代码,非常的轻量级,但很好的支持了很多的面向对象特性,比如继承、多态(非完全意义上的多态,因为要提供类型,不是完全统一的形态),可以很优美的实现面向接口编程。
这个框架是由台湾高焕堂先生以及他的MISOO团队创作了第一个版本之后,又由金永华改进优化,再以LGPL协议开源出来的。
这个框架的面世与高焕堂的著作《UML+OOPC嵌入式C语言开发精讲》有关。
开源项目地址: http://sourceforge.net/projects/lwoopc/
 
为什么要用面向对象?
面向过程方式开发的系统,代码复杂,耦合性强,难以维护,是大家都知道的。
面向对象,改变了程序员的思维方式,以更符合客观世界认知规律的视角来认识世界,进行抽象,从而在更高的抽象层次上解决问题。
抽象层次高,意味着高屋建瓴,能够看清全貌,能够控制全局,能够以简洁的方式轻松扩展反映现实世界。
这样构建的系统,能够在不同的抽象层次上理解和掌握,越高抽象层次越简单,越容易把握。
所以学习起来,自顶向下,可以逐步深入,很容易理解和掌握系统。
当然,上述这一点只是从理解系统的难度上做的粗浅的分析。
从另外一个方面讲,面向对象极大的解除了耦合,提高了模块的内聚性。
从而使得复用更轻松,测试更轻松,理解也更轻松,因为不必整个系统全部了解,可以每个模块各个击破,再结合上面的不同抽象层次的理解,就可以把握整个系统了。
 
为什么要用C实现面向对象?
虽然C++已经出现很久了,但C语言的生命力还是非常旺盛。
刚从JAVA/C#转到C的同事,无法从面向对象切换到面向过程,但又必须与C语言同事们在遗留的C系统上开发软件,就非常需要C语言实现面向对象的手段。
C和C++之争由来已久,估计从C++出生就有了,估计要持续到它们中的一种去世^_^
在这个争论不休的年代,往往各种原因使得语言的选择身不由己,这个时候C也能实现OO,将给您带来失去C++后不用失去OO的欣慰。
 
怎么用C实现面向对象?
本文推荐一种新开源(2010.1.24开源)的轻量级的面向对象C编程框架LW_OOPC(Light Weight Object-oriented Programming with C),总共一个.h文件、20个宏、约130行代码,非常的轻量级,但很好的支持了很多的面向对象特性,比如继承、多态(非完全意义上的多态,因为要提供类型,不是完全统一的形态),可以很优美的实现面向接口编程。同时对内存分配做了很好的处理,支持在堆上动态生成对象,也支持在栈上生成对象,动态生成的对象还能进行内存分配释放跟踪,避免内存泄露。
另外,也有很多其它C实现面向对象的参考资料,
比如:
1、1993年出现的《Object-oriented Programming with ANSI-C》,可能是这方面资料的鼻祖吧?
下载地址: http://www.planetpdf.com/codecuts/pdfs/ooc.pdf
2、这里也有一个参考网址:
http://www.eventhelix.com/RealtimeMantra/basics/object_oriented_programming_in_c.htm
3、Google或者百度一下,还可以找到不少相关资料。
 

相关文章:

  • 使用putty远程连接linux
  • [OLEDB] 目前还找找不到处理下面错误的办法
  • iOS实现程序长时间未操作退出
  • 7类食品让你越吃越聪明
  • ATT 现场测试白盒交换机
  • 在ASP.NET中使用SubSonic时,要进行的相关设置
  • 解除无法执行“REGEDIT”的限制
  • spring test
  • go语言指针符号的*和
  • Oracle 中使用 ObjectDataSource 读取强类型 DataSet 数据集
  • 【DocFX文档翻译】DocFX 入门 (Getting Started with DocFX)
  • 总结了一些常见的排序算法,面试必备啊!转载
  • Github上10 个最流行的数据可视化项目
  • 高中数学与初中数学的接轨点
  • 添加IIS出错,提示缺少CONVLOG.exe文件
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • CSS中外联样式表代表的含义
  • Flannel解读
  • Objective-C 中关联引用的概念
  • PHP 7 修改了什么呢 -- 2
  • scala基础语法(二)
  • session共享问题解决方案
  • SQLServer之创建数据库快照
  • Yii源码解读-服务定位器(Service Locator)
  • 搞机器学习要哪些技能
  • 前端面试之闭包
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 温故知新之javascript面向对象
  • linux 淘宝开源监控工具tsar
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • # Java NIO(一)FileChannel
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $.ajax()
  • (2)nginx 安装、启停
  • (floyd+补集) poj 3275
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (一)SpringBoot3---尚硅谷总结
  • (原)Matlab的svmtrain和svmclassify
  • (原)本想说脏话,奈何已放下
  • (转)iOS字体
  • (转载)从 Java 代码到 Java 堆
  • *1 计算机基础和操作系统基础及几大协议
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET Core跨平台微服务学习资源
  • .net 设置默认首页
  • .net6+aspose.words导出word并转pdf
  • .NetCore项目nginx发布
  • .net生成的类,跨工程调用显示注释
  • .NET中winform传递参数至Url并获得返回值或文件
  • @media screen 针对不同移动设备
  • @RestControllerAdvice异常统一处理类失效原因
  • [20180129]bash显示path环境变量.txt