• 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课程越来越好。

  • 相关阅读:
    流处理 —— Spark Streaming中的Window操作
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.8 提供带注解的限定符元数据
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.7 为自动检测组件提供作用域
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.6 给自动检测组件命名
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.5 在组件中定义bean的元数据
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.4 使用过滤器自定义扫描
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.3 自动检测类和注册bean的定义
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.2 元注解
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.1 @Component和深层的构造型注解
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10 类路径扫描和被管理的组件
  • 原文地址:https://www.cnblogs.com/infinite7/p/13162200.html
Copyright © 2020-2023  润新知