c#里氏替换原则 里氏代换原则

里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。

里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
一般而言,违反里氏代换原则的,也违背“开-闭”原则,反过来不一定成立。

c#里氏替换原则 里氏代换原则

LSP讲的是基类和子类的关系。只有当这种关系存在时,里氏代换关系才存在。如果两个具体的类A,B之间的关系违反了LSP的设计,(假设是从B到A的继承关系)那么根据具体的情况可以在下面的两种重构方案中选择一种。
-----创建一个新的抽象类C,作为两个具体类的超类,将A,B的共同行为移动到C中来解决问题。
-----从B到A的继承关系改为委派关系。
为了说明,我们先用第一种方法来看一个例子,第二种办法在另外一个原则中说明。我们就看那个著名的长方形和正方形的例子。对于长方形的类,如果它的长宽相等,那么它就是一个正方形,因此,长方形类的对象中有一些正方形的对象。对于一个正方形的类,它的方法有个setSide和getSide,它不是长方形的子类,和长方形也不会符合LSP。
那么,如果让正方形当做是长方形的子类,会出现什么情况呢?我们让正方形从长方形继承,然后在它的内部设置width等于height,这样,只要width或者height被赋值,那么width和height会被同时赋值,这样就保证了正方形类中,width和height总是相等的.现在我们假设有个客户类,其中有个方法,规则是这样的,测试传入的长方形的宽度是否大于高度,如果满足就停止下来,否则就增加宽度的值。现在我们来看,如果传入的是基类长方形,这个运行的很好。根据LSP,我们把基类替换成它的子类,结果应该也是一样的,但是因为正方形类的width和height会同时赋值,这个方法没有结束的时候,条件总是不满足,也就是说,替换成子类后,程序的行为发生了变化,它不满足LSP。
那么我们用第一种方案进行重构,我们构造一个抽象的四边形类,把长方形和正方形共同的行为放到这个四边形类里面,让长方形和正方形都是它的子类,问题就OK了。对于长方形和正方形,取width和height是它们共同的行为,但是给width和height赋值,两者行为不同,因此,这个抽象的四边形的类只有取值方法,没有赋值方法。上面的例子中那个方法只会适用于不同的子类,LSP也就不会被破坏。
在进行设计的时候,我们尽量从抽象类继承,而不是从具体类继承。如果从继承等级树来看,所有叶子节点应当是具体类,而所有的树枝节点应当是抽象类或者接口。当然这个只是一个一般性的指导原则,使用的时候还要具体情况具体分析。

  

爱华网本文地址 » http://www.413yy.cn/a/8103490103/117042.html

更多阅读

转载 美国历任总统简介(资料大全) 韩国历任总统

原文地址:美国历任总统简介(资料大全)作者: 大家好888美国历任总统简介(资料大全)01、喬治•华盛顿George Washington(任期:1789-1797)(第1、2屆)美國開國元勛,領導美國人民贏得獨立,制訂憲法,創建國家,擔任首任總統,公眾尊稱他為“國父”

皇室战争开传奇有多难 开西餐厅有多难?

  具体点就是要求对西餐有一定的认识。能够找到一名好的经验丰富的西餐厨师,担任主厨。还有前场是服务的核心,还是要找比较熟悉各种西方礼节和服务方面的领导型人才,最好还会选择酒类。(不过这一类的人才,报酬都是很高的)。还有就是你

情侣之间的情话200字 浪漫的话 情侣之间

1、我想将对你的感情 化作暖暖的阳光 期待那洒落的光明能温暖你的心房 。2、好笑吗? 身边没你 好怪 陪我一生一世好吗?3、自从你出现后,我才知道原来有人爱是那么的美好。4、不知什么时后开始 我已学会依赖。5、我想在五十年之后

dnf蓝拳pk加点 dnf蓝拳PK怎样加点

简单说说蓝拳PK加点 给新手参考dnf蓝拳PK怎样加点――步骤/方法dnf蓝拳PK怎样加点 1、1、翔拳和勾拳+10或更高,这里加到了15,可以有更多的时间准备技能和CD时间连招,大叔都能打得高高的 2、虎袭+13-15,这个是有争议的技能,有人说出强制就

声明:《c#里氏替换原则 里氏代换原则》为网友倥鯎丶唸舊仒分享!如侵犯到您的合法权益请联系我们删除