williambirkin

恭喜发财!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

第三章 面向对象软件设计的目标、原则和难点
(第二章介绍模式相关的UML基础知识所以略过不写)

3.1 软件设计的目标
在设计时首要考虑的不适形象进度,而是系统的可维护性:
(1)可扩展性
(2)可修改性
(3)可替换性

3.2 “开-闭”原则
“开-闭”原则指软件实体应当对扩展开放,对修改关闭。
即软件实体应该在不修改的前提下扩展。
设计模式的应用就是使软件的结构在某种程度上满足“开-闭”原则。

3.3 实现“开-闭”原则
3.3.1 面向接口编程
面向接口编程的优势:
(1)降低程序个部分之间的耦合性,使程序模块互换成为可能。这样客户无须知道自己使用的对象类型,只要知道对象有客户所需要的接口即可。而且客户也不需要知道对象是如何实现的,只要知道定义接口的抽象类。
(2)使软件个部分便于单元测试,通过编制与接口已知的模拟类(Mock),可以很容易实现软件个部分的单元测试。从而提高软件的可靠性,降低错误率。
(3)易于实现软件模块的互换,软件升级时可以只部署发生变化的部分,而不会影响其它部分。

对于设计模来说,创建型的模式的产生只是面向接口编程的必然结果。面向接口编程要求使用对象的客户不了解对象的具体模型,客户只能通过一个负责实例化对象的对象--我们称之为“工厂”--来实例化对象,而工厂对象可以在应用初始化时集中进行实例化或者在集中的模块中进行。

3.3.2 封装变化
程序中任何可能发生变化的部分都可以封装成为对象,包括命令、事件、属性、算法和状态等。封装变化是实现“开-闭”原则的重要手段,也是在设计中发现对象的重要途径。因此在分析需求时,一定要注意什么是不变化的,什么是可能变化的,以及这些可能的变化会对封装带来的影响。
总之,封装可能发生变化的部分,将可能的变化作为对象。在面向对象设计中,对象不仅是指实现中存在的事物或者可视的事物,任何可能变化的部分都是候选对象。

3.3.3 采用组合代替继承
在某些时候通过增加子类来扩展功能可能出现如下的情况。

使用组合代替继承更加合理。

3.4 面向对象的难点
最难的部分是如何发现对象和对象间进行组合。

3.5 实际模式解决的问题
3.5.1 通过显示指定类创建对象
相关模式:抽象工厂模式、工厂方法模式和原型模式。

3.5.2 紧耦合
相关的模:式有抽象工厂模式、命令模式、外观模式、中介模式、观察者模式和职责链模式。

3.5.3 通过生成子类扩展功能
通过生成子类扩展功能会有很多问题,会引起子类数量的大量增加和类层次的增加。通过对象组合技术实现功能扩展式更好的选择。
相关模式:桥接模式、职责链模式、组合模式、装饰模式、观察者模式和策略模式等。

3.5.4 对对象表示或实现的依赖
如果客户知道对象如何表示、保存、定位或实现,那么在对象发生变化时也可能发生变化。因此需要对客户隐藏这些信息。
相关模式:抽象工厂模式、桥接模式、备忘录模式和代理模式等。

3.5.6 对算法的依赖
短发的实现的目的是不变的,但是算法本身却不是一成不变的。
相关模式:生成器模式、迭代子模式、策略模式、模版方法和访问者模式等。

3.5.7 对硬件环境的依赖
相关模式:抽象工厂模式和桥接模式。

 

posted on 2006-12-18 22:45  williambirkin  阅读(498)  评论(0编辑  收藏  举报