软件构造期末复习4.2

软件构造期末复习4.2 面向复用的软件构造技术

※利斯科夫替换原则(LSP):

子类型多态:客户端可用统一的方式处理不同类型的对象。
b继承了a,b就是a的子类型,任何一个b都是a,a能做的事情b也能做。

  • 子类型可以增加方法,但不能删除方法
  • 子类型需要实现抽象类型中的所有未实现方法
  • 子类型中重写的方法必须有相同或子类型的返回值
  • 子类型中重写的方法必须使用同样类型的参数
  • 子类型中重写的方法不能抛出额外的异常
  • 子类型需要更强的不变量、更弱的前置条件、更强的后置条件
    前五条可被JAVA编译器检测出来,最后一条不行

子类型前置条件不能强化;
后置条件不能弱化;
不变量要保持;
子类型方法参数:逆变;
子类型方法的返回值:协变;
异常类型:协变;

Co-variance(协变):

子类重写方法后的返回值类型要比父类中提供方法的返回值类型更确切;
子类抛出的异常也要比父类抛出的异常更确切(或子类不抛出异常);

Contra-variance(反协变、逆变):

子类型中提供的操作要比父类型提供的操作更强(有些参数父类型接收不了,但子类型可以接收)
JAVA并不支持反协变,编译器会报错,会被认为overload而不是override

定义泛型数组会在编译阶段就报错

如果子类只需要复用父类中的一小部分方法,可以不需要继承,而是通过委派机制来实现;
一个类不需要继承另一个类方法,可以通过委托机制调用部分方法,从而避免大量无用的方法。

CRP原则:

“委托”发生在object层面,“继承”发生在class层面

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值