加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

里氏代换原则(LSP)

发布时间:2020-12-14 05:42:28 所属栏目:百科 来源:网络整理
导读:里氏代换原则定义: 一个软件实体使用的是一个基类的话,那么一定适用于其子类,这个软件实体察觉不出基类和子类对象的区别。 ? 第一个辩证题目 :正方形是否是长方形的子类? 答案:不是。 既然正方形也属于长方形的一种特殊形式,满足IS关系,为什么不能是

里氏代换原则定义: 一个软件实体使用的是一个基类的话,那么一定适用于其子类,这个软件实体察觉不出基类和子类对象的区别。

?

第一个辩证题目:正方形是否是长方形的子类? 答案:不是。

既然正方形也属于长方形的一种特殊形式,满足IS关系,为什么不能是其子类呢?

答:如果我们作成派生关系,为了满足正方形的长、宽相等,当调用正方形的setWidth(),或者setLength()时,必须将同时修改width和length。

但作为软件实体他并不知道这些,如果它有下面类似的函数,参数实例如果是长方形没有问题,但如果换成了子类(正方形)后,这个函数将会陷入死循环。死循环的原因是因为在修改宽度的时候同时修改了长度。。

void AdujstWidth(Rectangle r)
{
    while(r.getWidth() <= r.getLength())
    {
        r.setWidth(r.getWidth() + 1);
    }
}

这样就就违背了里氏代换原则的原则。所以不应该将正方形定义为长方形的子类。

?

?

第二个辩证题目:经理、雇员、学生、老师是不是人的子类? 答案:不是

虽然说经理是人,雇员、学生和老师也是人。

但如果建立这种派生关系后,子类实例化后,人的身份就确认了(特定形态)。

要不是经理,要么是雇员,要么是学生、要么是老师。

但这明显不合符逻辑,因为一个人是经理的同时也可能同时是雇员、学生或老师。

所以这些类应该派生于职业,而不是派生于人。

同样,软件实体操作的对象应该是职业,而不是人。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读