00:00
你是替换原则。那理斯替换原则呢?他跟我们这一个继承是有很密切的关系,其实他是在告诉我们继承需要注意什么问题和要遵守什么规则。那我们在进行这个oo编程的时候呢,我们。肯定会用到继承。这是。大家伙经常去用的,但是继承其实也带来带来了一些弊端,我们来思考一下这个问题,好吧,继承它其实包含了这样一个含义的,什么含义呢?就是说如果我们这个负类中,凡是已经实现好的方法,实际上它是在设定一种规范和一种契约,比如说我们有个A类。OK,那这个A类里面呢,我们有一个方法一,比如说M1。或者是M2这个方法,如果M1和M2这个方法它已经实现了。他已经是实现的方法,其实它实际上它是设定了一种规范和契约。
01:04
他干什么呢?他虽然不强制要求所有的子类必须遵守这些契约,比如说,他并没有要求你的子类不能去重写它。他没有这样要求。但是大家也知道,虽然他没有要求,但是如果此类对这些已经实现的方法进行任意的修改,就可能会对对我们整个这个继承体系造成破坏,是这样子的吧?所以说我们这个继承在给我们程序带来便利的时候呢,也带来带来了一些弊端,哪些弊端呢,我们来看到,比如使用继承会给程序带来。这一个侵入性,什么叫侵入性呢?就说程序的可一致性会下降。它增加了对象间的耦合关系。你打个比方吧,比如说A类。B类,我B继承了这个A,那如果A类的变变化就。
02:03
A一旦变化了,就可能影响到B,如果这个C也继承了A,同样A类的变化就有可能影响到C,也就是说A变化就会把它所有的子类都有可能有影响。这个我们就叫做对象间的耦合性,就是后面我们说的,如果一个类被其他类所继承,当这个类需要修改的时候,必须考虑所有的子类。并且负类修改后,所有涉及到此类功能都有可能产生一些故障。对吧,所以说。我们就提出一个原则,什么原则呢?在编程中如何正确的使用继承呢?就要满足尽量的去遵守理事替换原则,那理事替换原则到底是一个怎样的原则呢?我们来看一下就可以了。你是替换原则,他是一个姓李的一个女士,是麻省理工的。他在八八年提出的一个这么一个原则,他这个原则大致是这样子,一个规定说假设有一个类型为T1的,类型为T1的对象O1,都有类型为T2的对象O2,使得T1定义的所有程序P中所有的。
03:15
对象O1都替换成O2,过后呢,我们这个程序没有发生变化。当然他这个是一个理想性的啊,它是一个理想的一种原则。那么他这句话的核心思想。是要说明一句什么话呢?就说我们引用鸡肋的地方,必须能够透明的使用其指类的对象。就是说我们引用鸡类的地方,可以透明的使用其子类的对象,这个就满足我们理事替换的原则。那在我们使用继承的时候呢,遵循理事替换原则,其实你要达到这个原则。尽量的要求不要重写复联,原因为你能够透明的使用,假设你你这个子类修改了负类的方法,你还能透明吗?
04:05
你显然没法透明,你用负类的方法和用子类方法都不一样,他怎么可能达到透明呢?是不是这样子的,所以说他的要求说我们子类中尽量不要去重写父类的方法。你重写你你你你,比如说我们再举一个很极端的例子,大家就能很好的理解这个理事替换原则,比如说我有个A类,比如说有个A类,这个A类里面呢,我有M1这个方法,有M2这个方法,有MN这个方法,我有这么多方法,结果你来了一个B类。这个B类继承的A类,然后你这个B类里面呢,把它所有方法都重写了。请问,当然我这个说的是很极端的啊。我说的是很极端,那你继承他干啥?那不有病吗?对不对,你把人家继承了,然后你把所有方法重写了,那就没有意义。那当然也不可能做到透明了,因为两个方法都完全不一样,你调负类的方法和调子类方法完全都不是一回事了,那肯定就不能做做到透明的使用,因此你是替换原则呢,其实他是在强调,我们如果在进行这个继承的时候,尽量不要去重写负类的方法,除非迫不得已,如果你迫不得已要去重写好,他就提出一个观点干什么呢?那你就不要让这个A类去继承这个B类,你可以通过什么呢?你。
05:22
你可以通过像这种聚合组合以来的关系来解决这个问题,或者怎么样呢?你可以让把这个B类往上提升,让这个B类和A类去。共同去继承一个更加基础的类,就是说让A类去继承一个更加基础的类,让B类去继承一个更加基础的类,让B和A之间呢关系它的耦合性降低。而把它们更加普通的方法拎到一个更加基础的方基基础的类里面去,这样就导致B类无需去重写A类的方法。理解我在说什么吗?
06:03
就这个意思,所以说他这告诉我们,李斯蒂万告诉我们,继承实际上是让两个类的耦合性增强了,在适当的情况下,我们可以通过聚合、组合、依赖来解决这个问题。那什么叫聚合,什么叫组合,什么叫依赖,后面我们还会说,或者就是按我刚才说的这个方案。什么方案呢?就是你不要让这个B去继承这个A了。你做一个更加基础的类,这个类可能是个抽象类啊,当然也可以可以是一个非抽象类,你把A类里面,A类里面基础的部分拎到这上面去,把B类,让B类去继承这个贝斯这个类。因为这个贝斯里面是最基础的方法,那是不需要重写的,然后让B去继承这个被试,让A也去继承这个贝斯。这个类。那这样子呢,我们就让B和A之间的这个耦合性降低。那你B类就不用再去重写A类的方法了,是这意思吧,那你你就写你自己的。
07:03
这就符合我们理事替换原则。好,那这样讲完过呢,同学们可能对历史替换原则还是不是很了解,下面呢,我们举一个实际的案例,再让大家理解一下何为李斯替换原则,好,待会儿呢,我们看一下这个案例。
我来说两句