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

    一、本单元设计框架

    第一次作业

    本次作业,需要完成的任务为实现一个UML类图分析器 UmlInteraction ,学习目标为UML入门级的
    理解、UML类图的构成要素及其解析方法。

    首先在构造方法中按照处理好的输入内容解析UML类图,考虑到输入元素的顺序可能颠倒,使用我分三批次处理输入中的不同元素。为此我新建了Class和Interface两个类,管理类、接口两种UML元素和需要存储的各种信息。

    第二次作业

    本次作业实现了对UML类图、状态图和顺序图的解析,其中UML类图解析部分我几乎照搬了第十三次作业的内容,没有做太大改动,主要新增了对状态图和顺序图的解析,在上一次作业的基础上进行迭代开发。我新建了StateMachine类和State类,用于管理每个状态机及其涉及的状态和状态间的转移。新建了Interaction类管理每个顺序图模型和其中的参与对象、消息等等。

    第三次作业

    本次作业在前两次作业的基础上继续进行迭代开发,增加了对模型有效性的检查。总体上的设计框架不变,主要在类图和状态图中增加了一些属性和方法,在所有元素解析完毕后进行全部遍历检查,按要求输出对应的报错信息。

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

    这四个单元的学习,对我而言,是个循序渐进的过程。

    在第一单元中,我们作业要求是表达式求导,这也是我认为整个OO里面最难的一个单元。因为需要一个从面向过程变成向面向对象变成的一个思维的转变。由于是第一次接触到OO,本单元完成的不是很理想,架构的设计的思路也是从解决问题本身出发,没有考虑到迭代开发,导致每一次都经历了重构。对于类功能的单一性,类和类之间的协作,以及自顶向下的层级设计,在这一单元并没有很好的达到。

    在第二单元中,我们实现了多线程电梯调度,比较幸运的是,在这一单元,我没有经历过重构。在架构的设计上,为迭代开发做了准备,使用生产者-消费者模式,在单个电梯时要注意电梯接人送人的算法,多个电梯时还需要注意多个电梯之间的配合问题,避免发生死锁等问题。总体来说,可能上一个单元自己还是沉浸在面向过程的思维深渊中,这一单元大概更加体会到了什么是OOP,多思考,少重构才是正解。

    在第三单元中,我们完成了JML社交系统。本单元结构的迭代开发需求变动不大,都是在之前作业的基础上直接添加新的功能。唯一的坑点就在于,JML的存在,是帮助我们理解的,如果完全按照JML的要求来,重复性地进行遍历会导致复杂度爆炸然后超时爆零。通过这一单元我学会了面向对象编程规范化编程的方法,也懂得了其对于可扩展性十分重要。

    在第四单元中,我们实现了UML解析器。具体的设计思路在上一节中已经进行了介绍。这个单元的挑战是对于UML图的理解并将其与所给代码关联起来,需要自己设计容器和类去造图来存放需要的UML图的信息,在算法上的难度较小。

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

    在第一单元中,由于没有什么经验,我进行了大量的测试,甚至自己搭了自动评测机,但结果差强人意,主要是经验比较少,对于一些边缘数据考虑的较少,随机生成的数据大多较为简单不易查出错误。

    在第二单元中,测试的难度提高了不少,生成数据不能一次性投放了,需要根据随机生成的时间戳投放。但是当时我对于python包的使用并没有很到位,导致在测试中出现了一些困难,尝试使用放大时间10倍的方法进行测试,有一定的效果。

    在第三单元中,我学会了Junit单元测试,但是觉得比较鸡肋,除了边界情况以外的极端测试数据需要自己构造,实际效果并没有想象中的好。

    在第四单元中,主要是用了课程组下发的测试数据,自己测的稍微少一些,但是也取得了满意的结果。

    四、课程收获

    这一学期的OO课程,我收获了很多。首先是学习了面向对象的思维。之前一直使用面向过程的思维,虽然思路清晰,但是一旦遇到复杂的情况,往往很难指出不同部分之间的协作关系,思绪较为混乱。面向对象则是更加具有逻辑层次性的语言,本学期所学的层次化程序设计、多线程程序设计、规格化程序设计和模型化程序设计,对我以后的程序设计有着很大的帮助。其次,整个学期的OO作业锻炼了我的代码能力和测试能力,每周都有将近1k行代码的稳定输出,在经历四个单元得磨练后,写代码的效率和准确率都有了明显的提高。最后,BUG修复的机制让我意识到,并不是完成作业就大功告成,在修复的过程中往往会有些新的思路、新的方法,不断的思考才能使程序越来越好。

    五、三个具体改进建议

    1、希望可以有实验课的讲解,有几次实验真的挺难的

    2、指导书的作业要求可以写的再清楚一点,第三单元由于完全按照JML来导致两次没屋让我印象深刻

    3、研讨课的形式有些尴尬,因为两周一次的频率,如果想要分享作业实现的话会有些延迟,如果分享内容不限定,会导致有些研讨内容过于高深、有些内容没有什么讨论的价值。

    六、线上学习oo课程的体会

    我觉得本学期OO课程学习效果很好,甚至可能会比线下更好。腾讯课堂的视频可以反复观看,遇到问题及时看视频处理。同时隔着屏幕进行交流,也缓解了不小的尴尬。在作业上,由于整个学期都是线上学习,所以时间相对弹性,有完整的时间去完成作业。

    最后感谢老师和助教在着一个比较特殊的学期的辛勤付出和帮助,祝OO课程越来越好。

  • 相关阅读:
    【Python学习之旅】---模块介绍(re模块,正则表达式)
    【Python学习之旅】---模块介绍(sys模块)
    【Python学习之旅】---模块介绍(随机模块)
    【Python学习之旅】---模块介绍(时间模块)
    【Python学习之旅】---模块介绍(调用与执行)
    【Python学习之旅】---装饰器实现(高阶函数+函数嵌套+闭包,不修改函数调用方式和源代码)
    【Python学习之旅】---生成器的好处
    Educational Codeforces Round 61 (Rated for Div. 2) C
    牛客练习赛41 B. 666RPG
    牛客练习赛41 B. 666RPG
  • 原文地址:https://www.cnblogs.com/infinite7/p/13162200.html
Copyright © 2011-2022 走看看