软件模块的耦合性分类怎么样理解求大神举一些简单直接的栗子

你这样研究编程是准备考试么。。。所谓耦合,其实说白了就一句话 你写了两个类A,B想修改A,结果发现B也要被修改,甚至C,D都要被修改这就很尴尬了所以要把他们在逻辑上抽象分离,也就是所谓解耦最简单的比方class A{AttackB{b.hp-=100;if(b.hp\u0026lt;0){b.live=false;}}}class B{int hp;bool live;}这两个类就耦合了,如果我想把B的hp改成nowhp,live改成LIVE,那就还要去改A一两个不觉得,如果要改的东西多了,那就麻烦了所以要尽量把A,B解耦class A{AttackB{B.BeAttack()}}class B{BeAttack(){b.hp-=100;if(b.hp\u0026lt;0){b.live=false;}}}还可以再进一步解耦抽象class A{Attack(obj _obj){_obj.BeAttack()}}class obj{BeAttack()=0{}}class B:public obj{BeAttack(){b.hp-=100;if(b.hp\u0026lt;0){b.live=false;}}}这两步分别是两种解耦,目的是让两个类的接口清晰,不互相干扰,至于具体叫啥。。。我也没研究过,不过那重要么。。。
■网友
作为一个PM,被邀请回答感觉有点心虚,虽然懂点技术,但『高内聚低耦合』这个专业概念理解和应用还是很复杂的。不回答点什么又感觉不好意思,所以搬运了两个别人的回答作为参考,都比较详细,特别是第一个文章,一图胜千言。图解7种耦合关系java - 软件工程中的耦合性和解耦合性是什么意思?另外,其实在工作中『解耦』这个概念还是普遍试用的,就是把整体拆解成几个相互独立的模块,分析各个模块,可以说是抽丝剥茧。很多事情是相通的,工作得越久就越有体会,
■网友
我理解的解耦主要是为了:1. 模块化(Modularization)2. 复用性 (Reusability)3. 可维护(Maintenance)还有最重要的就是分割职责。按上面的顺序举例来说:1. 模块化,比如我现在回复消息在这个文本框,它就是一个Comment模块,有它独立的功能、逻辑、和页面,麻雀虽小五脏俱全,开发时可以让team中的一个人负责。2. 复用性,有很多的地方需要做同一件事,就可以把它抽象出来,成为一个service,供大家使用,而不需要每次都造轮子(比如与数据库的交互操作)。3. 可维护,还是上面提到的Comment模块,如果发生问题需要fix,也只需要动这一块的代码,其他地方的代码根本不用考虑,也不会对他们产生不好的影响。很多编程语言中的MV*思想(MVC, MVP, MVVM),就是通过解耦,达到分工明确,前后台同时开发,增加代码的复用性和可维护性。


    推荐阅读