Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15196
  • 博文数量: 11
  • 博客积分: 236
  • 博客等级: 二等列兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-10 20:30
文章分类

全部博文(11)

文章存档

2011年(11)

我的朋友

分类: C/C++

2011-09-22 20:54:06

面向对象程序设计原则:Liskov替换原则(LSP)
 
Liskov替换原则是使开放封闭原则(OCP)成为可能的主要原则之一。
实现OCP原则的主要机制是抽象(Abstraction)和多态(polymorphism)。在像C++、Java这样的静态语言中,支持抽象和多态的关键技术之一是继承。但是如何才能创建最佳的继承层次关系而使其符合OCP原则呢?这正是LSP所要解答的问题。
 
什么是LSP呢?Barbara Liskov在188年写出了如下定义:
    若对每个类型S的对象o1,都存在一个类型T的对象o2,使得在所有针对T编写的程序P中,
    用o1替换o2后,程序P的行为功能不变,则S是T的子类型
 
也就是:
    子类型(subtype)必须能够替换掉它们的基类型(base type)。
 
假设有一个函数f,它的参数为指向某个基类B的指针或者引用,同样假设有B的某个派生类D,如果把D的对象作为B类型传递给f,会导致f出现错误行为,那么D就违反了LSP。
 
经典的例子:正方形(square)继承自长方形(Rectangle)。
 
假设代码中已经存在如下一个长方形类,写该类前未预料到将来需要一个正方形类。
  1. /* 长方形 */
  2. class Rectangle {
  3. public:
  4.     void SetWidth(double w) { itsWidth = w; }
  5.     void SetHeight(double h) { itsHeight = h; }
  6.     double GetHeight() const { return itsHeight; }
  7.     double GetWidth() const { return itsWidth; }

  8. private:
  9.     Point itsTopLeft;
  10.     double itsWidth;
  11.     double itsHeight;
  12. };
 
未完待续。。。
阅读(2822) | 评论(1) | 转发(1) |
0

上一篇:Android保存数据的方式

下一篇:没有了

给主人留下些什么吧!~~

2011-09-28 19:46:34

http://www.bags2world.com/