操作系统  办公  实用知识  设计  开发  WEB开发  移动开发  数据库  软件工程  网管  安全  管理  信息化  答疑  渠道 

面向对象设计模式与原则[4]

2007-9-20 网友评论 0 条 点击进入论坛

  总结

  设计模式描述了软件设计过程中某一类常见问题的一般性的解决方 案。面向对象设计模式描述了面向对象设计过程中、特定场景下、类与相互通信的对象之间常见的组织关系。

  深刻理解面向对象是学好设计模式的基础,掌握一定的面向对象设计原则才能把握面向对象设计模式的精髓,从而实现灵活运用设计模

  式。

  三大基本面向对象设计原则

  – 针对接口编程,而不是针对实现编程

  – 优先使用对象组合,而不是类继承

  – 封装变化点

  使用重构得到模式。敏捷软件开发实践提倡的“Refactoring to Patterns”是目前普遍公认的最好的使用设计模式的方法。

  附:面向对象设计原则

  面向对象设计的基石是“开—闭”原则。

  “开一闭”原则讲的是:一个软件实体应当对扩展开放,对修改关闭。

  这个规则说的是,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。

  从另外一个角度讲,就是所谓的“对可变性封装原则”。“对可变性封装原则”意味着两点:

  1 .一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里面。同一种可变性的不同表象意味着同一个继承等级结构中的具体子类。

  2.一种可变性不应当与另一种可变性混合在一起。即类图的继承结构一般不应超过两层。

  做到“开—闭”原则不是一件容易的事,但是也有很多规律可循,这些规律同样也是设计原则,它们是实现开—闭原则的工具。

  里氏代换原则

  里氏代换原则:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都换成o2时,程序P的行为没有变化,那么类型T2是T1的子类型。

  即如果一个软件实体使用的是基类的话那么也一定适用于子类。但反过来的代换不成立。

  如果有两个具体类A和B之间的关系违反了里氏代换原则,可以在以下两种重构方案中选择一种:

  1 创建一个新的抽象类C,作为两个具体类的超类,将A和B共同的行为移动到C中,从而解决A和B行为不完全一致的问题。

  2 从B到A的继承关系改写为委派关系。

  依赖倒转原则

  依赖倒转原则讲的是:要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程。针对接口编程的意思是,应当使用接口和抽象类进行变量的类型声明、 参量的类型声明,方法的返还类型声明,以及数据类型的转换等。不要针对实现编程的意思就是说,不应当使用具体类进行变量的类型声明、参量的类型声明,方法 的返还类型声明,以及数据类型的转换等。

  依赖倒转原则虽然强大,但却不易实现,因为依赖倒转的缘故,对象的创建很可能要使用对象工厂,以避免对具体类的直接引用,此原则的使用还会导致大量的类。维护这样的系统需要较好的面向对象的设计知识。

  此外,依赖倒转原则假定所有的具体类都是变化的,这也不总是正确的。有一些具体类可能是相当稳定、不会发生变化的,消费这个具体类实例的客户端完全可以依赖于这个具体类。

已有 0 位对此文章感兴趣的网友发布了看法    
我来评两句 登录邮箱: 密码:
  匿名发表
今日推荐
技术文库(共有 46473 篇文章)
操作系统
办公软件
实用知识
网络管理
软件开发
WEB开发
软件工程
数据库
设计在线
信息安全
行业信息化
管理信息化
重点推荐
电子杂志订阅
点击电子杂志名称查看样刊
输入E-mail地址即可订阅
E-mail