C#面向对象设计原则之里氏替换原则_第1页
C#面向对象设计原则之里氏替换原则_第2页
C#面向对象设计原则之里氏替换原则_第3页
C#面向对象设计原则之里氏替换原则_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C#面向对象设计原则之里氏替换原则里氏替换原则(LSP)

定义:在任何父类出现的地方都可以用它的子类类替换,且不影响功能。

解释说明:

其实LSP是对开闭原则的一个扩展,在OO思想中,我们知道对象是由一系列的状态和行为组成的,里氏替换原则说的就是在一个继承体系中,对象应该具有共同的外在特性,使用LSP时,如果想让我们的程序达到一个父类出现的地方都可以用它的子类来替换且不影响功能,那么这个父类也应该尽量声明出子类所需要的一些公共的方法,父类被子类替换之后,会比较顺利,那么为什么说它是对开闭原则的一个扩展呢?因为我们在开闭原则中说尽量使用接口和抽象类,当然这个抽象类和接口也应该尽量定义得完整,这样我们这个接口和抽象类会比较稳定,这样既符合了开闭原则也满足了里氏替换原则。

错误案例1:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespace里氏替换原则

///summary

///鸟类

////summary

publicclassBird

///summary

///吃的方法

////summary

publicvoidEat()

///summary

///飞的方法

////summary

publicvoidFly()

///summary

///定义一个企鹅类继承鸟类

////summary

publicclassPenguin:Bird

publicclassTest

publicstaticvoidShowFly(Birdbird)

bird.Fly();

publicstaticvoidMain()

ShowFly(newPenguin());

}

解释说明:

在上面的代码中,定义了一个鸟类,企鹅类继承自鸟类。鸟类里面有飞的方法,而企鹅不会飞,所以上面的代码违反了里氏替换原则。

错误案例2:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

namespace里氏替换原则

///summary

///定义一个父类宠物类

////summary

publicclassPet

///summary

///定义一个企鹅类继承自宠物类

////summary

publicclassPenguinDemo:Pet

///summary

///游泳的方法

////summary

publicvoidSwiming()

Console.WriteLine("可爱企鹅在游泳");

///summary

///定义一个海豚类继承自宠物类

////summary

publicclassDolphin:Pet

///summary

///玩游戏的方法

////summary

publicvoidPlayGame()

Console.WriteLine("神奇泡泡打砖块");

///summary

///测试类

////summary

publicclassTest

publicstaticvoidShowPlay(Petpet)

if(petisPenguinDemo)

//类型转换

PenguinDemopen=(PenguinDemo)pet;

pen.Swiming();

if(petisDolphin)

//类型转换

Dolphindol=(Dolphin)pet;

dol.PlayGame();

}

解释说明:

如果把河豚、企鹅当做宠物,我们可以定义一个宠物类,然后,让这些宠物继承这个类,我们知道每种宠物我们跟他玩耍的方式是不一样的。比如。企鹅有游泳的方法,河豚有游戏的方法,根据这个需求,我们设计一个系统,编写一个宠物类,让企鹅继承这个宠物类,在企鹅类里创建一个游泳的方法,这个方法不能放到宠物类里面,因为并不是所有宠物都会游泳。编写河豚类时,同样让他继承宠物类,在河豚类里面编写一个游戏的方法,这个时候客户端程序在使用宠物类和它的子类的时候,就需要做判断,具体是哪个子类,我们通过宠物类是无法调用具体的方法,要做一个判断和转型,如果在加一个狗类,狗类也会有一个独立的方法,要修改之前的代码(使用宠物类和它的子类的时候,要增加判断是狗类),这很明显不符合开闭原则,也不可能符合里氏替换原则,因为这里面的任何一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论