0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

模块化程序设计-2

汽车电子技术 来源:玉工讲技术 作者: 玉素甫·买买提 2023-02-21 16:17 次阅读

人们常把程序称为计算机的灵魂。1976年瑞士计算机科学家Niklaus Wirth在他的惊世之作中提出了一个著名的公式:

程序 = 算法 + 数据结构

从今天的观点来看,它只能是对过程化程序的一个抽象定义,对面向对象的程序而言则不尽然。不过对我们学习C语言这样的面向过程的程序设计语言而言,是完全适用的。同时,C语言也能实现封装、继承、多态等面向对象风格的编程。从个人经验来看,当我理解用C语言编写面向对象的风格的编程案例后,面向对象编程中让人迷惑的那些初始化、this、方法(函数)多层次调用等概念恍然大悟,再也不感到恐惧和迷惑了。本文主要讨论面向过程编程常用的模块儿化程序设计思想。

图片

图1 实现虚拟机原理

1、我们在计算机“大楼”的第几层

计算机这个大楼的基础是量子力学及半导体物理,自从图灵提出了理论模型,布尔创立了布尔代数,香农的硕士论文证明布尔代数可以用继电器的开关电路实现之后,随着晶体管的发明,计算机的电路才有可能微型化。计算硬件电路完成以后,还需要软件的支持,对程序语言的需求就凸显出来,最早的机器语言及汇编语言,后来慢慢出现的C, C++这样的高级语言等非常适合系统级编程,也是近距离观看和理解编程思想有效手段之一。

图片

图2 计算机“大楼”的层次

在图2中各层具体含义为:1F量子力学、2F晶体管、3F逻辑电路、4F计算机体系结构、5F汇编语言、6F高级语言、7F应用程序。从这点可以看出,作为高级语言的C/C++在第六层(6F)。其中第三层(3F逻辑电路,即布尔代数可以用继电器的开关电路实现)是我们连接软件世界和电路(电子电气)世界必经之路。工业和自控领域,继电器是理解二次侧回路和低压电路的必备概念,在后续文章中进一步讨论。

2、模块儿化程序设计

模块化程序设计就是进行大型程序设计的一种有效措施。其基本思想是将一个大的程序按功能进行分割成一些模块,使每一个模块都成为功能单一、结构清晰、接口简单、容易理解的小程序。C语言是一种提供如下一些支持模块化软件开发的功能:

(1)函数式的程序结构:程序整体由一个或多个函数组成。每个函数都具有各自独立的功能和明显的界面。

(2)允许通过使用不同存储类别的变量,控制模块内部及外部的信息交换。

(3)具有编译预处理功能,为程序的调试、移植提供了方便,也支持了模块化程序设计。

无论涉及的问题是复杂还是简单,规模是大还是小,用C语言设计程序,任务只有一种,就是编写函数,至少也要编写一个main()函数。对新手来说,无论面向过程还是面向对象的编程,最终的难点在于函数编写(一般在面向对象编程中叫做方法)。因此,编写程序关键点在于将复杂问题分解成多个函数或对象后,逐步编写其中的运算操作语句和流程控制语句。

执行C程序就是执行相应的main()函数。即从它的main()函数的第一个前花括号开始,依次执行后面的语句,直到最后的后花括号为止。其它函数只有在执行main()函数的过程中被调用时才执行。如图3所示:

图片

图3 将功能改为函数的过程

3、重新理解编程中的函数

高级语言中“函数”的概念和数学中“函数”的概念不完全相同。在英语中“函数”与“功能”是同一个单词即function。高级语言中的“函数”实际上是“功能”的意思。当需要完成某一个功能时,就用一个函数(可以是标准库函数或自己设计的函数)去实现它。在进行程序设计时,我们先集中考虑main()函数中的算法(相当于做事情前后顺序和处理步骤)。当main()中需要使用某一功能时,我们就先写上一个调用具有该功能的函数的表达式(或后缀为括号的具体函数名称)。这时的函数相当于一个黑盒子,如图4所示。

图片

图4 函数代表着具有输入输出接口系统或黑盒子

我们只须知道它具有什么功能或作用,如何与程序通信(输入什么,返回什么),别的东西我们先不去处理它。图4好比“信号与系统”课程中的“系统”的抽象,但函数代表的系统输入和输出不是信号而是数据(当然信号也能用数据标识)。

如同设计一部机器一样,当需要在某处使用一个部件时,我们就先把它画上,并标明它的功能以及安装方法,至于如何制造先不用考虑,因为也许它可以直接购买来。设计完main()的算法并检验无误后,我们开始考虑它所调用的函数。在这些被调用的函数中,若在库函数中可以找到(像制造机器时,库房中已有的零部件),那就直接使用,否则再动手设计这些函数。这样设计的程序从逻辑关系上就形成图5所示的层次结构。

图片

图5 C语言程序的层次结构

这个层次结构的形成是自顶向下的。这种方法称为自顶向下、逐步细化的程序设计方法。这种方法允许人在进行程序设计时, 每个阶段都能集中精力解决只属于当前模块的算法,暂不考虑与之无关的细节, 从而能保证每个阶段所考虑的问题都是易于解决的,设计出来的程序成功率高,而且程序层次分明、结构清晰。

4、结束语

函数不仅代表功能,也可以代表人或其他任何对象的抽象。一个部门的组织架构也用一个C语言多层次函数来描述。一个职责和任务没有划分清楚组织架构就像一个设计不合格的程序结构。许多大型软件系统包含了相当丰富的功能,意味着需要编写相当数量的函数来实现可供从事某种领域工作的人员使用。比如说,数据中心基础设施大致上可分为电源、电气、暖通、弱电、消防(气消)、装修、自控、柴油发电机组等。为了建设方方便,我们也可以将部分功能放到机房工程模块里。因此,怎么的划分各功能模块及其接口是某种程度上决定着软件系统性能、可扩展性和灵活性。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    6651

    浏览量

    84562
  • 布尔代数
    +关注

    关注

    0

    文章

    10

    浏览量

    7836
  • 半导体物理
    +关注

    关注

    0

    文章

    4

    浏览量

    6350
收藏 人收藏

    评论

    相关推荐

    监控系统中控制软件的工程化设计与实现

    主要探讨微机监控系统中控制软件的工程化设计方法,介绍了模块化程序设计和结构化程序设计的基本原理,具体分析了在电锅炉微机控制系统中,采用模块化程序设计
    发表于 03-18 10:33 21次下载

    C语言模块化程序设计方法教程

    发表于 05-01 01:18 54次下载

    模块化程序设计

    模块化程序设计思想,单片机c语言的模块化设计,方便移植,将程序封装备用。
    发表于 03-22 15:29 9次下载

    模块化程序设计

    模块化程序设计,利用c语言的移植性好特点,更好的利用c语言。
    发表于 03-23 09:25 0次下载

    C语言模块化程序设计需理解概念

    等类似问题。面对这些问题,我们只能发出由衷的感慨:世界上还有很多有意义的事情等着我们去消化摄入的食物。实际上,嵌入式系统要运行到世界末日。中断服务程序中断是嵌入式系统中重要的组成部分,但是在标准C中不包含中断。
    的头像 发表于 06-08 14:49 7389次阅读
    C语言<b class='flag-5'>模块化</b><b class='flag-5'>程序设计</b>需理解概念

    C语言教程之函数讲解的详细资料免费下载

    模块化程序设计基本思想:将一个大的程序按功能分割成一些小模块
    发表于 10-12 17:17 24次下载
    C语言教程之函数讲解的详细资料免费下载

    C语言程序设计实用教程之函数详细介绍和应用

    本文档的主要内容详细介绍的是C语言程序设计实用教程之函数详细介绍和应用内容包括了:1 模块化程序设计与函数2 函数的定义与调用3 函数的嵌套调用和递归调用4 数组作为函数参数5 变量的作用域与存储方式
    发表于 10-31 18:04 2次下载
    C语言<b class='flag-5'>程序设计</b>实用教程之函数详细介绍和应用

    嵌入式系统编程软件架构的C语言模块化程序设计的概念

    模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了
    的头像 发表于 12-23 11:56 5536次阅读

    C语言程序设计知识点汇总合集免费下载

    C语言属于高级语言,编程中要区分大小写字母,以函数为基本单位采用模块化程序设计,可直接访问内存,进而对硬件进行操作。
    发表于 11-26 08:00 6次下载
    C语言<b class='flag-5'>程序设计</b>知识点汇总合集免费下载

    C语言指针用作函数参数模块化程序设计以及增量测试方法的程序

    本文档的主要内容详细介绍的是C语言指针用作函数参数模块化程序设计以及增量测试方法的程序
    发表于 12-25 08:00 1次下载
    C语言指针用作函数参数<b class='flag-5'>模块化</b><b class='flag-5'>程序设计</b>以及增量测试方法的<b class='flag-5'>程序</b>

    实现Verilog HDL模块化程序设计的详细资料说明

    HDL和VHDL的使用比率大概是80%和20%,在中国,大多数电子行业企业都采用Verilog。而模块化的设计让Verilog HDL语言具有思路清晰、逻辑关系明确、可读性强等特点,模块化的设计在 Verilog HDL语法设计中也成为主流。
    发表于 03-25 08:00 4次下载
    实现Verilog HDL<b class='flag-5'>模块化</b><b class='flag-5'>程序设计</b>的详细资料说明

    嵌入式软件开发之模块化程序设计(三)

    模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一
    发表于 11-03 21:06 10次下载
    嵌入式软件开发之<b class='flag-5'>模块化</b><b class='flag-5'>程序设计</b>(三)

    c++程序设计_基于proteus的51单片机开发实例30-模块化程序设计

    1. 基于proteus的51单片机开发实例30-模块化程序设计1.1. 实验目的模块化程序设计不知不觉我们的51单片机开发实例已经进行到第三十篇了,是时候进行一个总结和反思了,总结什
    发表于 11-21 15:36 13次下载
    c++<b class='flag-5'>程序设计</b>_基于proteus的51单片机开发实例30-<b class='flag-5'>模块化</b><b class='flag-5'>程序设计</b>

    嵌入式软件为什么要模块化程序设计呢?

    一个好的嵌入式项目,通常会有一套比较好的软件架构的设计。除非你的项目只是一个点灯项目。
    的头像 发表于 02-03 10:27 1279次阅读

    模块化程序设计案例DCIM-3

    在设计较复杂的程序时,一般采用自顶向下的方法,将问题划分为几个部分,各个部分再进行细化,直到分解为较好解决问题为止。利用函数,不仅可以实现程序模块化,使得程序设计更加简单和直观,而且
    的头像 发表于 02-21 16:23 909次阅读
    <b class='flag-5'>模块化</b><b class='flag-5'>程序设计</b>案例DCIM-3