BUAA-OO第四单元博客总结

 

架构设计

本次单元的作业是对 UML 图进行解析,而我在本次作业利用了自顶向下的方式解析 UML 图,实现成树的形式。根据作业的需求,创建了自定义的类,例如 Class, Interface, Interaction 等,并把所需要的数据存储到该类中。

在解析元素方面利用层次化解析,分析各个 UML 元素的对应关系,然后再依次遍历搭建这个解析器。

容器使用方面主要还是利用了 HashMap ,主要利用 id 映射到该 UML 元素,若需要使用到名字再搭建一个 name 映射到 UML 的 id,然后考虑到还有重名情况则搭建多一个 List 存储多个同名的 UML 元素。

接着名字搜索方面,由于大部分的方法需要使用名字搜索一个 UML 元素 ,因此我将搜索的方法封装

例:

private String name2ClassId(String className)
   throws ClassNotFoundException, ClassDuplicatedException {
   if (!name2class.containsKey(className)) {
       throw new ClassNotFoundException(className);
  } else if (name2class.get(className).size() > 1) {
       throw new ClassDuplicatedException(className);
  }
   return name2class.get(className).get(0);
}

 

OO 方法理解的演进

OO 是一个以对象为概念进行编程的方法,一个对象当中包含数据、代码和方法。而第一单元完全体现了这个问题,让我们从普通的表达式计算,演变成求导所需要的表达式类、因子类和项类进行复杂的演算,并完成各个对象所要完成的任务,让我对 OO 有了最基本的理解。

第二单元利用了多线程,让我们实现对象与对象之间的交互与通信,也增加了作业的难度,但设计的自由度也更高。从多线程编程上能让我更理解对象中的交互安全问题。

第三单元用了 JML 编写规格,让我们能通过严谨的语言描述实现具体的方法的过程。由于 JML 并没有规定实现方式,只规定调用方法后的数据变化,令我们能使用各种实现方式编写程序,完成该方法应有的功能。

第四单元学习了 UML 模型,而作业是让我们解析 UML 模型。让我们能更深层理解 UML 层次化模型和架构。并构造类将 UML 元素进行组装和建模。

 

测试理解与实践

第一单元和第二单元都是依靠手动构造数据进行测试。

第三单元使用 python 编写了一个简单的对拍器进行对拍。

第四单元使用 starUml 和官方包 dump 出的数据进行测试。

在手动测试中,尽可能地构造边缘数据进行测试,让自己的程序能保证正确性。第三单元的数据构造较为简单,因此使用了对拍器进行对拍,能尽可能地将大部分的数据都测一遍,效果蛮好,强测互测都完美通过。

 

课程收获

这门课让我加深了面向对象的编程的概念、掌握了 Java 编程语言与应用和构造数据的技巧。

除此之外还让我了解了 git 的应用、脚本编写、评测机搭建等。

 

改进建议

  • 指导书

    • 各单元的指导书其实可以推荐一些与题目相关的算法,提供学生方向进行搜索并学习来应对作业,毕竟指导书不说学生不会写也会去查询资料,但如果连查资料的方向都没有可能就放弃了。

    • 第四单元的指导书希望能给予可能会使用的 Uml 元素以及方法描述能尽量再详细一些,考虑到第四单元会比较接近考期,面对题意不清的指导书会让学生理解成本更高,并且还得多次提问助教而影响到助教考期的复习。

  • 作业难度的跨度

    第一单元的第一次作业和第二次作业的难度跨度较高,也让我在第二次作业做得比较匆忙,最后也求救了几个大佬帮忙让我能勉强通过公测 强测分就低了很多

  • 实验课

    希望实验课能给予参考答案,好让学生看了答案后能知道自己未掌握的地方。

虽然这门课还有进步的空间,但这门课的体验其实还蛮不错的,就好像第一单元在作业上有了引导作用,而且助教人都超 nice 的 没有嫌弃我就好了 ,毕竟有时候上不了 OO 网站助教也会主动提出帮我代交还是非常体贴的,而且在互测当中还认识了新朋友 是的我又双叒叕被 hack 了 ,即使是线上授课,也不会影响我和同学之间的互动,希望接下来的网课都能像 OO 这样有趣 回去的消息还没来啊啊啊,我的 OO 就这样告一段落了。

 

posted @ 2021-06-22 12:59  alvin6012  阅读(101)  评论(0)    收藏  举报