面向对象是一种基本的设计思想,与所采用的编程语言基本无关(如果非要杠汇编和二进制,那就是你对),一个反面的例子就是,很多人在初学C 的时候,即便C 里面集成了很多面向对象设计的语法糖,但初学者依然会很容易把“类”当作结构体使用。
面向对象的基本出发点是:把“数据属性”与“数据属性的处理方法”都封装在一起。而我们在使用 C 语言进行嵌入式功能模块设计的时候,因为C语言并不具备C 语言的语法糖,所以通常都会使用结构体的方式来模拟类的设计。
因此,我们在使用OOC(Object-Oriented C Programming with ANSI -C)技术的时候,通常都会面临以下问题:
“嗯,我们可以使用结构体来模拟类,把所有数据变量和函数指针都放在结构体里面进行封装,并且把这个结构体放在接口头文件里面,那么问题来了,结构体里面的成员都是public的(语法层面可以直接使用),但某些数据变量却是private属性(不允许被模块外部直接调用)”
那么,应该如何解决这个问题呢?
在我以往编写的 C 语言面向对象文章里面,示例代码的接口头文件,通常都伴随着这个“直接且尖锐”的问题,而通过编码和模块引用规范这一系列的“君子协定”,往往只能起到“防君子而不能防小人”的作用。