[转]OOPC:Object-Oriented Programming in C
转载自:http://www.cnblogs.com/stli/archive/2010/10/16/1853190.html
OOPC是指OOP(Object-Oriented Programming)与C语言的结合,它是一个面向对象C语言编程框架。它是一套C语言的宏,定义了OOP概念的关键字,借助于这一套宏,实现面向对象的特性,如类、对象、继承、接口、多态、消息等。
C++对于大型软件架构的良好可控性,和对以后程序员维护代码时良好的可读性;然而就目前来说,在嵌入式领域广泛的使用C++显然是不现实的事情。一般的嵌入式系统开发中只用到了其中的一小部分功能,而不需要全部的机制,比如多重继承、运算符重载等。因此,许多嵌入式系统的开发者就舍弃了C++的庞大身躯而回归到精简的C环境中。
一般情况下,一个更容易扩展、维护的软件通常采用的是OOP的思想,添加一个原本不存在的相对无关单独的个体,总比在一个已经存在的过程内硬塞进去一个对象要简单;而且面向过程更容易导致混乱的维护。然而舍弃C++的同时也舍弃了珍贵的OOP能力,实在太可惜了。
C语言良好的可移植性,对内存等良好的操作性以及执行之速度均是一般嵌入式产品的不二首选。我们要应此放弃C++吗?当然不,幸好已经有很多优秀的设计师为我们指明了C语言OOP化的道路。
虽然OOPC语法不如C++那么简洁,但是OOPC也有亮丽的特色,就是编译后的程序所占的内存空间比C++小的多,执行效率高,适用于Embedded System。
Axel-Tobias Schreiner阐述了利用普通ANSI-C同样可以实现面向对象思想,1993年10月出版图书《Object-oriented Programming with ANSI-C》阐述了利用ANSI-C实现面向对象编程思想的基础。
本书下载地址:http://www.planetpdf.com/codecuts/pdfs/ooc.pdf
中文翻译地址:http://wiki.chinaunix.net/index.php/OOC:内容
在2001年,Laurent Deniau以C 的宏指令(Macro)定义出OOPC的机制,并在其网页上公开与大家分享。请参考其网页:http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html
LW_OOPC(Light Weight Object-oriented Programming with C,2010.1.24开源)轻量级的面向对象C编程框架是由台湾高焕堂先生以及他的MISOO团队创作了第一个版本之后,又由金永华改进优化,再以LGPL协议开源出来的。这个框架的面世与高焕堂的著作《UML+OOPC嵌入式C语言开发精讲》有关。总共一个.h文件、25个宏、约100行代码,非常的轻量级,但很好的支持了很多的面向对象特性,比如继承、多态(非完全意义上的多态,因为要提供类型,不是完全统一的形态),可以很优美的实现面向接口编程。
LW_OOPC不足以提供足够的能力使我们实现面向对象所有的概念。但是我们依然可以应用它们完成我们简单的面向对象思想的构建。
开源地址:http://sourceforge.net/projects/lwoopc/
[转]OOPC:Object-Oriented Programming in C相关推荐
- Java OOP(Object Oriented Programming)个人理解及总结
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计) 其三大特征:封装,继承,多态: 封装:解决数据的安全问题. 继承:解决代码的重用问题. 多态:解决程序 ...
- Python编程基础:第三十九节 面向对象编程Object Oriented Programming
第三十九节 面向对象编程Object Oriented Programming 前言 实践 前言 到目前为止我们都是函数式编程,也即将每一个功能块写为一个函数.其实还有一种更常用的编程方式被称为面向对 ...
- Coursera课程Python for everyone:Quiz: Object Oriented Programming
Object Oriented Programming 11 试题 1. Which came first, the instance or the class? instance class fun ...
- 面对对象编程(OOP, Object Oriented Programming)及其三个基本特性
一千个读者,一千个哈姆雷特.对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 . 面向对象编程(OOP, O ...
- 面向对象编程(Object Oriented Programming)概念总结及延伸(一)
1.介绍 笔者的梦想是成为一个架构师,但是要成为一个合格的架构师是相当不易的,它既需要丰富的项目经验也需要不断地吸取新的知识,而且在这过程中我们也要不断巩固基础知识.我也注意到了,现在主流的文章大都集 ...
- Java SE 008 理解面向对象程序设计 (Inside Object Oriented Programming)
Java SE 008 理解面向对象程序设计 (Inside Object Oriented Programming) 前言:此笔记为圣思园张龙老师讲述的java视频课程笔记,自己看视频学习时记录的, ...
- python Object Oriented Programming
python 知识点整理(五) 本文只是对python部分知识点进行学习和整理 本篇主要是针对python的Object Oriented Programming的总结 本文目录 python 知识点 ...
- Object Oriented Programming面向对象编程
OOP 面向对象编程( Object Oriented Programming)是一种 计算机编程 架构.OOP 的一条基本原则是 计算机程序是由单个能够起到子 程序作用的单元或 对象组合而成.OOP ...
- OOP(Object,Oriented Programming)
1.面向对象概念 在学习面向对象之前,我们可以先了解一下面向过程.面向过程是一种思想,意思是我们要做任何事,都需要亲力亲为,强调的是过程. 面向对象也是一种编程思想,相对于面向过程,我们可以由原来问题 ...
- 面向对象编程 object oriented programming(OOP)(第二篇)
函数装饰器 对于某个函数,如果我们希望在不改变该函数代码的前提下,为该函数增加额外的功能,那么就可以使用装饰器来装饰该函数. 装饰器是一个函数,装饰器接收一个函数作为参数(传入的实参是被装饰的函数) ...
最新文章
- php 判断是否是单词,php – 检查字符串是否包含任何单词
- 浏览器缓存机制学习总结
- 贪心算法之——喷水装置一(nyoj6)
- 【centos6.5 安装 node.js + npm】
- boost::intrusive::avltree_algorithms用法的测试程序
- php unset 多可以什么_php unset()销毁单个或多个变量
- 小a与黄金街道(欧拉函数)/**模运算规则总结*/
- 大话细说ORM -----(转)
- 类中调用界面ActiveX控件报错当前线程不在单线程单元中因此无法实例化 ActiveX 控件的解决办法...
- oracle数据库如何授权收费吗,如何减少Oracle数据库的License和支持费用
- 【IoT最佳实践】设备获取实时天气DEMO代码解读
- 移动办公、企业-移动办公:移动过程中的办公触手可及-by小雨
- Java基础学习总结(110)——Java主要技术点总结
- HDU2044 一只小蜜蜂...【递推】
- php判断是字符串类型,php使用strpos判断字符串中数字类型子字符串出错的解决方法 原创...
- CentOS 8 的安装(官方安装、清华大学开源软件镜像站、阿里云镜像、网易镜像下的安装步骤)
- 当我们在浏览器地址栏中输入一个网址会发生什么
- 如何用Python画QQ表情中的滑稽脸
- 保姆级讲解Transformer
- 人大金仓 创建表空间_人大金仓kingbaseES安装及操作
热门文章
- python题目(1)
- centos7中Python切换到Python3.x版本(解决常出现的错误)
- python ndarray转binary_Python 实现Image和Ndarray互相转换
- L1-064 估值一亿的AI核心代码 (20 分)—团体程序设计天梯赛
- canvas.clipPath canvas.clipRect() 无效的原因
- 占空比50%的5分频 记事续 20110920
- sudo: must be setuid root错误解决方法.
- python错误修复方法_python常见异常及解决方法
- adb 静默安装_Android静默安装的实现方案(一)
- anaconda的python文件打包失败的问题解决方案