高内聚低耦合的程序设计思想——个人浅见

来源:互联网 发布:杨辉三角代码java 编辑:程序博客网 时间:2024/04/26 06:37

模块的独立性:1.模块各自独立的软件利于团队开发 2.独立的模块比较容易测试和维护,修改设计和程序需要的工作量小,错误传播范围小,需要扩展功能时能够“插入”模块。总之,模块独立是好设计的关键,而设计又是决定软件质量的关键环节。


耦合度--体现模块之间的独立性,越低越好。(耦合度低,即模块的独立性好,其他模块的改动几乎不影响该模块,拓展性好)


如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在,那么它们彼此完全独立,意味着模块间无任何连接,耦合程度最低。但是,在一个软件系统中不可能所有模块之间都没有任何连接。因为只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价值的功能。


分类:

数据耦合:两个模块彼此通信通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合(模块之间只存在数据关联)。数据耦合是低耦合,且系统中至少必须存在这种耦合。

特征耦合:如果被调用的模块处理的数据多于它确实需要的数据(查出了某个表的全部数据,真正需要用到的只有一部分),这将导致对数据的访问失去控制,从而给计算机犯罪提供了机会。(查询的数据多余模块要使用的数据)

控制信息耦合:类似数据耦合,不同点在于传递的数据信息中有控制信息(个人理解 ,比如用户登录验证成功后(登录验证功能),会根据用户id再去查要显示的个人主页信息,还可以利用id继续去增删改查一类的操作)。控制耦合会增加系统的复杂程度。

公共环境耦合:两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。公共环境可以是全程变量、共享的通信区等。它的复杂度随耦合的模块个数而变化。

内容耦合:两个模块出现以下情况:1.一个模块访问另一个模块的内部数据 2.一个模块不通过正常入口而转到另一个模块内部 3.一个模块有多个入口(意味着这个模块有几种功能)。 我们应该坚决避免使用内容耦合。事实上许多高级程序语言已经设计成不允许在程序中出现任何形式的内容耦合。


总之,耦合是影响软件复杂程度的一个重要因素,应该采取下述设计原则:

尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。




内聚标志着一个模块内部各个元素彼此结合的紧密程度。简单的说,理想内聚的模块只做一件事情。

内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。(个人理解:高内聚就是通过元素的紧密结合,能够满足做某件事的绝大部分条件,只需要另一个模块传数据参数(仅传数据,耦合低)过来,我就能完成这个事情。)  


分类以及优劣评分:

偶然内聚:有时在写完一个程序之后,发现一组语句在两处或者多处出现,于是把这些语句作为一个模块以节省内存,这就是偶然内聚。(作用:节省内存,简化代码,对于程序内聚的作用:0分)

逻辑内聚:如果一个模块完成的任务在逻辑上属于相同或者相似的一类(如一个模块产生各种类型的全部输出)。(1分)(个人体会:servlet类中就利用一个比如StudentServlet 去控制该学生所有的(包含查询、添加个人信息、修改基本信息等各个页面)页面跳转。里面的代码多个模块的跳转混在一起(一个Servlet中),修改某个模块的部分代码,能找半天。。修改困难)

时间内聚:如果一个模块包含的任务必须在同一段时间内执行(如模块完成各种初始化工作)。(3分)(时间关系在一定程度上反映了程序的某些实质,内聚程度比逻辑内聚好一些)

中等程度的内聚:

过程内聚:如果一个模块内的处理元素是相关的,而且必须以特定次序执行。(5分)(使用程序流程图作为工具设计软件时,常常通过研究流程图确定模块的划分,这样得到的往往是过程内聚的模块)

通信内聚:如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。(7分)

高内聚:

顺序内聚:如果一个模块的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据)。(9分)(个人体会:比如mybatis中,1.加载配置文件,生成一个能操纵的对象 2.利用这个的对象生成InputStream的流 3.利用InputStream,得到SqlSessionFactory 4.利用SqlSessionFactory得到SqlSession 等   那类元素关联性强,还必须按顺序,按步骤走的元素。这类代码内聚高)

功能内聚:如果模块内所有处理元素属于一个整体,完成一个单一的功能。(10分)(最高程度的内聚)


总结,我们写代码没必要精确到内聚的级别。重要的是设计时力争做到高内聚,并且能够辨别自己写的程序低内聚的模块(写完代码意识到还能提示得更高),有能力通过修改

设计提高模块的内聚程度,同时降低模块间的耦合程度,最终得到一个独立性较高的模块。

0 0
原创粉丝点击