设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须找到相关的对象,以适当的粒度将它们归
类,再定义类的接口和继承层次,建立对象之间的基本关系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求
也要有足够的通用性。
你也希望避免重复设计或尽可能少做重复设计。有经验的面向对象设计者会告诉你,要一下子就得到复用性和灵活性好的设计,
即使不是不可能的至少也是非常困难的。一个设计在最终完成之前常要被复用好几次,而且每一次都有所修改。
有经验的面向对象设计者的确能做出良好的设计,而新手则面对众多选择无从下手,总是求助于以前使用过的非面向对象
技术。新手需要花费较长时间领会良好的面向对象设计是怎么回事。有经验的设计者显然知道一些新手所不知道的东西,这又
是什么呢?
内行的设计者知道:不是解决任何问题都要从头做起。他们更愿意复用以前使用过的解决方案。当找到一个好的解决方案,他
们会一遍又一遍地使用。这些经验是他们成为内行的部分原因。因此,你会在许多面向对象系统中看到类和相互通信的对象(co m m u n i c a t i n go b j e c t )的重复模式。这些模式解决特定的设计问题,使面向对象设计更灵活、优雅,最终复用性更
好。它们帮助设计者将新的设计建立在以往工作的基础上,复用以往成功的设计方案。
一个熟悉这些模式的设计者不需要再去发现它们,而能够立即将它们应用于设计问题中。以下类比可以帮助说明这一点。
小说家和剧本作家很少从头开始设计剧情。他们总是沿袭一些业已存在的模式,像 “ 悲剧性英雄 ” 模式 ( 《麦克白》、《哈姆雷特》
等 ) 或 “ 浪漫小说 ” 模式 ( 存在着无数浪漫小说 ) 。同样地,面向对象设计员也沿袭一些模式,像 “ 用对象表示状态 ” 和 “ 修饰对象以便
于你能容易地添加 / 删除属性 ” 等。一旦懂得了模式,许多设计决策自然而然就产生了。
我们都知道设计经验的重要价值。你曾经多少次有过这种感觉 — 你已经解决过了一个问题但就是不能确切知道是在什么地
方或怎么解决的?如果你能记起以前问题的细节和怎么解决它的,你就可以复用以前的经验而不需要重新发现它。然而,我们
并没有很好记录下可供他人使用的软件设计经验
具体文件请下载
链接:https://pan.baidu.com/s/1NJWT1O8SyjdoN8PPHqhtQQ?pwd=8t0y
提取码:8t0y