软件工程--------耦合和内聚

我们在设计程序的时候,往往会划分模块,怎样更好的设计模块?模块的设计标准又是什么?

模块的耦合和内聚就是用来描述模块设计的好坏。模块的划分总原则是 高内聚、低耦合。

模块的耦合方式从低到高依次是非直接耦合----数据耦合---标记耦合---控制耦合---外部耦合---公共耦合---内容耦合。模块的独立性和耦合性正好是相反的,模块的独立性越低,耦合性越高。简单地说,软件工程中对象之间的

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
【RT-Thread作品秀】RedClock 作者:iysheng 概述 我开发RedClock这个作品的背景主要有两个: 1.我想开发一下墨水屏,想体验下新奇的事物; 2.想在传统wifi时钟的基础上添加一个番茄时钟的功能,尝试提高工作效率,让其不单单具备提供时间和天气的功能 目前RedClock实现的功能,可以概括为4条: 1.通过墨水屏同步显示时间、天气图标(时间信息通过ntp校时,天气信息通过js语言从和风天气获取) 2.一键切换番茄时钟模式,番茄时钟的默认周期是25分钟,到实践通过屏幕提示 3.通过外接氣壓传感器lps22hh获取温度和气压信息并通過墨水屏幕 4.時間、天氣、温度和气压信息支持通过网络访问ART-Pi的设备IP同步显示 开发环境 硬件:ART-Pi、LPS22HH、SSD1619 RT-Thread版本:V4.0.3 开发工具及版本: 编译工具:arm-none-eabi-gcc、arm-none-eabi-binutils 编辑工具:vim 烧录、调试工具:openocd 0.10+ dirty(打过补丁才可以烧录程序到ART-Pi的外部flash)、kermit(串口工具)、telnet(调试工具)、gdb 硬件开发工具:Kicad(RedClock扩展板开发工具) RT-Thread使用情况概述 使用到的内核模块部分: 互斥锁、信号量、mempool、device 组件部分: cJSON、EasyFlash、webnet 软件包部分: lps22hb(传感器) 其他: 使用到的总线接口:I2C(传感器)、SPI(墨水屏) 硬件框架 软件框架说明 软件的实现设计到两个层次,设备驱动层(墨水屏驱动层开发),APP层(天气、传感器和时间的更新显示分别在不同的线程完成,线程间的数据交换通过函数完成,全局变量均为static类型,依据高内聚、低耦合分层设计理念开发) 软件模块说明 本软件主要的软件设计理念是创建多个线程,根据功能划分各个线程实现的功能: 在factory工程的基础上,添加了red_monitor_thread这个线程,完成传感器数据周期一分钟获取一次、以及更新tomato显示相关的内容。还有一个redclock_lcd_thread线程周期性的刷新屏幕,目前从屏幕寿命考虑,设置为3分钟刷新一次。还有一个线程完成对按键的扫描(目前仅仅支持番茄时钟快速切换的按键)。 考虑到为了实现一次配网,重启后自动联网,开启了easyflash保存wifi帐号和密码。联网为了消除跨域访问设备的问题,替换了原始ART-Pi的index.html文件为自己的文件,这样将对应的js和css部署在自己电脑这端完成开发和调试,借助webnet通过CGI的方式完成时间、温度、气压的上报(支持同步通过浏览器访问ART-Pi查看)和天气的下发(天气通过js连接和风天气服务获取)。 墨水屏的开发,通过注册了一个device完成,通过SPI接口访问。更新墨水瓶内容相关的动作,放在了四个函数中完成(分别完成天气图标更新、时间更新]、传感器数据更新、番茄时钟状态更新), 这些函数指挥更新墨水屏显示的内容,不会刷新墨水屏显示,刷新墨水屏显示的时候,更新才会有效。 演示效果 演示视频: 圖片展示: 比赛感悟 比赛过程中,我使用Kicad画了两版PCB,并作PCB然后焊接,整个开发过程大部分都是在Linux下完成的,初了开发墨水屏显示界面的时候使用了磨刀这个原型开发工具以及Image2Lcd整个软件将图片转换为C语言。 感觉自己收获最多的地方有两个方面,第一个方面当然是软件了,印象最深刻的是通过在openocd的代码仓库察看不同的branch和patch,给openocd打补丁然后修改对应的配置文件,支持直接烧录程序到ART-Pi的外部flash。通过这个工作,让我对openocd的使用有了更多的了解(通过访问openocd的网站以及看对应的manual), 这个是我最激动的。其他的软件方面就是对easyflash和webnet这两个组件有了学习,通过阅读对应的代码,学到了在32上进行KV类型的数值保存的新方法,之前我接触32保存配置数据使用的方法是从内部flash的尾部划分64KB虚拟为快设备,然后来格式化为elm文件系统,然后以cJSON格式保存,现在看来浪费了很多空间,easyflash也是我以后工作中替换之前这种方案新的可取的方法。通过对Webnet的学习,我真正接触到了通过http服务,远程通过浏览器和32进行数据通讯的方法。围绕webnet, 我还真正开发了一波js和css代码,开发js代码的时候,学会了通过jquery实现post和get请求,然后ART-Pi这端通过CGI完成HTTP通讯。 硬件方面,我感觉很开心的是自己
电大计算机本科-软件工程-形考作业2参考全文共2页,当前为第1页。电大计算机本科-软件工程-形考作业2参考全文共2页,当前为第1页。电大计算机本科 软件工程 形考作业2参考 电大计算机本科-软件工程-形考作业2参考全文共2页,当前为第1页。 电大计算机本科-软件工程-形考作业2参考全文共2页,当前为第1页。 面向对象设计强调定义(软件对象),并且使它们相互协作来满足用户需求。 (用例图)是从用户的观点描述系统功能,它由一组用例、参与者以及它们之间关系所组成。 (用例视图)用于描述系统的功能集。 UML 语言支持的建模方式不包括有(模块化建模)。 UML 中,包图是一种(分组机制)。 UML是一种(建模工具)。 UML是一种(交互式建模)语言。 类的属性结构要坚持简单的原则,尽可能不使用复杂的(数据结构)。 继承耦合是(控制类与界面类)之间的一种关联形式,设计时应该适当使用这种耦合。 包含关系用于构造多个用例(共性的部分)。 从本质上说,面向对象是"先"确定动作的(主体)"后"执行(动作)。 对象模型描述现实世 中实体的对象以及它们之间的关系,表示目标系统的静态数据结构。在面向对象方法中,由(类图)实现。 功能模型用于表达系统的需求,为软件的进一步分析和设计打下基础。在面向对象方法中,由(用例图和场景描述)实现。 对象实现了数据和操作的结合,使数据和操作(封装)于对象的统一体中。 (继承)是一般化类与特殊化类之间的一种关联形式,设计时应该适当使用这种耦合。 电大计算机本科-软件工程-形考作业2参考全文共2页,当前为第2页。电大计算机本科-软件工程-形考作业2参考全文共2页,当前为第2页。表示对象相互行为的模型是(动态模型)模型。 电大计算机本科-软件工程-形考作业2参考全文共2页,当前为第2页。 电大计算机本科-软件工程-形考作业2参考全文共2页,当前为第2页。 定义类的属性类型时尽量使用已有类型,太多自定义类型会降低系统的(可维护性)指标。 反映收发消息的对象的组织结构,用于描述系统的行为是如何有系统的成分协作实现的是(合作图)。 确定角色是(用例模型)的任务。 如果说用例F被用例T扩展,意思是(F是一个一般用例,T是一个特殊用例)。 软件需求分析产生两个重要文档,一个是软件需求规格说明书,另一个是(概要设计说明书)。 下面建立功能模型的步骤哪个顺序是正确的(确定角色/确定用例/确定用例模型)。 在图书馆信息管理系统中,已经构造了一个读者类,后来发现图书馆的学生和教师在借书中有不同要求。请问在面向对象设计中用(继承)方法可以有效地设计这3个类? 用(界面类)描述系统与角色之间的接口。 对类进行详细设计,主要是设计类的(属性和方法),优化类之间的关系。 面向对象设计的步骤中,正确的顺序是(系统构架设计、用例设计、类设计)。 面向对象设计首先要进行高层设计:确定系统的总体结构和风格,构造系统的(物理模型),将系统划分成不同的子系统。 面向对象设计首先要确定系统的总体结构和风格,构造系统的(物理模型)。 在面向对象方法中,描述系统控制结构的模型是(动态模型)模型。 在软件设计中应该保持模块的独立性原则,(耦合内聚)反映模块独立性。 电大计算机本科-软件工程-形考作业2参考

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值