加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 1 - 什么是设计模式?
    • 2 - 为什么嵌入式要用设计模式?
    • 3 – 嵌入式软件如何使用设计模式?
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

嵌入式 C 语言设计模式

2022/10/13
4200
阅读需 8 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

我是老温,一名热爱学习的嵌入式工程师

 

1 - 什么是设计模式?

关于设计模式的概念,在网络上只需要搜索“什么是设计模式?”,就会有不少关于设计模式的概念介绍。

通俗地概括,设计模式就是一套写代码方面的最佳实践经验总结,这些经验总结已经被很多软件工程师知晓,并且在实际项目中反复验证。

设计模式起源于1994年,最初由4位外国的软件工程师(Gang of Four,简称GOF)提出,他们提出可复用的面向对象软件元素---设计模式,是基于以下两点原则进行设计的:

1-对接口编程而非对实现编程。

2-优先使用对象组合而不是继承。

GOF一共提出了23种设计模式,这些设计模式可以分为三个大类:创建型模式、结构型模式、行为型模式。

创建型模式:工厂模式,抽象工厂模式,单例模式,建造者模式,原型模式

 

结构型模式:适配器模式,桥接模式,过滤器模式,组合模式,装饰器模式,外观模式,享元模式,代理模式

 

行为型模式:责任链模式,命令模式,解释器模式,迭代器模式,中介者模式,备忘录模式,观察者模式,状态模式,空对象模式,策略模式,模板模式,访问者模式

设计模式会遵循以下六大原则:开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、最少知道原则(迪米特法则)、合成复用原则。

2 - 为什么嵌入式要用设计模式?

纵观网络上很多嵌入式相关的代码例程,基本上都是面向过程和面向实现而进行编程的,一部分原因,是跟面向过程的C语言属性有关,

另一方面,很多嵌入式开发的入门教程,都没有对“设计模式”这些概念进行具体介绍,而是把侧重点放在了代码的执行过程和例程演示。

由于嵌入式开发一般脱离不了硬件底层设计,对于刚刚入行的嵌入式初学者,他们所接触的代码例程都是以面向过程面向实现来进行演示,

这就容易让他们形成了“过程实现式”思维,而非“对象抽象化”思维,这种思维定势,一般会伴随嵌入式软件工程师整个软件开发生涯。

设计模式无论对于自己对于他人,还是对于整个系统设计,都是多赢的,因为使用设计模式构建的系统,可以使软件代码实现真正的工程化,让代码更容易被他人理解,并且保证代码的可靠性,

因此,设计模式是软件工程的基石(此外,还有数据结构和算法)

在嵌入式软件开发过程中,每种设计模式都有其对应的工作原理,并且针对特定的问题给出该问题核心的解决方案,这也是设计模式在很多大中型软件工程中被广泛使用的原因。

设计模式为软件开发人员提供了标准的术语,并且每种设计模式都具体到了特定的情景,所以,经验不足的软件开发人员可以通过对设计模式的学习,简单快捷地掌握基本的软件工程设计。

使用C语言作为主要编程语言的Linux内核,里面大量使用了设计模式,没有面向对象设计思维,不会设计模式的工程师,一般很难理解Linux内核的设计精髓。

需要重点说明的是,本文以及本系列文章,并不是在“神化”并盲目放大设计模式的优势之处,也并不是泛指凡是嵌入式设备都必须用上设计模式作为编码指导,

作为嵌入式工程师,应该根据自身项目的复杂度以及项目规模,在兼顾开发效率的同时,选择合适的设计方案。

本系列文章旨在提供一种设计思路,当嵌入式软件工程师在开发过程中遇到实际问题的时候,可以更好地参考前辈总结的最佳实践方案。

 

3 – 嵌入式软件如何使用设计模式?

设计模式不是高级编程语言(面向对象编程语言)独有的东西,面向对象编程语言由于其语法特性,可以很方便很简单地在实际软件开发中应用设计模式。

而对于一名嵌入式软件工程师,学习设计模式,更多的是需要学习设计模式背后的原理,以及学习设计模式所针对的问题场景,从而养成设计模式的应用思维,而不是让思维受限于编程语言。

对于大多数嵌入式软件工程师而言,C语言是使用频率最高的编程语言,因此,在学习嵌入式软件如何使用设计模式之前,嵌入式软件工程师应该先学会如何使用C语言进行面向对象的设计。

在大中型嵌入式软件开发过程中,嵌入式工程师应注重养成面向对象和面向接口开发的思维方式,这对整个软件架构的可靠性和扩展性,都是有很大好处的。

网上有不少文章,讲述关于如何使用C语言进行面向对象程序设计,各位可以自行搜索学习,至少需要掌握如何用C语言实现面向对象语言的一些特性,如继承、封装、多态、组合,等等。

特别地说明一下,为了跟面向对象设计的概念同步,后面的文章会更多地使用面向对象开发的专业术语,比如:

封装:动词,表示用结构体把一系列的变量和函数指针进行打包。

继承:动词,表示用新的结构体包含一个父结构体,且这个父结构体要在首位置。

抽象:动词,表示开发者需要思考如何提取出事物的特征。

类:名词,表示进行封装之后的结构体类型,也就是指 struct uart_handler。

子类:名词,表示用一个新的结构体包含一个父结构体,得出一个新的结构体类型。

实例:名词,也可以叫对象或类对象,表示用结构体进行定义的变量,例如:struct uart_handler uart。

更多关于面向对象的设计思维,可以参考以下两篇文章:https://blog.csdn.net/absurd/article/details/1067390

嵌入式用 C 语言进行面向对象开发,从未试过如此简单!

 

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
ECS-2520S18-384-EN-TR 1 ECS International Inc HCMOS Output Clock Oscillator,

ECAD模型

下载ECAD模型
$1.86 查看
KSZ8895FQXIA 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, PQFP128

ECAD模型

下载ECAD模型
$13.57 查看
APT1608SECK/J3-PRV 1 Kingbright LED RED CLEAR 0603 SMD
$0.53 查看

相关推荐

电子产业图谱