diff --git a/Chapter10_嵌入式软件架构与设计思想/10.1_嵌入式软件开发的实际需求.md b/Chapter10_嵌入式软件架构与设计思想/10.1_嵌入式软件开发的实际需求.md new file mode 100644 index 0000000..c7a0801 --- /dev/null +++ b/Chapter10_嵌入式软件架构与设计思想/10.1_嵌入式软件开发的实际需求.md @@ -0,0 +1,34 @@ +--- +modified: 2023-06-08T07:34:42.886Z +title: 10.1 嵌入式软件开发的实际需求 +--- + +## 10.1.1. 需求层级 + +以一个简单的系统为例,软件如不进行设计,仅平铺直叙的实现各种功能需求,这个系统依然可以很好的工作。 + +![抬枪](./imgs/10.1_嵌入式软件开发的实际需求/001.jpg) + +然而,当系统变得越来越复杂,缺少良好设计的系统,各组成部分之间的耦合将会变得越来越紧密,每增加一个模块,其均有可能与之前的所有模块耦合,因此系统的复杂度将会呈偶数级增加,直到系统变得不可控,产生不稳定性,开发人员将忙于四处打补丁。 + +可以想见,正如人类从基本的温饱需求到面朝大海春暖花开的物质需求6一样,软件设计的需求也是随着现实情况而不断提高的。 + +## 10.1.2. 代码的可读性与软件设计 + +如果开发人员进行过代码交接,那你或多或少看过缺少设计的代码,此时心头飞过无数某种类马的四脚动物,心说:“这个代码太烂了,它缺少设计”。确实,在一些情况下,良好设计的软件具有更高的可读性,但更多时候,妨碍阅读代码的并不是缺少设计,甚至有些时候良好的设计会增加代码的可读性——接收代码的人要先了解设计思想才能够读懂代码。 + +举个例子,像 Linux 内核这种良好的模块化和面向对象设计的系统,往往大量的使用了函数指针,此时就很难利用代码编辑器的函数跳转功能,因为没人直到函数指针是在何时被赋予什么样的值,函数指针的赋值是一个动态过程,代码编辑器无法通过静态分析准确的判断应该跳转到那里去。但是当阅读代码的人了解了 Linux 内核设计的“套路”后,这一切将会变得简单起来。 + +在具体的项目中,对代码可读性影响较大的因素还有实际的项目需求和开发设计。代码是需求和设计的具体体现,是明确的,是精密的数学算法与逻辑算法的组合。然而实际项目中是有许多没有明说的“隐含”需求的,甚至有的项目没有明确的需求说明。而阅读代码的人如果没有参透这一层,就很难理解为何代码要这么写。其结果必然是往往只改了一行自认为不会产生负面影响的代码后,系统就变得不正常了。 + +## 10.1.2. 需求的提升 + +如果程序设计对代码的可读性影响相对有限,甚至还有可能起到反面作用,那为什么还需要对程序进行设计呢? + +良好设计的程序,除了可以降低复杂系统的耦合度外,还可以带来以下好处:可复用性、高健壮性、良好的稳定性、团队协作的便利性。 + +软件最大的价值在于可复用,如果代码写了一遍不再被使用,那它的意义不大。实际上,好多地方都可以使用相同的代码,比如串口通信。如果一个功能模块被很好的设计,那么在其他系统中使用它的概率也大大提高,其设计的越成熟,使用起来也就越容易。 + +随着模块被不断的反复使用,其软件 Bug 将被梗多的发现和解决,其健壮性和稳定性均可以得到大幅提升。反之,如果每次都重写一套相同功能的代码,只要代码写的不同,那么每次都有极大的可能出现不同的问题。前者是将一块粗铁不断打磨成锋利的宝剑,后者则每次都使用不同的粗铁重新打造。其过程的难易程度和输出结果不言而喻。 + +在团队共同开发时,每个人需要完成各自的软件模块,如果这些模块及模块间接口没有被很好的设计,将会产生一些理解上的错误,最终导致模块集成时出现问题。如果设计良好,接口明确,将极大的减少这些错误发生的可能性。 diff --git a/Chapter10_嵌入式软件架构与设计思想/10.2_模块化设计.md b/Chapter10_嵌入式软件架构与设计思想/10.2_模块化设计.md new file mode 100644 index 0000000..6204c53 --- /dev/null +++ b/Chapter10_嵌入式软件架构与设计思想/10.2_模块化设计.md @@ -0,0 +1,4 @@ +--- +modified: 2023-06-08T07:34:42.886Z +title: 10.2 模块化设计 +--- diff --git a/Chapter10_嵌入式软件架构与设计思想/10.3_分层设计.md b/Chapter10_嵌入式软件架构与设计思想/10.3_分层设计.md new file mode 100644 index 0000000..edf04a6 --- /dev/null +++ b/Chapter10_嵌入式软件架构与设计思想/10.3_分层设计.md @@ -0,0 +1,4 @@ +--- +modified: 2023-06-08T07:34:42.886Z +title: 10.3 分层设计 +--- diff --git a/Chapter10_嵌入式软件架构与设计思想/10.4_面向对象设计.md b/Chapter10_嵌入式软件架构与设计思想/10.4_面向对象设计.md new file mode 100644 index 0000000..c9578c5 --- /dev/null +++ b/Chapter10_嵌入式软件架构与设计思想/10.4_面向对象设计.md @@ -0,0 +1,4 @@ +--- +modified: 2023-06-08T07:34:42.886Z +title: 10.4 面向对象设计 +--- diff --git a/Chapter10_嵌入式软件架构与设计思想/10.5_状态机模型.md b/Chapter10_嵌入式软件架构与设计思想/10.5_状态机模型.md new file mode 100644 index 0000000..42f21df --- /dev/null +++ b/Chapter10_嵌入式软件架构与设计思想/10.5_状态机模型.md @@ -0,0 +1,4 @@ +--- +modified: 2023-06-08T07:34:42.886Z +title: 10.5 状态机模型 +--- diff --git a/Chapter10_嵌入式软件架构与设计思想/10.6_综合实例.md b/Chapter10_嵌入式软件架构与设计思想/10.6_综合实例.md new file mode 100644 index 0000000..ca195ff --- /dev/null +++ b/Chapter10_嵌入式软件架构与设计思想/10.6_综合实例.md @@ -0,0 +1,4 @@ +--- +modified: 2023-06-08T07:34:42.886Z +title: 10.6 综合实例 +--- diff --git a/Chapter10_嵌入式软件架构与设计思想/imgs/10.1_嵌入式软件开发的实际需求/001.jpg b/Chapter10_嵌入式软件架构与设计思想/imgs/10.1_嵌入式软件开发的实际需求/001.jpg new file mode 100644 index 0000000..52b73df Binary files /dev/null and b/Chapter10_嵌入式软件架构与设计思想/imgs/10.1_嵌入式软件开发的实际需求/001.jpg differ