从2010年至今, 工作已经五六年了,阅读过的博客文章,pdf,doc等文档不说不计其数,至少也很难计数了。但遗憾的是始终还未写过一篇博客(应该是懒病犯了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/

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

c印记(一):面向对象相关推荐

  1. 【AJAX】JavaScript的面向对象

    Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...

  2. 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?

    AutoSAR入门到精通系列讲解 将从2019年开始更新关于AutoSAR的知识,从入门到精通,博主xyfx和大家一起进步 雪云飞星 ¥29.90 去订阅 简单地说结构化分析方法主要用来分析系统的功能 ...

  3. 2021年大数据常用语言Scala(二十八):scala面向对象 MAVEN依赖和类

    目录 scala面向对象 MAVEN依赖 类 - 掌握 创建类和对象 - 掌握 getter/setter - 了解 类的构造器 - 掌握 scala面向对象 MAVEN依赖 <?xml ver ...

  4. php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例

    本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...

  5. java面向过程和面向对象

    面向过程(Procedure Oriented):说的是功能的行为 面向对象(Object Oriented,简称OO):说的是功能的对象 面向过程理解: 当学习java的时候先了解java语言优良的 ...

  6. day22_面向对象

    面向过程: 优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. 缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身. 面向对象: 优点是:解决了程序的扩展性.对 ...

  7. java面向对象-------静态初始化块

    1.构造方法用于对象的初始化!静态初始化块,用于类的初始化操作,在静态初始化块中不能直接访问非static成员. package java面向对象; /** * 测试静态初始化块 */public c ...

  8. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP

    其他面向对象设计原则3: 依赖倒置原则DIP  The Dependency Inversion Principle 7.1 依赖倒置原则DIP The Dependency Inversion P ...

  9. Day-16 面向对象03 类与类之间的关系

    一.类与类之间的依赖关系 我用着你,但是你不属于我,这种关系是最弱的,比如,公司和雇员之间,对于正式员工,肯定要签订劳动合同,还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜 ...

最新文章

  1. 如何使用sed在文件中确定行插入带有变量的字符串
  2. 大剑无锋之TCP和HTTP的区别【面试推荐】
  3. 哈哈!TCP泄露了操作系统信息···
  4. Grunt Server:Fatal error: Port 35729 is already in use by another process.
  5. 随想录(我们从uboot学什么)
  6. Python 列表下标操作
  7. [深度学习] loss不下降的解决方法
  8. 学习记录515@色彩搭配五大方案
  9. 前端工程师必备的ps技巧 — 切图
  10. python读excel表_怎么用python读取excel表格的数据
  11. 投资银行理论与实务(二):证券的发行承销与交易
  12. SSLOJ 1323.交流
  13. 办理北京居住证需要的材料
  14. Hazel引擎学习(八)
  15. 目标检测中IoU(Intersection over Union)的概念理解
  16. 网页制作的形式美的规则
  17. 程序人生 - 只要看这一篇,车险全搞懂(值得收藏)
  18. (BAT批处理)批量文件夹重命名,要求是在原文件夹名前加上英文字母前缀aa
  19. 全国信息竞赛语言有python吗_2019年全国信息学竞赛有哪些
  20. 极限学习机的使用方法

热门文章

  1. JavaScript实现流氓小广告效果
  2. Python None 值
  3. Python中的None
  4. CVPR 2021 论文解读Vol.6 I 动态区域感知卷积,进一步提升分类/检测/分割性能
  5. wepy 实现倒计时代码
  6. torch中contiguous()函数
  7. 验证歌德巴赫猜想(2021/1/16)
  8. 你喜欢读书,还是听书?
  9. equals变量是前面还是后面
  10. 动态梆定数据,除第一条记录