面向对象的设计原则(3):LSP

原创 2004年07月07日 22:06:00
子类型必须能够替换掉他们的基类型
 假设有一个函数f,它的参数为指向某个基类B的指针或引用,同样假设存在B的某个派生类D,如果把D的对象作为

 B类型传给f,会导致f出现错误的行为,那么D就违反了LSP
 Martin 举了个例子:
 public class Rectangle()
 {
  private int width;
  private int height;
  public void setWidth(int w)
  {
   this.width = w; 
  }
  public void setHeight(int h)
  {
   this.height = h;
  }
  public int getArea()
  {
   return this.height * this.width;
  }
 }

 很自然的Square从Rectangle继承而来,但是重写了两个方法,保证长和宽是一致的
 public class Square extend Rectangle()
 {
  
  public void setWidth(int w)
  {
   super.setWidth(w);
   super.setHeight(w);
  }
  public void setHeight(int h)
  {

   super.setWidth(h);
   super.setHeight(h);
  }
 }

 假设有下面的函数g
 void g(Rectangle r)
 {
  r.setWidth(5);
  r.setHeight(4);
  assert(r.getArea() == 20);
 }
 当传进来的对象是square时就会发生错误!!!这里就违反了Lsp
 基于DBC的设计:前置条件,后置条件,不变式(参见Meyer的书籍《基于DBC的设计》)

 Lsp使得OCP成为可能,子类型对父类型的可替换性必须是开发人员可以隐式依赖的东西,因此,如果没有显式的强制基类类型的契约,那些代码就必须良好并且明显的表达出这一点。

设计原则(二)里氏替换原则(LSP)

一、什么是里氏替换原则 里氏替换原则的严格表达是:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有变化,那么类型...
  • xingjiarong
  • xingjiarong
  • 2015年11月29日 11:03
  • 2566

【JAVA】面向对象设计七个原则

程序是为需求服务的,需求无时无刻都有可能变更,最好一开始就依托一套优秀原则来设计程序,以下介绍面向对象设计的七个原则。...
  • u011704894
  • u011704894
  • 2016年01月20日 14:28
  • 1191

面向对象设计的三个基本要素与五种主要设计原则

一、三个基本特征 面向对象的三个基本特征是:封装、继承、多态。 封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事...
  • Green_shing
  • Green_shing
  • 2014年03月14日 17:25
  • 2144

面向对象设计原则(SRP,OCP,LSP,DIP,ISP)

  • 2011年08月31日 11:14
  • 153KB
  • 下载

面向对象设计原则:LisKov替换原则(LSP)

●定义 子类型必须能够替换掉它们的基类型。 ●关于“IS-A” 通常说“IS-A”是一个继承关系,如果某个将要被创建的类与现存的某个类满足这种关系,那么这个新类应该从这个现存中继承。 “替换原...
  • codelative
  • codelative
  • 2013年06月06日 18:58
  • 374

面向对象设计原则--里氏替换原则(LSP)和依赖倒置原则(DIP)

面向对象设计原则–里氏替换原则(LSP)和依赖倒置原则(DIP)tags:设计模式 LSP–inheritance should ensure that any property proved a...
  • qq_22841811
  • qq_22841811
  • 2016年09月29日 23:18
  • 234

面向对象基础:OO的五大原则是指SRP、OCP、LSP、DIP、ISP

OO的五大原则是指SRP、OCP、LSP、DIP、ISP。 1. SRP(Single Responsibility Principle单一职责原则)  单一职责很容易理解,也很容易实现。...
  • Leolu007
  • Leolu007
  • 2017年03月21日 15:47
  • 553

面向对象的3大特征和5大设计原则

一、三个基本特征 面向对象的三个基本特征是:封装、继承、多态。 封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封...
  • qq_38621978
  • qq_38621978
  • 2017年07月28日 16:52
  • 122

擎天哥as3教程系列第五回——面向对象设计原则融汇贯通

OOD是面向对象设计。一个好的应用一定要有一个好的设计。 下面对面向对象设计原则有的是我自己的理解,有的是在网上粘贴的。 一  单一职责原则 “就一个类而言,应该只专注做一件事和仅有一个引起变化...
  • skiing_886
  • skiing_886
  • 2012年09月24日 19:42
  • 1150

面向对象设计原则

  • 2013年05月30日 08:34
  • 1.83MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:面向对象的设计原则(3):LSP
举报原因:
原因补充:

(最多只允许输入30个字)