复杂系统的5个属性 :: 梦想风暴

来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=262705 存档链接: https://web.archive.org/web/20040811035713id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=262705


梦想风暴 一个小程序员的信口开河 <<<平民神话 | 主页 | 自掘坟墓>>> 复杂系统的5个属性 2004-07-12 Grady Booch在其经典巨作《Object-Oriented Analysis and Design with Applications》(中文版《面向对象分析与设计》)中提到了复杂系统的5个属性:

  1. 复杂性经常是以层次的形式表现出来,复杂系统是由相互关联的子系统组成,而这些子系统又是由它们各自的子系统构成,并由此类推到最低层的基本构件。
  2. 对系统中最基本构件的选择是相对任意的,而且在很大程度上取决与系统观察者的判断力。
  3. 一般而言,各构件内的连接总要强于构件间的连接。在从构件的低频动态中分离出高频动态时,这一属性很有用。这是因为高频动态涉及到各构件的内部结构,而低频动态涉及到各构件间的交互。
  4. 层次系统通常都是由仅仅少数不同的子系统通过不同的排列组合方式组成。
  5. 我们发现正运行的复杂系统都是由以前运行的简单系统演化而来……任何胡乱凑合涉及出来的复杂系统都不可能正常运转,也不可能被修补毫。我们必须由运行中的简单系统开始。 这5个属性并没有与软件开发直接关联起来,但通用的东西总是适用于大多数的情况,这也是我读到这5个属性时为之一震的原因。
  6. 我们的系统存在一个层次结构,即某个大功能由许多小功能组成,但是由于当初开发时,脑子里并没有一个比较明确的层次概念在那里,造成的结果就是组成关系比较混乱:孙子可能儿子交互,也有可能与爹和爷爷交互。因此,系统很难形成一份完整的视图,后来者想理清楚系统脉络需要花费相当大的力气。
  7. 很难想象在与客户探讨需求时跟他说在未来的系统中寄存器中放置什么值比较合适,大家关注点不同,所能见到的问题也是不同的。记得在我们系统开发的初期,考虑到一个同事是加入项目的时间不长,把一个简单的模块交给了他,结果这个积极上进的同事总是问他的模块在系统中的位置如何,不知不觉中,他把自己的层次提高了。
  8. “高内聚低耦合”是软件开发中一个长生不老的话题,原来它来自复杂系统的根本属性。按事物规律办事,符合事物发展方向。
  9. 软件开发是一场数学游戏,基数可能不大,但排列组合起来可是威力十足。正是基数小、排列组合大,如何让软件积木拼装起来更加轻松,调整起来更容易,这是一个努力的方向。
  10. 一个网友曾对我说过,设计系统就要复杂。对此,我一直不敢苟同,这回证据更充分了。一个有生命力的系统会有一个逐步进化的过程,如果一开始就复杂了,那以后该怎么办?我们毕竟是普通人,人理解问题的极限在那里摆着呢!(注:Miller等心理学家通过实验证明:人一次能掌握的信息块数约为7,这个数字多至9少至5) 最好的例子就是Unix的直接前辈Multics,过于复杂的设计使其坍塌于自身的重量之下,也因此成就了诞生于其废墟之上的Unix一段旷世传奇。 dreamhead 发表于 2004-07-12 15:57 引用Trackback(0) | 编辑 Comments 换个链接如何? tinyfool ( www.tinydust.net ) 发表于 2004-07-14 20:16 我的是 tinyfool的开发日记 http://www.tinydust.net/prog/diary/diary.htm dreamhead回复tinyfool说: 好啊!^_^ (2004-07-15 11:16) tinyfool ( www.tinydust.net ) 发表于 2004-07-14 20:16 发表评论 最近更新 自其不变而观之 初窥进程 叫我如何“面向接口” 自掘坟墓 复杂系统的5个属性 平民神话 我的J2EE误区 项目坚壳 重载游戏 惊天逆转