Behavioral subtyping & Liskov Substitution Priciple(LSP)

1、Barbara Liskov简介

        Barbara Liskov (1939- ),美国第一位计算机科学方向的女博士,2008年图灵奖获得者。

        她提出了第一个支持数据抽象的面向对象编程语言CLU,对现代主流语言如C++/Java/Python /Ruby/C#都有深远的影响。她所提炼出来的数据抽象思想,成为软件工程的重要精髓之一。

        她提出的“Liskov替换原则”,是面向对象最重要的几大原则(SOLID)之一。

2、Behavioral subtyping

        Java中编译器依据强制的规则进行静态类型检查。

        (1)子类型可以增加方法,但是不能删去方法;

        (2)子类型需要实现抽象类型(接口、抽象类)所有未实现的方法;

        (3)子类型中重写的方法必须拥有相同的或子类型的返回值,或者符合co-variant的参数;

        (4)子类中重写的方法必须使用同样类型的参数或者符合contra-variant的参数(此种情况Java目前按照重载overload处理);

        (5)子类型中重写的方法不能抛出额外的异常;

        同样也适用于指定的行为(方法):

        (1)更强的不变量;

        (2)更弱的前置条件;

        (3)更强的后置条件;

3、Liskov Substitution Principle(LSP)

        LSP是一种特殊的子类型关系的定义,称为(强)行为子类型。

        在编程语言中,LSP依赖于以下限制:

        (1)前置条件不能强化;

        (2)后置条件不能弱化;

        (3)不变量要保持;

        (4)子类型方法参数:逆变(指从父类型到子类型越来越具体,参数类型要相反地变化,即不变或者越来越抽象);

        (5)子类型方法的返回值:协变(指从父类型到子类型越来越具体,返回值类型要相同地变化,即不变或越变越具体);

        (6)异常类型:协变(指从父类型到子类型越来越具体,异常的类型要相同地变化,即不变或越变越具体)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值