zoukankan      html  css  js  c++  java
  • OO第四单元总结

    架构设计

    第一次作业

    第一次作业只涉及到了UML的类图。

    对于每个元素的类型我并没有做出详细的区分,核心在于根据其id的唯一性用map来存储id到各种信息的映射。对于两个元素之间的关系,我存储了它的父亲的id以及它所有儿子的id。

    这样对于所有的询问都能很轻松的解决只要处理好对类型的判断即可。

    第二次作业

    第二次作业增加了状态图与顺序图以及模型的有效性检查。

    我选择将第一次的代码实例化然后在新的代码中实现新增的需求。

    这一部分的架构大致思想和第一次一样,稍微麻烦一点的需求也就模型的有效性检查部分。其他的只要理解了整个图的结构很简单。

    而有效性检查主要是UML008和UML009。

    UML008需要输出所有在环上的点但是并不需要确定每个点在哪个环上,所以对于每个点,只需要找到一个点满足这两个点能互相到达那么这个点一定在答案集合里且在答案集合里的点都满足这个条件。需要注意的是自己继承自己这个情况需要特殊判断。

    因为有效性检查是按照顺序进行的,在检查UML009的时候图中已经没有循环继承的情况出现了,所以从每个点开始对图进行一次遍历即可,如果走到了已经走过的点说明起点出现了重复继承。

    总结

    我认为在写的时候把每个类型区别开,然后各种操作在各种类的内部进行是一个比较好的OO架构。

    但是我在写的过程中选择了一个类莽到底。第二次作业在把第一次作业实例化以后继续一个类莽到了底,所以也就不放类图了 _(xз」∠)_。因为从完成作业的角度来讲我选择了一个综合起来比较省事的方法。

    四个单元中架构设计及OO方法理解的演进

    第一单元的是整个OO的难度巅峰,从第一次作业面向过程莽到底到后来OO的不算太困难得完成第三次作业,把因子,表达式等都抽象了出来,通过他们的互相交流完成了对一个复杂多项式求导,我也是体会到了OO的诸多好处,比如低耦合也意味着可以对各个单元进行单元测试,这样比测试一整个程序要简单很多。

    第二单元大概是我用OO写的代码的巅峰,这也是第一次接触到多线程,三次作业每次都只需要稍加修改,体验很不错,除了最后一次作业ctle翻车。

    总的来说感觉自己前两个单元的写法是比较OO的,虽然到后来对面向对象的思想理解越来越深刻但是写法却比较面向过程,可能是因为后面的难度偏低而且没有太多的时间来完成作业。

    第三次作业和第四次作业主要都是通过完成一些任务来让我们理解JML和UML。而且课程组提供了现成的接口设计,让我们的重心放在了方法的实现上。

    四个单元中测试理解与实践的演进

    其实每次的测试不过都是自己生成数据再进行正确性检查。

    先说后两个单元,主要麻烦在数据生成上面,不过这一点在某位最佳狼人奖获得者的帮助下搞定了。因为第三单元提供了JML代码,也可以自己进行单元测试。

    至于前两个单元,主要麻烦在于正确性检查上,不过在评论区诸多大佬的帮助下也算是能解决问题。数据大量随机即可再配合一点自己的手构数据。这两个单元尤其是第一单元在写代码前其实就应该手动构造一些数据,这样在写的过程中有这些数据的帮助也能让自己的程序出错率更低。

    总结自己的课程收获

    一学期的OO就这么结束了,我觉得我最大的收获是OO的思想,理解了架构的重要性,它为我的编程提供了一种全新的思路。其次便是对java这门语言的熟悉。这样打比赛的时候有高精度就可以直接上Java了。

    课程改进建议

    1.上午上完理论下午就实践感觉时间有些紧迫,个人认为可以交换实验课与研讨课。

    2.强测的同质bug,有些同学可能一个错误导致强测错多个点,修复后可以考虑减少扣分。

    3.课程组需要保证自身的权威性,助教不宜在水群内讨论过多,尽量通过讨论区,而且做出的决定没有特殊情况不宜轻易更改。比如第一单元最后一次作业不应该因为完成的同学太少这个理由而延时,这样不仅损失了课程的权威性而且不保证以后有人完不成会旧事重提以此为借口要求延时。以及该次作业的指导书上对互测的要求讲得很清楚但是最后互测开放的时候根据老师的意思突然不允许提交"Wrong Format"的数据。

    4.建议开放一个如同uoj一样的在线测试窗口,因为本地的环境和评测机的环境难免有差异,还有就是我在本地没有找到CPU time的测试方法导致第二单元最后一次的作业的翻车。

    5.抱枕上面的时间还是OO2018,不知道是直接拿的去年的抱枕还是今年没有换图。

    最后,这一学期的OO体验还是很不错的,很感谢课程组做出的努力,也祝OO越来越好。

  • 相关阅读:
    非阻塞式线程安全列表-ConcurrentLinkedDeque
    计数器
    Linux 查看服务器内存使用情况
    Oracle to_date, to_timestamp
    Hibernate session.flush() 使用
    阿里规约认证(题库附答案)
    多态性
    Java数据类型
    String类特点分析
    数组的定义
  • 原文地址:https://www.cnblogs.com/MountVoom/p/11073368.html
Copyright © 2011-2022 走看看