【Blog 3】深入软件构造

慢慢熟悉了软件构造的课堂,也逐渐熟悉了这样的上课模式和实验状态。又经过了近3周的学习,感觉难度开始加深,理解起来也更困难了。

五、设计规约

规约,字面意义上是一种规则、规范,也是一种约定。它对程序员内部实现进行了约束,也让用户明白方法是做什么的。这是我的个人理解,简单来讲,方法的规约=注释+方法名声明(方法体隐藏),方法名声明可被编译器检测。而判断两个方法的行为等价性应当站在客户端视角。

设计规约是一个必须要做的工作。尽量不要设计mutating method即输入参数改变的规约。规约强度的判断则是前置条件弱、后置条件强。一个好的规约应当是内聚的——单一、简单、易理解、足够强(在任何输入下都有明确的输出)、足够弱(前置条件不可过强,否则无法运行;或提供异常判断)、使用抽象类型。

六、抽象数据类型ADT

程序员自定义的数据类型,强调作用于数据上的操作

除了基本的可变不可变,有四个基本的指标:构造器(0->1)、生产器(1->1’)、观察器(1->a)以及变值器(1->一)。其中不可变数据类型一定不含变值器。

在设计ADT时,应简洁、一致,且能满足所有操作需要。

表示独立性应当能够实现使用时无需考虑内部实现。这就要求不能直接将引用返回。

本章的重难点是RI和AF,分别代表了表示不变性和抽象函数(R表示空间和A抽象空间之间的映射关系)。AF是满射、非单射而未必双射的。RI则可以看成所有表示值的一个子集,包含了所有合法的表示值。设计ADT时:(1)选择R和A(2)RI——合法的表示值(3)如何解释合法的表示值——映射AF(将RI和AF写出注释)

七、面向对象的编程OOP

基本概念在之前的课程和Java 基础中都已有所涉猎。这里引入了一个新的概念——接口。ADT的规约更倾向于使用接口来定义变量,接口方法不可返回。

继承与重写比较好理解。例如D继承了A,当我们执行A a=new D时,对于a有个口诀:属性看类型(A),方法看声明(D)。

多态也是一个很重要的概念,分为特殊多态(重载)、参数化多态和子类型多态。重载是一种静态多态,多个方法拥有同样的名字,但有不同的参数列表/返回值类型。参数化多态中泛型:

子类型多态则是指不同类型的对象可以统一处理而无需区分。子类型的规约不能弱化超类型的规约。Object方法中的equals、hashCode、toString常常需要重写。设计一个好的类总是immutable的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值