面向对象的设计原则(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成为可能,子类型对父类型的可替换性必须是开发人员可以隐式依赖的东西,因此,如果没有显式的强制基类类型的契约,那些代码就必须良好并且明显的表达出这一点。

面向对象的五大设计原则

一:开——闭原则(OCP) 含义:一个软件实体应当对扩展开放,对修改关闭。 二:单一职责原则(SRP) 含义:就是对一个类而言,应该仅有一个引起变化的原因。 所以在构造对象时,应该将对象的不同职责分离...
  • li2327234939
  • li2327234939
  • 2016-12-28 17:15:51
  • 847

OOD设计原则之OCP、LSP

一直谈软件设计,却不能准确的描述。结合最近看《黑客与画家》,这才对设计的六大原则有了一点浅显的体会。首先说一下一个项目的路径:开发、重构、测试、投产、运维。其中重构的好处就是希望对原有设计和代码进行修...
  • dd864140130
  • dd864140130
  • 2014-12-08 13:17:47
  • 956

面向对象设计的五个基本原则

面向对象的3个基本要素:封装、继承、多态 面向对象的5个基本设计原则: 单一职责原则(Single-Resposibility Principle)     其核心思想为:一个类,最...
  • rankun1
  • rankun1
  • 2016-03-03 16:32:25
  • 3214

OO的五大原则:SRP、OCP、LSP、DIP、ISP

OO的五大原则是指SRP、OCP、LSP、DIP、ISP。 SRP -- (Single Responsibility Principle 单一职责原则) OCP——开闭原则(Closed...
  • iflychenyang
  • iflychenyang
  • 2014-03-18 15:37:12
  • 1013

java--面向对象七大设计原则

面向对象七大设计原则 1、 开闭原则 2、 里氏替换原则 3、 单一职责原则 4、 接口隔离原则 5、 依赖倒置原则 6、 迪米特原则 7、组合/聚合复用原则...
  • u013372519
  • u013372519
  • 2014-07-30 23:40:44
  • 1116

面向对象设计五大原则

一 Single Responsibility Principle——单一职责原则 核心思想: 一个类应该只有一个引起它变化的原因. 假设存在这样的设计. Rectangle类具有两个方法,一个方...
  • xiechao198609150053
  • xiechao198609150053
  • 2016-06-06 11:20:44
  • 785

面向对象思想设计原则及常见设计模式

面向对象思想设计原则 •在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设计原则 •单一职责原则 •开闭原则 •里氏替换原则 •依赖注入原则 •接口...
  • modelsetget
  • modelsetget
  • 2016-11-09 22:58:21
  • 483

JAVA之面向对象设计原则

JAVA之面向对象设计原则
  • netuser1937
  • netuser1937
  • 2017-01-23 13:42:58
  • 258

unity开发程序设计原则(七大面向对象设计原则)

七大面向对象设计原则开闭原则:面对需求,对程序的改动是通过增加新代码进行的,而不是改变原来的标题 依赖倒转原则:高层模块不应该依赖底层模块,两个都应该依赖与抽象;抽象不应该依赖于细节,细节应该依赖于抽...
  • qq_34244317
  • qq_34244317
  • 2017-09-02 15:57:30
  • 258

面向对象软件工程复习之设计原则

重构(Refactoring):是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。 面向对象设计原则:单一职责...
  • liuxiaocong2
  • liuxiaocong2
  • 2016-06-29 18:26:01
  • 440
收藏助手
不良信息举报
您举报文章:面向对象的设计原则(3):LSP
举报原因:
原因补充:

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