程序设计思想之模块

模块

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

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

何为系统设计

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

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

软件开发中的模块是什么

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

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

功能与模块的关系

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

软件系统的模块结构

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

软件层

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

驱动层

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

硬件层

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

连接模块的接口

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

接口

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

接口设计困难

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

结束语

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

热门文章

暂无图片
编程学习 ·

Spring Boot整合Zookeeper实现配置中心

简介 使用背景 说到配置中心,目前市面上用的较多的配置中心都广为人知,比如百度的Disconf、Spring Cloud Config、携程的Apollo、阿里的Nacos等。由于项目组一直是使用的zookeeper作为配置中心,所以来学习使用。 实现原理在Zookeeper建立一个根节点,比如/CONFIG,代表某个配…
暂无图片
编程学习 ·

【MPI编程实现梯形积分法】

MPI编程实现梯形积分法1.1问题描述1.2算法实现1.3结果实现与分析1.4源码实现 1.1问题描述 实现课件中的梯形积分法的MPI编程熟悉并掌握MPI编程方法,规模自行设定,可探讨不同规模对不同实现方式的影响。实验环境:联想笔记本,集成开发环境:Visual Studio 1.2算法实现 每个进…
暂无图片
编程学习 ·

python读取excel文件(xlrd)

调包import xlrd打开文件data = xlrd.open_workbook(文件名.xlsx)查看页名print(data.sheet_names())输出sheet1、sheet2等页名,一般用不上,因为可以用下表取页获取某页sheet = data.sheet_by_name(sheet1) sheet = data.sheet_by_index(0)两个方法都行,一般用第二个,因为第…
暂无图片
编程学习 ·

最新99道前端面试题

前言:7月份的第一天,毕业马上两年了,居安思危,为后边儿做个准备吧“即便不跳,也始终保持跳的能力”1.vue优点?答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;简单易学:国人开发,中文文档,不存在语言障碍 ,易于理解和学习;双向数据绑定:…
暂无图片
编程学习 ·

用类来模拟(栈)操作

用类来模拟(栈)操作 #include <cstdio> #include <iostream> #include <cmath> #include <cstring>using namespace std;template<typename T>class Stack { public:Stack(int size =10){MAX_SIZE =10;tp =new T[size];this->size =0;}~Sta…
暂无图片
编程学习 ·

Leetcode 题解 - 排序

快速选择 用于求解 Kth Element 问题,使用快速排序的 partition() 进行实现。 需要先打乱数组,否则最坏情况下时间复杂度为 O(N2)。 堆排序 用于求解 TopK Elements 问题,通过维护一个大小为 K 的堆,堆中的元素就是 TopK Elements。 堆排序也可以用于求解 Kth Element …
暂无图片
编程学习 ·

智慧RFID工地人员定位-工地人员定位系统-新导智能

随着RFID技能的逐渐老练,RFID工地人员定位系统系在施工项目中越来越多地被运用到实践当中。尤其是在工地分布范围广,现场环境恶劣的项目施行现场,为了对施工现场进行安全规范办理,在施工项目应用根据RFID工地人员定位体系,能够实时监测各个施工现场的人员状况,统一办理,…
暂无图片
编程学习 ·

tensorflow 中tf.strided_slice和tf.slice的区别

函数:tf.slice(inputs, begin, size, name) 作用:从列表、数组、张量等对象中抽取一部分数据begin和size是两个多维列表,他们共同决定了要抽取的数据的开始和结束位置 begin表示从inputs的哪几个维度上的哪个元素开始抽取 size表示在inputs的各个维度上抽取的元素个数import…
暂无图片
编程学习 ·

你(真的)编写异常安全代码吗? [关闭]

本文翻译自:Do you (really) write exception safe code? [closed] Exception handling (EH) seems to be the current standard, and by searching the web, I can not find any novel ideas or methods that try to improve or replace it (well, some variations exist, b…
暂无图片
编程学习 ·

Java new关键词的作用

文章目录new关键词的作用成员变量"字符串" new关键词的作用Person person = new Person();右边的new Person: 是以Person类为模板在堆中实例化一个对象。 右边的(): 意味着在对象实例化后,调用Person的构造器,对其初始化。 左边的Person person: 创建一个Person类…
暂无图片
编程学习 ·

一周信创舆情观察(6.22~6.28)

一、一周舆情要点 第四届世界智能大会本周成功举办,技术服务项目由腾讯云提供支持。大会云签约148个项目,其中内资项目投资809亿元,外资项目投资约16亿美元。会议期间,天津港集团和华为签署战略合作协议,双方将加强信息化顶层设计及智慧港口合作。 数据安全监管趋严,网安…
暂无图片
编程学习 ·

nginx支持php

ubuntu14.04 +nginx+php5-fpm 一,安装Nginx apt-get install nginx 1,配置nginx nginx所有的配置在 /etc/nginx/nginx.conf中 nginx.conf配置里面包括了 include /etc/nginx/conf.d/.conf;include /etc/nginx/sites-enabled/; 这两个配置,所以这里面的配置也是有效的。 错误…
暂无图片
编程学习 ·

面试直击之javaSE复习——IO

1.什么是IO流?IO流是一种从源头到目的地的数据流,即以流的方式进行输入和输出。比如文件拷贝,输入流从文件中读取数据存储到进程中,输出流从进程中读取然后写入到目标文件。2.Java中有几种类型的流?按照流的方向:输入流(inputStream)和输出流(outputStream)。按照实现功…
暂无图片
编程学习 ·

从 Android 源码分析自定义 View 相关知识点

以下源码来自于 Android P。onMeasure()MeasureSpecMeasureSpec 是 View 里的一个内部类,其用来表示 View 的测量模式和测量大小,代码如下:public static class MeasureSpec {/*** Creates a measure specification based on the supplied size and mode.** The mode must a…
暂无图片
编程学习 ·

Git之HTTPS和SSH两种方式托管项目到GitHub

Git之HTTPS和SSH两种方式托管项目到GitHubGit和代码托管中心Git结合GitHub使用https方式ssh方式同步到远程仓库从远程仓库克隆从远程仓库取代码其他 Git和代码托管中心局域网环境 GitLab服务器外网环境下 GitHub、码云Git结合GitHub使用介绍 Github支持两种同步方式"https…
暂无图片
编程学习 ·

ChainDesk:深入MSP成员管理与Fabric CA服务实现-走进MSP

目标 MSP 概念及作用MSP 的组成结构MSP 在 Hyperledger Fabric 中的应用任务实现 数据隐私及安全是区块链技术中的的重要组成部分,联盟链中由多个不同的组织组成,且每一个组织又可以由多个节点组成,那么在 Hyperledger Fabric 中使用了什么且如何确保数据隐私及安全,在这一…