概念澄清
抽象类:c++的定义是至少有一个纯虚函数的类(还有其他公共的、私有的方法)。
接口类:c++的定义是类中只有纯虚函数,最好不要有成员变量,有也要是保证是静态常量等等规定。
可以看到抽象类是对类的抽象,接口类是对抽象类的再抽象。
那么在OOPC中如何区分接口类和抽象类?不知道,没有这些概念吧。c语言又没有提供这些概念和语法。不过可以模仿c++进行如下定义:
oopc接口类:类中既有方法又有属性的类。
oopc纯接口类:只有方法的类
oopc面向接口编程:因为c语言中没有这些接口类的语法定义,所以管它呢,统称为接口得了。所以面向接口编程就无所谓纯不纯了,只要有方法就算接口得了。

正文
《rtt面向对象oopc——0.类、对象及派生》统计了rtt很多很多类及其派生继承关系,见https://blog.csdn.net/yhb1206/article/details/102618404
那么这些类有啥用?

1.面向接口编程
面向接口编程指的是下层(子类)受到上层(父类)接口的约束。因为各子类都内嵌一样的一套父类struct结构体(参见《oopc——继承》)——这就约束了各子类要各自实现父类里面的各接口(函数指针),这样才能体现多态。

2.统一协议,屏蔽不同子类的差异
这个屏蔽就是通过具有相同的父类来屏蔽的。

3.复用性强
按类来建立管理接口,这样管理方便,复用性强。
以串口为例,各管理接口从上到下分散在如下c文件中:
—> device.c
—> serial.c
—> drv_uart.c

drv_uart.c是最底层、驱动层,是串口设备类的驱动管理接口所在地,也是开发者唯一要干的活——注意,这样的c文件有很多很多很多——以各BSP为单位进行的编写的,rtt源码下/bsp下的各个平台,每个平台一个drv_uart.c(可能不叫这名字,根据各bsp开发者的兴趣而定)。
serial.c属于rtt框架对接层,是串口设备类管理接口所在。rtt已开发完,不需要开发人员动任何代码(除非发现BUG)。该层又再上一层的差异屏蔽,它可以对接各种芯片实现的的drv_uart.c(可能名字不叫这根据各个芯片BSP的开发者喜好来定)。注意,还层只有这一个.c文件,666。
device.c是设备管理层,是设备基类管理接口所在。该层更牛逼,屏蔽了底层各设备类(串口设备类、CAN设备类等)的差异,统一接口。同框架对接层一样,rtt已开发完,不需要开发人员动任何代码(除非发现BUG)。注意,该层也是只此一个.c,6不6。

复用性超级强
(1)驱动层属于同一芯片的不同板载完全可以共用该层代码。
(2)框架对接层,是不管什么芯片都在共用的。
(3)设备管理层更厉害了,不管什么芯片,也不管什么具体设备类,大家都共用。

4.管理接口精简化
按类来建立管理接口,每类只有一套管理接口。

5.健壮性
因管理接口统一共用,一直很稳,保障程序的健壮性。

rtt面向对象oopc——1.rtt定义的这些类有什么用?相关推荐

  1. rtt面向对象oopc——4.IO设备管理之父类调用子类方法

    本篇所述设备驱动层.设备驱动框架层.IO设备管理层需对照上一节看--rtt面向对象oopc--3.对官方IO设备模型框架图的补充绘图 目录 1 IO设备管理层 1.1 基类 1.2 设备基类 1.2. ...

  2. rtt面向对象oopc——2.对象容器理解和rtt类的联系

    1.rtt的对象容器 rtt的对象容器就是一个数组. 这个数组有多长?有多少大类,数组就有多长.每类占用数组的一个元素,每个元素维护一类对象的链表(可开启跳表加速查询),如下官方图: rtt中各个类创 ...

  3. rtt面向对象oopc——3.对官方IO设备模型框架图的补充绘图

    该补充图有幸得到rt thread官方认可,gitee上已提交PR,且通过了官方评审,已被合并到<IO设备模型>章节末尾的<补充说明>小节里了rt-thread官方文档gite ...

  4. rtt面向对象oopc——0.类、对象及派生

    rt thread源码路径 一.rtt的类与对象 rtt的对象控制块(struct结构体)就是类, 由对象控制块创建的变量就是对象. 形象化点,变量就是对象,变量的类型就是类. rtt的基本操作单位是 ...

  5. rtt面向对象oopc——5.IO设备管理之快速查看设备父类调用设备子类的方法

    如果说不想了解rtt的模型框架,就想快速查看某类设备的使用流程(即调用链),有没有捷径呢?有一个,只需定位到rtt的设备注册接口和rt_device_find查找它的地方即可.注册接口是骨架,顺流而上 ...

  6. rtt学习记录、面向对象oopc等分享

    懒得在搬过来了, 我把笔记链接发过来 rt-thread有道笔记 内容简介: 1.rtt学习记录,包括内核源码.env.scons.组件等学习记录. 2.rtt面向对象思想oopc,以串口为例详细分析 ...

  7. java面向对象第一课,定义类,模拟人的行为:吃饭工作休息

    java面向对象第一课,定义类,模拟人的行为:吃饭工作休息 /*** 定义类,模拟人的行为:吃饭工作休息*/ public class Person {//静态特征:成员变量 属性 fieldStri ...

  8. python核心编程:Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解

    这篇文章主要介绍了Python面向对象程序设计中类的定义.实例化.封装及私有变量/方法,结合具体实例形式较为详细的分析了Python面向对象程序设计中类的定义.实例化.封装.私有变量.私有方法等相关使 ...

  9. python面向对象课程大作业 定义一个描述学生基本情况的类,数据成员至少包括 “姓名、性别、学号、年级、所在院系、面向对象的考试日期”

    python面向对象课程大作业 按下列要求编写一个完整的程序: 定义一个描述学生基本情况的类,数据成员至少包括"姓名.性别.学号.年级.所在院系.面向对象的考试日期",成员函数至少 ...

最新文章

  1. 大写的服!中科大博士20万字论文:如何给女朋友送礼物
  2. 面试感悟—-一名3年工作经验的程序员应该具备的技能
  3. nidlist 问题
  4. 朴素贝叶斯算法注意事项(有待完善)
  5. 【蓝桥杯】历届试题 分糖果
  6. Linux 系统文件及结构
  7. 计算H时M分S秒以后是_泵所需轴功率的计算方式
  8. Python解微分方程(验证数学建模第五版火箭发射模型)
  9. 校园二手交易系统设计与实现
  10. 中国全国行政代码、邮政编码、区号、名称、简称、经纬度 数据库
  11. 计算机应对青少年素质培养作文,2020年关于素质修养的作文5篇
  12. 纯HTML+CSS静态百度登录界面制作
  13. python 学习2
  14. Whois查询结果中不同域名状态的含义
  15. 沥青路面粘弹性力学分析基础研究
  16. 大家能不能在百忙之中 想想鸟姐的话
  17. java exchange 日历_如何通过EWS-API 获取所有会议室的日历信息
  18. 手游平台开发需要哪些人员配置?
  19. GSM通话断续问题分析
  20. 电子电路期末考试复习预测题一(内附详细解析)

热门文章

  1. 从WINDOWS日志判断哪块硬盘好坏!!
  2. 企业ERP选型的两难困惑
  3. React中JSX的理解
  4. 用vuejs如何实现ajax,vue.js如何实现ajax
  5. 中单引号怎么打出来_怎么做打出来的豆浆会更好?
  6. inkscape使用_使用Inkscape和咖啡渣DIY怪异的瓶子标签
  7. 免费开源低代码拖拽开发_资料来源:面向开源开发人员的免费代码搜索工具
  8. ES5常用的组合继承及原型链理解
  9. GiHub创建项目仓库与上传项目,超详细思维导图
  10. HTML autocomplete