下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年甘肃省庆阳市广播电视台(融媒体中心)人员招聘考试备考试题及答案解析
- 2026年辽宁省沈阳市广播电视台(融媒体中心)人员招聘考试备考试题及答案解析
- 2026年成都市成华区广播电视台(融媒体中心)人员招聘笔试备考试题及答案解析
- 2026年北京市西城区林业系统人员招聘笔试模拟试题及答案解析
- 2026年广东省惠州市林业系统人员招聘考试参考试题及答案解析
- 2026年淮安市清浦区林业系统人员招聘笔试模拟试题及答案解析
- 2026年吉林省白城市林业系统人员招聘考试参考试题及答案解析
- 2026年临沂市河东区林业系统人员招聘考试模拟试题及答案解析
- 2026年专科电工技术综合检测提分含答案详解(综合卷)
- 2026年鹤岗市兴安区广播电视台(融媒体中心)人员招聘笔试参考试题及答案解析
- 2025年广东省考考试笔试试题(含答案)
- 苏州2025年江苏苏州市相城区卫健系统招聘备案制工作人员133人笔试历年参考题库附带答案详解
- 2025年及未来5年中国RTP管行业市场供需格局及行业前景展望报告
- 智慧树知道网课《企业法务概论》课后章节测试满分答案
- 2024秋九年级化学上册 4.3 水的组成说课稿 (新版)新人教版
- 绿化保洁安全培训课件
- 疑难病例讨论制度
- 人工流产并发症
- 2025年四川省广安市中考物理试题(原卷版)
- 2025年安徽省高考化学试卷真题(含答案详解)
- 设备安装、调试、验收管理制度
评论
0/150
提交评论