哈工大软件构造-要点复习2

在对课件和实验进行总体复习后,针对其中的重难点以及此前忽视的点进行复习补充和描述

1.不可变的三个方面

        1.Immutability:不可变的类型,是指它的值在创建后永远不会改变。

        2.Immutable values: 不可变的值,通过final关键字使其可以在初始化时被分配一次,但永远不会被重新分配。

        3.Immutable references: 不可变的引用,通过final关键字对变量进行限制,这使得引用 
不可转让,但是引用所指向的对象是否可变不受影响。

2.是否可变对重写equals和hashcode方法的影响

        对于不可变类型,equals()比较抽象的值。这就等于说equals()应该提供行为上的平等,hashCode()应该将抽象值映射为一个整数,所以设计不可变类型时必须重写这两个方法。

        对于可变类型,equals()对引用进行比较,就像‘==’一样。 这与equals()应该提供行为上的平等是一样的。hashCode()应该将引用映射成一个整数。所以设计可变类型时不需要重写 equals() 和 hashCode() ,而应该简单地使用Object提供的默认实现。

        关于可变性和等价性:

        不可变类型都是行为等价性
        可变类型除了Collections是观察等价性,其它都是行为等价性,

3.LSP原则、逆变、协变

        基于LSP原则要满足如下限制:

        1.前置条件不能强化

        2.后置条件不能弱化

        3.不变量要保持

        4.子类型方法参数符合逆变

        5.子类型方法的返回值符合协变

        6.异常类型的改动符合协变

 逆变:父类到子类的过程中,返回值和异常的类型要不变或变得更抽象

 协变:父类到子类的过程中,返回值和异常的类型要不变或变得更具体

4.枚举的使用

        当值的集合较小且有限时,可以将所有值设为常量以枚举类结构保存,例如月份,颜色等,可以在后续直接生成类对象调用其中常量。

5.灵活运用继承和委派

        上图是实现各类设计模式继承和委派方式,其要点在于遵循CRP原则,尽量避免通过继承机制进行面向复用的设计,尽量通过CRP设计两棵继承树,通过delegation实现“事物”和“行为”的动态绑定,支撑灵活可变的复用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值