在过去的几篇文章中,我们一直在探索开发人员如何与传感器交互并开发可重用的驱动程序。在“与现代传感器接口:接口设计”中,我们研究了如何使用 c 设计传感器接口。在本文中,我们将从更面向对象的角度使用 c++ 创建传感器接口。
使用 uml 进行界面设计
统一建模语言(uml) 提供了一种标准化的方式来表达独立于编程语言的软件概念。在开始编写代码之前,想要设计传感器接口的开发人员应该创建一个简单的类图,展示他们的传感器接口类的外观。例如,传感器的类图可能如下所示:
(来源:雅各布·贝宁戈) 此图中有几个有趣的点需要注意。首先,接口是继承类必须实现的操作的集合。读者会注意到我们的顶层是一个接口,它描述了每个继承类必须实现的操作。在此示例中,这包括以下操作:
初始化传感器 写入传感器 从传感器读取 任何传感器都至少有这些操作,但它们可能会提供额外的方法,例如 power 类也提供校准操作。在面向对象的术语中,传感器类是一个抽象类。其次,我们使用空心箭头表示实现类继承自接口。温度、湿度和功率都是实现传感器的类。最后,power 类还作为一个附加方法(操作),calibrate,它不是 sensor 接口的一部分。
在 c++ 中实现接口
c++ 没有像 java 等其他面向对象的编程语言那样特别具有接口。c++ 仅使用抽象类提供接口功能。抽象类是其他类从其继承的具有至少一个纯虚函数的基类。纯虚函数是已声明但未提供实现的函数。相反,继承类必须提供实现。回想一下我们的 uml 图,这是有道理的。sensor 类正在创建一个契约,所有传感器都将提供 init、write 和 read 操作,但 sensor 类本身不知道如何实现这些操作。它将实现留给类实现来完成。
在 c++ 中创建接口相对简单。开发人员像任何其他类一样创建该类,只是它们不包含构造函数,这取决于实现类,但仍应创建解构函数。然后将每个操作声明为纯虚函数。sensor 接口基类的示例如下所示:
类传感器接口{ 上市: 虚拟 void init() = 0; 虚拟无效写入()= 0; 虚拟无效读取()= 0;}; 除了通常称为方法的函数被声明为虚拟并分配一个空值之外,该类的创建方式与任何其他类一样。我们还包括一个析构函数以确保我们也可以进行清理。
实现一个新的传感器类
在我们的示例图中,我们有三个不同的继承类,温度、湿度和功率。我们当然可以有更多或更少,我们甚至可能有与这些类相关或继承自这些类的类。不过今天,我们有兴趣了解如何让我们的传感器类从接口(抽象类)继承。
当我们定义将从 sensorinterface 类继承的传感器类时,我们将定义如下类:
温度类:公共传感器接口{ 上市: 无效初始化(); 无效写入(); 无效读取();};类湿度:公共传感器接口{ 上市: 无效初始化(); 无效写入(); 无效读取();};类电源:公共传感器接口{ 上市: 无效初始化(); 无效写入(); 无效读取(); 无效校准();}; 如您所见,我们在新类定义之后使用:,然后是基类。新类必须定义纯虚函数才能实例化该类。今天我不打算详细介绍它的外观,但为了给你一个大致的概念,我使用的符号是用于外部定义的,所以每个类都有一个形式的实现:
类::函数{} 结论
基类可用于设计其他类可以继承的接口。以这种方式创建接口的好处是它在应用程序和对象之间创建了关于如何使用它的合同。这有助于抽象出有关幕后发生的事情的细节,从而为设计增加灵活性和可扩展性。当我们开始考虑与低级硬件对象交互时,这绝对是有利的。
jacob beningo 是一名嵌入式软件顾问、技术顾问和教育家,目前与十几个国家的客户合作,以极大地改变他们的软件、系统和流程。请随时通过 jacob@beningo.com 和他的网站 www.beningo.com 与他联系,并在此处注册他的每月嵌入式字节通讯。
分享这个: 推特 facebook 领英 更多的 reddit tumblr pinterest whatsapp skype pocket telegram
标签:设计方法,语言,源代码,工具和软件
继续阅读 以前的汽车软件的变化
下一个为什么物联网不仅仅是智能冰箱和恒温器
发表评论cancel reply 您必须登录或 注册才能发表评论。
减速器结构设计有哪四大禁忌值得注意!!
DS18B20 数字温度计特点
公共云与私有云的区别及应用
联想K5Note评测 续航和性价比非常出色
小米衰落了? 红米Note4X发布小米Note3曝光
使用C++创建传感器接口
受藤蔓启发的具有自适应行为的软体生长机器人FiloBot
真心漂亮,荣耀magic真机拆解
人才缺失制约芯片产业发展_集成电路产业薪资竞争力弱成痛点
宁德时代欧洲动力电池项目有了新进展
小米MIX/小米Note 2/小米5S/小米5S Plus对比评测
基于TMS320DM6437数字媒体处理器实现高级驾驶员辅助系统的设计
聊聊MBD开发流程
安费诺先进传感器推出IPT2000压力变送器
总投资65亿元,温州比亚迪新能源动力电池项目开工
传三星要自行研发GPU 自研GPU的好处是什么
倚天710性能监控—DDR PMU子系统
浅谈接线端子的连接方法
全球5G手机市场需求强劲,预计年产量达5亿部
OLED柔性拼接屏的优势