程序设计思想之模块

模块

  • 使用模块分割方法来进行系统构筑
    • 何为系统设计
  • 软件开发中的模块是什么
  • 功能与模块的关系
  • 软件系统的模块结构
    • 软件层
    • 驱动层
    • 硬件层
  • 连接模块的接口
    • 接口
    • 接口设计困难
  • 结束语

使用模块分割方法来进行系统构筑

何为系统设计

软件系统规模越大,制作起来就越困难。这和在建筑中建造狗窝和建造豪宅的难度不同是一样的。

在软件的世界里,把庞大的系统像狗窝一样建造,随着规模的增大,系统结构也会走向失败。为了防止这种情况发生,需要可靠地看清整体,拥有设计系统的技术。这就是模块分割技术。

软件开发中的模块是什么

我们身边的所有产品都由不同的零件组成。例如,汽车将发动机、轮胎、挡风玻璃、后视镜、车身、制动器、变速箱等各种部件结合在一起,打造出一辆大型汽车。独立制作各零部件,通过将完成的零部件彼此结合,制作出一个大的产品,这是在制造世界中理所当然地进行的事情。

在软件中,创建过程也是一样的。为了建立目标系统,我们将设计系统所需的部件,并通过将部件组合在一起来构建更大的系统。这个部件被称为模块。

功能与模块的关系

在设计系统时,从以功能为单位捕捉系统的角度来看就可以了。提取的功能体现为一个称为模块的软件组件。像这样想要制作的系统一点点地接近程序的形式。根据系统规模的不同,基本上对这个模块这一部件逐一配置源文件和头文件。然后以模块之间调用函数的形式构建系统。

软件系统的模块结构

虽然是想制作的系统整体的模块构成,但是一般像大楼一样分层。
嵌入式开发世界最基本的是以下三层结构的模块配置:
阶层
模块是这样分层的,假设从上级模块对下级模块进行函数调用来构建。如果是几千~数万步左右的系统规模的话,大概可以用这个构成来应对。数十万级的规模可能会进一步将层次分开,形成4层、5层的模块结构。各阶层的主要定位如下。

软件层

配置管理整个系统的软件模块。表示对象系统本身的层次。根据来自用户的操作,通过向设备驱动器层的模块发出指令和请求来确定整个系统的行为。

驱动层

配置用于控制硬件的软件模块。通过寄存器向下层硬件发出指令。基本上,一个模块控制一种类型的硬件,但在某些情况下,一个模块控制多个硬件。

硬件层

表示构成对象系统的硬件模块。配置安装在板上的外围设备等硬件。根据来自设备驱动程序的软件的指示进行反应。

连接模块的接口

模块是软件中的部件。部件相互结合,成为更大的部件,全部结合在一起,成为一种产品。

接口

将模块连接在一起的接头部分称为接口(I/F)。软件世界中的接口实体是指函数。
在模块中定义一个称为接口的函数,并从另一个模块调用接口。这将是软件世界的模块结合。“这不只是一个函数调用吗?“你是这么想的吧。如果调用函数的一侧和被调用的一侧是不同的模块,则该函数被称为接口。定义接口的函数规范对于多人开发和大规模开发是非常重要的。模块是多人创建软件的工作分界线,接口是模块之间协作的一种手段。

接口设计困难

接口是一个函数,但函数规范由函数名称,参数,返回值和处理摘要组成。在程序中,这种设计模式是无限的,因此它的自由度很高,可以制作成不同的形式。然而,正是这种自由度才是软件设计的一个很难的部分。当有两个人在技术水平上存在差异时,即使设计同一模块也会变成完全不同的接口,这并不少见。根据技术人员的不同,接口设计的好坏明显地显现出来。

结束语

从一开始就没有人能设计得很好。通过一次又一次的设计经验,一点点地学习好的设计。

热门文章

暂无图片
编程学习 ·

使用pip离线安装python扩展包依赖模块

简答来说就是从一台有网的主机下载好,放到离线主机上,用pip实现1.查看安装了哪些pip3 freeze网上一般都是pip3 freeze >requirements.txt 这就是查看安装了那些,然后存到文件里面2.就是把安装好的打包了,上面那个文件存的就是要打包的,我们完全可以直接,在里面写好想…
暂无图片
编程学习 ·

坚强奋斗的后浪们,后浪们的逆风翻盘之路。

逆风5.4日B站播出了后浪,视频伴随着激情澎湃的音乐、华丽无比的台词、精英人士的代言,可以说很振奋人心。但是观看后,网上却有着两种不同的声音,分别是乐观与悲观。当然伴随着疫情肆虐,悲观的声音反而是最响亮。90后们更是看的焦躁不安、时逢逆风,如何翻盘? 逆风论点:通…
暂无图片
编程学习 ·

提高复杂网络分析效率!中国科学家研发强化学习新框架

提高复杂网络分析效率!中国科学家研发强化学习新框架近日,中国国防科技大学、美国加州大学洛杉矶分校和哈佛医学院的研究人员研发了一个深度强化学习框架FINDER。相比于现有的解决方案,FINDER能够更快速、更高效地找到复杂网络中一组最关键的节点,进而使复杂网络以较高的效…
暂无图片
编程学习 ·

记录 之 最近阅读的动作识别(action recognition)工作

介绍:其中C3D是3d卷积的比较有意义的开端,I3d在C3D之后做了一系列研究,包括引入双流网络,和LSTM网络,并使用已经训练好的2D图像分类模型的参数维数扩充后用做3D网络的预训练模型。S3D是在I3D的基础上,探索了卷积拆分,使得模型的量级下降,并在后续的工作中加入了Graph C…
暂无图片
编程学习 ·

面试题:从 URL 在浏览器被输入到页面展现的过程中发生了什么?

曾经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?要搞懂这个问题,我…
暂无图片
中恒嘉业 ·

关于主从复制的超详细解析(全)

目录前言1. 主从复制1.1 方式2. Mysql的主从复制2.1 一主一从2.1.1 window和linux通讯2.1.2 linux和linux的通讯2.2 双主双从3. Redis的主从复制3.1 哨兵模式3.2 java代码结合前言 主要介绍mysql的主从复制以及redis的主从复制 能由浅入深的明白原理以及如何操作 再者&#xf…
暂无图片
郑州普通话 ·

android编程基础学习,Android开发实战讲解

破局 焦虑的移动开发者该如何破局呢?并且企业究竟需要什么样的移动开发人才?移动开发者还需要学习什么实现架构进阶呢? 我们通过智联招聘、拉勾网、Boss直聘、前程无忧发布的移动互联网招聘岗位需求发现:移动端的招聘量变少,但中高端的职位却多了起来,这说明行业只是变得…
暂无图片
郑州普通话 ·

树莓派RGB跑马灯实验

树莓派RGB小灯实验第一步:接引脚第二步:讲解一:初始化二:格式化引脚三:开启特效第三步:最终代码第一步:接引脚 树莓派RGB灯GPIO12RGPIO16GGPIO18BGNDGND 第二步:讲解 一&#xff1…
暂无图片
代理记账 ·

在web应用中发送和接收Jakarta消息

Running the websimplemessage Example To Package and Deploy websimplemessage Using Maven _1、Make sure that GlassFish Server has been started (see Starting and Stopping GlassFish Server). _2、In a terminal window, go to: tut-install/examples/jms/websimp…
暂无图片
cgfy ·

C++学习日记2——函数、封装、对象特性

一、函数 1.1 函数默认参数 1.1.1 简介 在C中&#xff0c;函数的形参列表中的形参是可以有默认值的 1.1.2 语法 返回值类型 函数名 (参数 默认值) {} 1.1.3 代码 #include <iostream> using namespace std;// 函数的默认参数 int func(int a, int b 20, int c 30…
暂无图片
coreui ·

视频水印怎么去除?超简单 千万不要错过

小编在知乎看到很多大佬分享的视频去水印的方法&#xff0c;但是感觉都有点太复杂了&#xff0c;今天就来分享一下小编自己私藏的几个针对于视频去水印的软件和网站~建议大家收藏哦~ 1、爱给网-视频去水印小工具&#xff08;免费 在线&#xff09; 推荐点 1、在线操作&#…
暂无图片
coreui ·

Mac 安装 tomcat10

Mac 安装 tomcat10 1、下载tomcat tomcat官网&#xff1a;https://tomcat.apache.org/ 点击我下载的tomcat10&#xff1a; 2、下载解压,给bin下的*.sh文件添加可执行权限 3、修改webapps下的ROOT中的index文件查看效果
暂无图片
未来博客 ·

视频水印怎么去除?超简单 千万不要错过

小编在知乎看到很多大佬分享的视频去水印的方法&#xff0c;但是感觉都有点太复杂了&#xff0c;今天就来分享一下小编自己私藏的几个针对于视频去水印的软件和网站~建议大家收藏哦~ 1、爱给网-视频去水印小工具&#xff08;免费 在线&#xff09; 推荐点 1、在线操作&#…
暂无图片
未来博客 ·

Mac 安装 tomcat10

Mac 安装 tomcat10 1、下载tomcat tomcat官网&#xff1a;https://tomcat.apache.org/ 点击我下载的tomcat10&#xff1a; 2、下载解压,给bin下的*.sh文件添加可执行权限 3、修改webapps下的ROOT中的index文件查看效果
暂无图片
建站日记 ·

惠州实验室建设选址、勘察事项

惠州实验室建设选址、勘察事项&#xff0c;SICOLAB技术员带您从实验室建设启动前思考问题考虑如下&#xff1a;一、不同实验室建设选址要求 1.化学实验室 &#xff08;1&#xff09;清洁安静环境 &#xff08;2&#xff09;远离住宅、生活区 &#xff08;3&#xff09;锅炉房与…
暂无图片
建站日记 ·

NLP聊天机器人原理(seq2seq模型)

一、seq2seq模型 1.概念 seq2seq是一个Encoder-Decoder结构的网络&#xff0c;它的输入是一个序列&#xff0c;输出也是一个序列。Encoder中将一个可变长度的信号序列变为固定长度的向量表达&#xff0c;Decoder将这个固定长度的向量变成可变长度的目标的信号序列。这个结构最…
暂无图片
mfbz ·

惠州实验室建设选址、勘察事项

惠州实验室建设选址、勘察事项&#xff0c;SICOLAB技术员带您从实验室建设启动前思考问题考虑如下&#xff1a;一、不同实验室建设选址要求 1.化学实验室 &#xff08;1&#xff09;清洁安静环境 &#xff08;2&#xff09;远离住宅、生活区 &#xff08;3&#xff09;锅炉房与…
暂无图片
mfbz ·

全渠道会员通-天猫会员通3: 会员运营内容准备

在天猫会员通技术对接开发过程中&#xff0c;为了通知存量会员的通知工作&#xff0c;发挥会员通的优势&#xff0c;品牌需要做好以下事宜&#xff1a; 会员体系暂停公告&#xff1a;因会员通技术升级期间&#xff0c;会员服务将被暂停&#xff0c;店铺tab中会员入口将被下线&…
暂无图片
珊珊日记 ·

C# 执行Javascript脚本

c#教程https://www.xin3721.com/eschool/CSharpxin3721/ 前一阵子使用C#编写SCXML状态机&#xff0c;需要解析EMCScript表达式&#xff0c;使用了Jint库&#xff08;https://github.com/sebastienros/jint/)&#xff0c;当时感觉与C#之间的数据转换不是很方便。这两天有时间又关…
暂无图片
珊珊日记 ·

第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛

A.大学期末现状 题目描述 作为一名大学生的你&#xff0c;现在又到了期末查成绩的时候&#xff0c;当你的成绩大于等于60时请输出“jige,haoye!”,否则输出"laoshi,caicai,laolao"。 输入描述: 一行&#xff0c;一个整数x代表你的成绩&#xff08;0<x<100&a…