UML-第四单元总结

BUAA_OO 第四单元

一、分析三次作业架构设计

第一次

  • 第一次作业主要是新建了了MyClassMyInterfaceMyOperation,并且考虑到MyClassMyInterface有一些共同的属性,故新建了MyElement接口

  • 第四单元的第一次作业一开始的时候还不知道该如何下手,反复看指导书并询问同学后才搞明白要干些什么。。。

  • 这次只涉及到类图的查询,MyClass里包括类的各种属性、操作以及它的子类、父类、实现的接口,MyInterface中包括接口的属性、操作以及子接口、父接口、实现的类,MyOperation里包括参数以及referenceType相关的一些内容

  • 课下测试中在判断两个ArrayList相等是老出错,其实这个问题我在第一单元就遇到过,但是时间太久远了,忘了怎么判断了,所以花了很长时间,在这里我分享一个泛型的比较方法

  • public <T extends Comparable<T>> boolean isEquals(List<T> list1, List<T> list2) {
            if (list1 == null && list2 == null) {
                return true;
            }
            //Only one of them is null
            else if (list1 == null || list2 == null) {
                return false;
            }
            else if (list1.size() != list2.size()) {
                return false;
            }
    
            //copying to avoid rearranging original lists
            ArrayList<T> list3 = new ArrayList<>(list1);
            ArrayList<T> list4 = new ArrayList<>(list2);
    
            Collections.sort(list3);
            Collections.sort(list4);
    
            return list3.equals(list4);
        }
    

image

第二次作业

  • 这次作业新增了顺序图以及状态图的内容
  • 这次我将解析部分单独列了一个类出来,当然很大一部分还是因为checkstyle。。。
  • 课下bug出现的原因主要还是关键状态的判断,花了一段时间去理解

image

第三次作业

  • 这次作业是要检验UML图是否符合规范
  • 我的bug主要在于R009的理解上,我居然是当两个Transition的所有的eventname都相同时才进行判断是否合法,应该是当两个Transition有一个event相同时就进行判断

image

二、总结自己在四个单元中架构设计思维及OO方法理解的演进

第一单元

  • 第一单元是表达式化简,每次做的的表达式都更加复杂
  • 这一单元我是采用的递归下降解析的方法,这个思路的来源还是第一次上机实验代码
  • 一开始接触面向对象,其实一开始是毫无头绪的,这一单元做得比较焦急,重复地修改架构,并且有些bug难以发现
  • 相比于pre时,对于OOP有了进一步的理解

第二单元

  • 这一单元是多线程编程,是我认为最痛苦地一单元
  • 多线程编程一开始从未接触过,所以做起来很痛苦,又由于对look策略不理解,所以导致了很多的bug,十分惨重
  • 架构的话用到的是流水线架构以及生产者-消费者模型
  • 熟悉了多线程编程

第三单元

  • 这一单元是JML规格化设计
  • 要实现的是模拟一个社交网络,并可以进行发信息、建群等
  • 留给我们实现的比较少,基本就是按着JML实现即可,需要主义的就是性能方面的问题
  • 理解规格化设计的重要性

第四单元

  • 这一单元是UML
  • 主要就是对UML中的元素进行解析,并且支持所要求的指令查询
  • 这一单元最需要注意的就是checkstyle

三、总结自己在四个单元中测试理解与实践的演进

第一单元

  • 主要是自己构造不同的样例,边界数据检验,并与小伙伴对拍,发现了很多bug

第二单元

  • 尝试使用评测机构造样例对拍,发现了一些轮询、死锁等bug
  • 深刻体会到了测试的重要性,并且认识到测试是验证程序正确性的重要环节

第三单元

  • 使用评测机构造样例对拍,发现了一些JML阅读不仔细的bug
  • 使用Junit进行覆盖性测试

第四单元

  • 使用评测机构造样例对拍,发现了很多bug
  • 掌握更多的测试工具链,对于之后的工作很有帮助

四、总结自己的课程收获

  • 代码风格方面,相比于之前的代码,现在的代码更加易于理解和修改
  • 知识方面,掌握了java语法,流水线架构、生产者-消费者模型、主从架构等多线程架构以及一些单例模式、工程模式等,以及对于日后的工作很有帮助
  • 在作业实现以及测试过程中,体会到了迭代开发、结对编程的好处,对于开发、自动化测试的环节更加理解

五、立足于自己的体会给课程提三个具体的改进建议

  • pre中适当引进一下多线程的知识
  • 稍微增加一下中测的难度φ(* ̄0 ̄)ψ(`∇´)ψ
  • 对于第三单元可以稍微缩短一下课时
posted @ 2022-06-29 13:25  theSerein  阅读(22)  评论(0编辑  收藏  举报