前言:
![](https://i-blog.csdnimg.cn/blog_migrate/e518f7c5ad1cc35100fc545a7e39ee87.png)
需求(需求规格) =》 软件系统建模(概要设计) =》 软件系统设计(详细设计)
第三章 软件工程
第4节 系统设计
![](https://i-blog.csdnimg.cn/blog_migrate/0bf66b6451e953aa97c387abb11fee62.png)
4.1 人机界面设计
4.1.1 概述
人机界面设计是指通过一定的手段对用户界面有目标和计划的一种创作活动。
人机界面(Human Computer Interface,简称HCI)通常也称为用户界面
人机界面设计主要包括三个方面:
设计软件构件之间的接口;
设计模块和其他非人的信息生产者和消费者的界面;
设计人(如用户)和计算机间的界面。
人机界面是计算机科学和认知心理学两大学科相结合的产物,同时也吸收了语言学、人机工程学和社会学等学科的研究成果。经过40余年的发展,已经成为一门以研究用户及其与计算机的关系为特征的主流学科之一。近年来,人机界面的设计理论已经更广泛地发展和应用到人一机一环境系统工程等领域,使工程技术设计与使用者的身心行为特点相适应,从而使人能够高效、舒适地工作与生活。
![](https://i-blog.csdnimg.cn/blog_migrate/f92fa0b26be4a3bf1dd84da3da1a3d05.png)
4.2 人机界面设计思想
计算机按照机器的特性去行为,人按照自己的方式去思维和行为。
要把人的思维和行为转换成机器可以接受的方式,把机器的行为方式转换成人可以接受的方式,这个转换就是人机界面。使计算机在人机界面上适应人的思维特性和行动特性,这就是“以人为本”的人机界面设计思想。
一个友好美观的界面会给人带来舒适的视觉享受,拉近人与电脑的距离,为商家创造卖点。界面设计不是单纯的美术绘画,他需要定位使用者、使用环境、使用方式并且为最终用户而设计,是纯粹的科学性的艺术设计。检验一个界面的标准既不是某个项目开发组领导的意见也不是项目成员投票的结果,而是最终用户的感受。所以界面设计要和用户研究紧密结合,是一个不断为最终用户设计满意视觉效果的过程。
4.3 软件接口
软件的未来其实在很大程度上要指望软件接口的前景如何。
计算机世界里的接口这两个字具有两种众所周知的含义:
其一是指软件本身的狭义“接口”,比如各种软件开发API等。
其二则指的是人与软件之间的交互界面。我们把这种人-软件之间的接口称作“用户界面”,也就是“UI”。UI设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让软件变得有个性有品味,还要让软件的操作变得舒适、简单、自由,充分体现软件的定位和特点。
4.2 结构化设计
4.2.1 模块化设计的准则
![](https://i-blog.csdnimg.cn/blog_migrate/ce9c1cd5b061dbac799bbe31ed74592e.png)
模块规模应适中
改进软件结构,提高模块独立性和高内聚低耦合(易于合作开发、系统维护);
顶层扇出高,中间扇出少,底层高扇入;
什么是扇入和扇出?
在软件设计中,扇入和扇出的概念是指应用程序模块之间的层次调用情况。
按照结构化设计方法,一个应用程序是由多个功能相对独立的模块所组成。
扇入:是指直接调用该模块的上级模块的个数(即被调用)。扇入大表示模块的复用程序高。
扇出:是指该模块直接调用的下级模块的个数(即调用)。扇出大表示模块的复杂度高,需要控制和协调过多的下级模块;
一个模块的扇出数过大或过小都不理想,过大比过小更严重。一般认为扇出的上限不超过7 . 扇出过大一般是因为缺乏中间层次,应该适当增加中间层次的模块。
![](https://i-blog.csdnimg.cn/blog_migrate/67432c0f4f34f0edcad1eae0fe307248.png)
扇入指该模块在结构图中的直接上层模块数,扇出是该模块在结构图的直接下层模块数。
扇入越多说明模块的复用率越高,扇出越多说明结构越复杂。
较良好的软件结构通常是 顶层函数的扇出较高,中层函数的扇出较少,而底层函数则扇入到公共模块中。
模块的作用范围(影响范围)保持在该模块的控制范围内;
接口设计:
降低接口复杂程度(接口设计应使得信息传递简单并且与模块功能一致)
单入口单出口(以避免内容耦合,易于理解和维护)
相同的输入应该具有相同的输出
4.2.2 高内聚低耦合的原理
高内聚、低耦合,是软件工程中的概念,是判断软件设计好坏的标准,主要用于程序的面向对象的设计,主要看类的内聚性是否高,耦合度是否低。目的是使程序模块的可重用性、移植性大大增强。
通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。
内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事,它描述的是模块内的功能联系;
耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。
4.2.3 高内聚低耦合的内涵
![](https://i-blog.csdnimg.cn/blog_migrate/0a03ec4ce7f5dc5ec8379753e23d65de.png)
高内聚、低耦合原则的本质:确保程序在时间和空间上满足局部性原理!!!
高内聚:重在内部程序组成 =》 模块内部的程序执行在时间和空间上满足具备性原理
偶然内聚:一组任务代码,随机性的内聚在一起。
逻辑内聚:一组任务代码,业务逻辑上相关,但他们在时间和空间的程序执行上,并不满足局部性原理。
瞬间内聚:一组任务代码,在代码的执行时间上相邻,但代码的存储空间不一定相邻。
过程内聚:一组任务代码,他们处理的数据对象是相关的,但代码的存储空间不一定相邻。
通信内聚:一组任务代码,他们处理的数据对象在相同的存储区。
顺序内聚:一组任务代码,协同完成某一工作,但在时间上需顺序执行。
功能内聚:一组任务代码,协同完成某一工作,各种完成单一的功能,缺一不可。
低耦合:重在外部接口 =》模块内部数据被访问的手段决定了耦合的程度。
内部耦合:模块之间直接访问对方的私有数据
公共耦合:通过共享内存访问对方的数据
外部耦合:通过全局变量访问对方的数据
控制耦合:通过传递控制命令给对方,从而访问对方的私有数据
标记耦合:通过传递标记给对方,从而访问对方的私有数据
数据耦合:通过传递简单的数据,从而访问对方的私有数据
非直接耦合:通过公共的第三方交互数据,从而访问对方的私有数据
![](https://i-blog.csdnimg.cn/blog_migrate/bca44e788f74cf091b821c056fcb5073.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/b3cc9361c67e5a744ee7982726a03e54.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/f1f4521473305a1744b4658a7441e506.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5d4fe31120f536fbbebd5bbc7183b7ca.jpeg)