《面向对象分析与设计》读书笔记——第一章 复杂性

 

软件的复杂性是一个基本性质,而不是一个偶然性质。这种固有的复杂性是由4个因素造成的:问题领域的复杂性,管理开发过程的困难、软件可能的灵活性以及表征离散系统行为的困难。

不限制复杂性将导致项目的推迟提交、走出预算以及无法满足所有需求等,这种情况通常称为软件危机。

所有的复杂系统都具有5个属性:

1)               复杂性经常是以层次的形式表现出来,复杂系统是由相互关联的子系统组成,而这些子系统又是由它们各自的子系统构成,并由此类推到最低层的基本构件。

2)               对系统中最基本的构件的选择是相对任意的,而且在很大程度上取决于系统观察者的判断力。

3)               一般而言,各构件内的连接总要强于构件间的连接。在从构件的低频动态中分离出高频动态时,这一属性很有用。这是因为高频动态涉及到各构件的内部结构,而低频动态涉及到各构件的交互。

4)               层次系统通常都是由仅仅少数不同的子系统通过不同的排列组合方式组成。

5)               我们发现正运行的复杂系统总是由以前运行的简单系统演化而来……任何胡乱凑合设计出来的复杂系统都不可能正常运转,也不可能被修补好。我们必须由运行中的简单系统开始。

发现共同的抽象和机制,将非常有利于我们理解复杂系统。一个复杂系统中有多个不同的层次。从两个方面来观察系统,即将它看作“是一个层次”(类结构)及层次的“一部分”(对象结构)。系统的类结构和对象结构可总称为系统的体系结构。

掌握复杂性的基本方法是在设计一个复杂的软件系统时,将它分解成更小的部分,再将它们单独精化。

算法分解把系统中的每个模块表示某个总体进程中的主要一步,面向对象分解根据问题领域中的关键抽象来分解系统。算法分解方法突出事件的排序,而面向对象方法则强调主体。

posted @ 2006-05-19 16:59  文野  阅读(1603)  评论(1编辑  收藏  举报