c印记(一):面向对象

2010年至今, 工作已经五六年了,阅读过的博客文章,pdfdoc等文档不说不计其数,至少也很难计数了。但遗憾的是始终还未写过一篇博客(应该是懒病犯了O(_)O~)。这几年的工作期间有很多次都想写点什么,不管是作为笔记记录下来,还是仅仅当做练习打字都好,但基本上都被扼杀在脑海内的萌芽阶段。在网上也看到不少大牛都在说咱高技术的都应该写博客之类的言论,所以经过n+1此的挣扎之后,俺还是准备硬着头皮写一篇看看(上了初中之后语文基本上都没及格过的水平,这文笔嘛,也只能 呵呵了)。

 

       虽然决定要写点东西了,但一时之间却不知道具体该写点儿啥,脑袋里就像一堆浆糊一样,于是乎俺绞尽脑汁,在一阵苦思冥想之后,这堆浆糊终于被发烫的大脑给煮沸了,顷刻间,云雾缭绕,千头万绪在浆糊里游荡,无赖之下俺只能快刀斩乱麻,随意揪出了一个----- C,这五六年里使用最多的就是c语言(似乎有点low的样子。。。),那咱就从c出发,来聊一聊,c语言在俺们脑海里留下了一个什么样的印记。

    

      俺们不准备写什么c语言教程,因为那太多太多了,都烂大街了,所以呢,俺们将会想到啥写啥,其中有不少都是一些个人想法或看法,不保证完全的正确性。

 

    这第一篇咱就来说说面向对象,说道面向对象,应该有不少人第一时间想到的就是c++/java, 类,虚基类,多态,继承等等,但这只是很片面的,寡人以为咱们应该从两个层面来理解面向对象:

1 思想层面,即面向对象思想(这类似于OOA),以面向对象的方式来描述万事万物的本质以及它们之间的关系, 比如: ‘鸟’这个存在是

       种动物;

 

2、技术层面,即面向对象技术或方法(这类似于OOD/OOP, 以面向对象的技术或方法来表示万事万物以及他们之间的关系,这里就存在如 

    ‘类’这样的专业术语了,比如:‘动物’是基类,而‘鸟’这个类是‘动物’这个类的子类(即继承自‘动物’这个类)。

 

 

        关于面向对象概念性东西就这样点到即止了(且不论上述两条是否正确),咱不做过多描述,因为真正的主角是 C,说道c语言呢,大多数人对它的印象就是结构化编程,面向过程编程等等。诚然,c语言确实是比较适合结构化编程,面向过程编程,但这并不是说c语言就只能进行面向过程编程。寡人以为编程语言本身并不能决定程序员以什么样的方式编程,至少不能决定以什么样的思想来指导编程。

 

       所以咱们的c语言也能使用面向对象的思想甚至是部分面向对象的技术或方法进行编程。于是乎俺就亲切的问了一下度娘(当然是在几年前的时候问的),发现让c语言实现面向对象编程一般而言都是使用结构体(struct)来模拟类(class),以结构体中的函数指针来模拟类中的成员函数(或称其为方法)。比如描述一个‘人’类

使用c++可能会是如下写法:

classPerson

{

public:

    Person(int age, const char*name);

~Person();

public:

    void sayHello();

private:

int mAge;

char* mName;

};

 

使用c语言可能又会是如下写法:

struct Person

{

  void (*Init)(struct Person* pPerson, int age, const char* name);

  void (*Uninit)(struct Person* pPerson);

  void (*sayHello)(struct Person* pPerson);

  int mAge;

  char* mName;

};

因为c语言中没用this指针,所以每个方法的参数中都必须带有‘类’的指针作为形参。

 

网络上用c语言实现面向对象的方法有很多种,各式各样的都有,不过最终的目标是一致的。阅读了几分实现代码之后,就感觉《UML+OOPC嵌入式C语言开发精讲》一书中介绍高焕堂及其MISOO团队创作的lw_oopc宏还不错,简洁,优雅。

 

    俺没没有找到书中的源码,但是在source forge中看到了经过优化加强的lw_oopc,有兴趣的可以去下载来看看(目前是1.2版本)

http://sourceforge.net/projects/lwoopc/

 

 

第一篇写得着实不咋地,就到这儿吧,如果再让俺们犹豫一下,可能就会将其就地销毁了。。。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值