HIT SC lab2个人回顾

公元2022年5月29日,Csapp考试当天,我们的软构实验二迎来了他的ddl。作为与考试内容密切相关的一次实验,做一次小小的总结。

关于ADT与OOP

ADT和OOP是软构体系中重要的一环,之前也只是停留在了理论表面和一些简单的选择题,这次亲自上手实操也是体会到了一些容易出错的地方。首先就是AF,AF完成了从R空间向A空间的映射,A空间是客户看到的内容,因此要格外注意不能暴露表示。不过实际操作发现一不小心就暴露了,,,看了几个例子才知道怎么拐弯抹角。然后就是RI的问题。某次实验课上老师提到,其他类做的RI不要写到本类的RI里,然后进行一波自我改革,好家伙还真中招了,具体表现在:边图类引用了Edge类,Edge类已经规定了权值大于0,而边图类的定义中重复了,向老师确认后,确定边图中有关权值已有的限制可以不用再写。最后就是一个小细节,原来checkRep是private的,之前一直以为是public。

关于Java与idea

上一次lab只是对Java有了初步的认识,这一次就是对OOP基本机制继承的一次实操。去年上Java课的时候一直以为@override有没有都一样,然后在一次试验中hashCode函数名写错导致错误,在加上@override后解决。

重写本身并没有什么难度,不过equals以及hashCode的重写还是值得注意的,这俩得一起重写,因为集合都是利用哈希值实现的,Object的equals判定的是行为等价性,也就是引用等价,对于一些类这是不适用的。在完成对Lab1的朋友圈重新构造过程中,一开始Person类没有进行equals导致addVex方法出错,因此在Person中针对特定条件进行重写。

哦对看到instanceof又想起来一个东西。Instanceof和getClass有区别,instanceof判断的是是否为该类即该类的子类,而getClass则只是单纯判断是否为特定类。不过因为instanceof需要强制类型转换并且向下换型,有以下注意的地方:

1、instanceof只能用于对象的判断,不能用于基本类型的判断,以下代码会编译不通过

'A' instanceof Character

2、instanceof特有的规则:若左操作数是null,结果就直接返回false,不再运算右操作数是什么类

null instanceof String

3、instanceof操作符的左右操作数必须有继承或实现关系,否则编译会失败,以下代码编译不通过

new Data() instanceof String

4、注意泛型的情况

    class GenericClass<T>{

        public boolean isDataInstance(T t){

            return t instanceof Date;

        }

    }

    boolean a = new GenericClass<String>().isDataInstance("test");//false

//T是个String类型,与Date之间没有继承或实现关系,为什么''t instanceof Date''会编译通过呢?那是因为Java的泛型是为编码服务的,在编译成字节码时,T已经是Object类型了,传递的实参是String类型,也就是说T的表面类型是Object,实际类型是String,那''t instanceof Date''这句话就等价于''Object instance ofDate''了,所以返回false就很正常了。

Java语法方面其他倒是很简单。

覆盖率的测试

Idea测试覆盖率那是相当简单,只要在你要运行的test右键一下,使用覆盖率运行即可:

Eclipse则现需要安装eclemma,在商店中搜索下载即可,install完成后点击上方这个按钮即可,一般eclemma覆盖率比idea低:

Lab2值得书写的地方就这些吧,总体来讲等价类划分和Java使用都蛮简单的(思维上简单,写起来有点麻烦)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值