7±2

心理学研究认为人同时只能处理7±2件事,也就是说人通常只能同时处理59件事。超过这个范围,就容易出现混乱或差错。据说,在某些古代文明中,“七”有很多的意思。

 

7±2原理表明了人类认知能力的局限性。为了克服这个局限,我们的祖先很早就发明了分而治之(Divide and Conquer)的方法。在研究一个复杂事物时,将其划分成若干小部分,并逐渐细化,直到能把握为止。然后再反过来研究各部分之间的联系,最终达到理解整个事物的目的。

 

以人体为例,人体可看成是一个四层结构:系统、器官、组织、和细胞。人体由若干系统组成,如呼吸系统、消化系统、循环系统、神经系统等,系统若干器官组成,器官由若干组织组成,组织由细胞组成。这样我们在研究每一部分时,同时需要考虑的问题就不会太多。这样既容易描述,也便于理解。如果在划分时没有加入系统这一层,而把人体看成是心脏、大脑、脾、肝、胃、肠、肺、手、脚、腿、臂、眼、耳、鼻、喉等,就不利于我们理解各器官之间的关系以及人体的运作机理。就本质而言,人体是由细胞组成的,但这对我们理解人体有多大帮助呢?所以合理的分层是我们描述问题、理解问题的有力武器。

 

人体是一个复杂系统,但我们用一个四层结构就能描述得相当清楚。巧的是,相当多的软件系统都能用四层结构描述。以把每一部分都分成七个小部分计算,一个四层结构能描述28007+7*7+7*7*7+7*7*7*7)个子系统或类。有多少软件系统能超出这个范围呢?

 

软件设计的一个重要任务是分块、分层,使每一块、每一层都自成一体,完成某一功能,但又不过于复杂。并使各块、各层之间的耦合度要尽量小。这样的软件系统既易于开发,又易于维护。不幸的是,一个软件可能有很多划分方法。怎样使划分更合理,那就要看经验与感觉了。但如果一种划分违背了7±2原理,就很可能表示该划分不合理。大的原则是:不是完成同一功能的子部分不要放在一起,不是同一抽象层的子部分不要放在同一层。把心脏归到呼吸系统显然不对,把上皮组织与消化系统的各器官并列起来也不妥当。当然,也不要指望一次就能划分好,要随时调整。

 

在软件开发中,要自觉运用7±2原理,

l         每一张UML图都尽量不要超过7±2个实体。

l         每个接口(interface)或抽象类的公共函数(public functions)都尽量不要超过7±2个。

l         每个函数都不要过长。函数内,紧密相关的表达式之间不留空行,形成一个表达式组,与其它表达式组用空行隔开。每个表达式组最好有注释,解释整个表达式组的行为。每个表达式组的行数也不要过多。

l         软件的物理结构与逻辑结构要尽量匹配。这样,如果逻辑结构遵从7±2原理,物理结构就能自动符合要求。

l         每个开发小组的人数以七人以下为佳。

l         等等。

 

不管我们喜欢与否,7±2原理是大自然赋予人类的限制。也许这个原理是美得一种表现呢,不是说简单就是美吗?那就让每一个模块、每一个类、每一个函数都美起来吧。

 

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

beiyan

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值