程序设计思想之模块

模块

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

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

何为系统设计

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

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

软件开发中的模块是什么

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

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

功能与模块的关系

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

软件系统的模块结构

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

软件层

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

驱动层

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

硬件层

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

连接模块的接口

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

接口

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

接口设计困难

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

结束语

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

热门文章

暂无图片
编程学习 ·

Android运行Linux程序

安卓直接运行arm-linux-gnueabi-gcc编译的标准嵌入式Linux程序,我们有时不想把原Linux程序重新开发一遍。第一步,给adb root权限运行,否则拷贝会提示无权限failed to copy E:\share\a8Agent1.0.1\a8Agent to /data/a8Agent: Permission deniedadb root 第二不,发送程序到安…
暂无图片
编程学习 ·

自举功能 - 软件复位

说明对于需要长时间运行的电子产品,例如:安防监控等,如果设备程序崩溃后不能自动恢复,可能会出现以下情况:设备操作无反应,用户以为设备坏掉了,并不知道需要断电重启,对产品质量怀疑。 程序崩溃后所有功能中断,有些重要并且需要长时间稳定运行的功能无法延续,例如:定…
暂无图片
编程学习 ·

期末复习、化学反应工程科目(第四章)

@Author:Runsen @Date:2020/7/1人生最重要的不是所站的位置,而是内心所朝的方向。只要我在每篇博文中写得自己体会,修炼身心;在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰难,奋勇前行,不忘初心,砥砺前行,人生定会有所收获,不留遗憾 (作者:Runsen )作者介…
暂无图片
编程学习 ·

window.performance.navigation.type

performance.navigation.type(该属性返回一个整数值,表示网页的加载来源,可能有以下4种情况):0:网页通过点击链接、地址栏输入、表单提交、脚本操作等方式加载,相当于常数performance.navigation.TYPE_NAVIGATE。1:网页通过“重新加载”按钮或者location.reload()方法加…
暂无图片
编程学习 ·

Simulink中定义全局向量

Simulink中定义全局数组变量定义全局变量定义其为Data Dtore Memory创建Data Dtore Memory模块完成 最近在使用simulink时需要用到全局向量,但是在网上搜索到的都是一维的全局变量,也就是一个数,因此自己摸索了一段时间做出这篇总结。 定义全局变量 首先在matlab function中…
暂无图片
编程学习 ·

Spring学习笔记(一):工厂模式

Spring学习笔记一:工厂模式1.简介2.工厂模式简单工厂设计通⽤⼯⼚的设计通用工厂的使用方式 1.简介 1.Spring是⼀个轻量级的 JavaEE 解决⽅案,整合众多优秀的设计模式。 2.EJB(Enterprise Java Bean):重量级框架,存在问题包括:运行环境苛刻,代码移植性差。 什么是轻量级?…
暂无图片
编程学习 ·

V2Pro春季班普遍学撑了,秋季班7月报名你还敢来么

今年V2春季班开班以后,同学们的学习信心保持着高涨,一直维持到了课程结业。今年春季班课程学习的进度在V2.1模块结束以后,我们开始推出了当时号称“加量不加价”的V2Pro增量课程,从DVT Eclipse工具的使用、覆盖率驱动验证管理流程、TBA测试平台自动化初级应用、寄存器一致性…
暂无图片
编程学习 ·

jackson的学习记录

Jackson对于date的反序列化只支持几种,如果不符合默认格式则会报一下错误 org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value 2012-12-12 12:01:01: not a valid representation (error: Can not parse date &…
暂无图片
编程学习 ·

Django 接收并解析POST请求参数

使用Django框架搭建一个简单的web服务,java程序去调用Django提供的接口: 1. Django接收GET请求并解析参数 # 直接使用request.GET.get就可以获取参数 request.GET.get(id,0)2. Django接收POST请求并解析参数 使用postman模拟POST请求,需要关闭csrftoken的验证:将settings.p…
暂无图片
编程学习 ·

C#中String字符串去空格的问题

1.Trim() 最常见的就是trim,trim是清除字符串前,后的空格. " A BC “被TRIM之后是"A BC” 2.LTrim(),RTrim() 分别是清除字符串前面的空格,和清除字符串后面的空格. L = Left左边 R = Right右边 3.replace() s=s.replace(" “,”") 第三种方…
暂无图片
编程学习 ·

手动连接线上presto

命令如下: java -jar presto-cli-0.237-executable.jar --server https://presto.ludp.lenovo.com:30070 --catalog hive --truststore-path /opt/jdk1.8.0_25/jre/lib/security/keystore.jks --truststore-password changeit在之前可以先测试一下网络 ping presto.ludp.lenov…
暂无图片
编程学习 ·

LeetCode——remove n-th node from end of list

题目描述: 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.↵↵ 删除了链表的倒数第n个节点之后,链表变为1->2->3->5. 备注: 题目保证n一定是合法的 请尝试只用一步操作完成该功能 解题思路: 删除…
暂无图片
编程学习 ·

网上书城前端界面设计

网上书城界面设计前言界面设计首页登录注册书籍搜索购物车代码实现总结 前言 接着我的上一篇博客来,今天为大家分享的内容是网上书城项目的界面设计以及代码分析 网上书城项目需求分析、功能划分、数据库表设计、工具类介绍 界面设计 首页首页的话,主要涉及到了BootStrap的相…
暂无图片
编程学习 ·

eslint代码规范配置

要求或禁止使用分号代替 ASI (semi) 命令行中的 --fix 选项可以自动修复一些该规则报告的问题。 该规则强制使用一致的分号。 semi: [“error”, “always”]; 复制代码 等级 : “error” 选项 “always”: (默认) 要求在语句末尾使用分号 默认选项 “always” 的 错误 代码示例…
暂无图片
编程学习 ·

CSV文件转Excel后数字自动转换成科学计数法的解决方法

CSV文件用Excel打开后,长度超过11位的数字自动转换成科学计数法显示,末尾数字变成“0000”,如何解决这一问题?以“老劳模系统数据.CSV”为例,身份证码是科学计数法了第一步:新建excel,用 office excel 打开第二步:点击“数据”---“从文本/cvs”如果乱码,则选择编码第…
暂无图片
编程学习 ·

B 1065 单身狗(散列的应用)

题目思路 这题明明写的是200ms要求,但可以暴力破解,这是我万万没想到的- -; 散列记录夫妻,hash【id】=cpid; 再用一个散列记录到场; 之后暴力破解遍历0~100001; 测试点3:注意00000的输出,有格式要求,不能输出成0; AC代码 #include<bits/stdc++.h> using names…