• 面向对象第四单元及课程总结


    前言

      第四单元的作业完成质量非常差,一个是因为天气逐渐变热,自己在电脑前坐着就不停的出汗,没办法集中时间去思考作业的设计,另一个是农村到了农忙的时候了,自己也下地帮忙拉化肥,麦收等。当然,这些不是借口,只是客观地陈述一下到了第四单元客观上我所面临的阻挠。所幸,第十三次作业错过之后,第十四次作业我抽出了四天的时间分别在早上和傍晚两三个小时写作业,终于算是勉强通过课下,也不至于整个单元一次有效作业也没有。以下是我针对这单元作业的小小的理解以及自己在分析UML的时候的技巧。

    第十四次作业

      第十三次和第十五次作业受不可抗力因素放弃。(我没想到有请假这种操作

      主要分析第十四次作业,当然也涵盖了第十三次作业,先上方法分析:

    由图中可以看出,除了实现借口定义的方法外,我还创造了许多自己的方法,主要是为了应对接口中定义的方法传入的参数为类名所导致的不确定性而创造出的依靠类ID来进行查找和搜索的手段。而且还将类检查单独作为一个方法来检查,返回类ID对应的UMLElement对象,这样会比较方便后续处理。

      接下来我就说一下自己在本单元作业的时候使用的一些小技巧,首先,根据PPT我们知道UML元素的parent字段和java的继承不一致,parent字段更多的是从属关系的体现,UMLClass下的UMLAttribute的parentId等于UJMLClass的Id,以此类推,所以很容易就能建立类似树的数据结构。所有的操作都在该树结构中执行。在没搞清楚从属关系的时候,可以在vscode中选定parentID,然后根据高亮查找源头。或者自己编写程序,让元素将自己的上一级元素输出,有助于建立关系网络。

      总体来说,这单元的作业难度不算很大,但是在数据处理上确实很麻烦,而且时常需要将name转化为id以避免重名单不同id导致的错误。到了第十五次作业的时候,又用到了上个单元学到的闭环关系等等,也算是一种综合吧。

    OO课程总结

    架构设计及OO方法理解的演进

      第一单元的时候理解的还不是特别深刻,没有理解老师所表述的一个类一个方法只管完成自己的工作,别的工作交给别的类实现。设计的时候总是跳进想一个类直接将求导转化和化简优化整合为一体的圈套,导致我每次作业好像都属于重构,尤其是第三次作业,记得连续写了三天,自己之前实现的类和方法只有极少数可以继承下来使用。到了第二单元稍微明白了一些架构上需要注意的功能分割,电梯,调度器,请求队列和输入输出都分开,但是没能好好处理多线程之间的数据交换保护,导致了玄学的BUG。到了第三单元,懵懂无知的我以为是JML单元,学习和理解入门级的JML规格,但是经过前两次作业后我才幡然醒悟,这原来是算法单元,根据正常的JML规格实现会导致时间超时,卷,都可以卷!第四单元就上面的可怜的总结。

      总体来讲,经过整个OO课程的锻炼,现在我在动手写代码之前都会先从抽象层次来划分出具体的模块,然后在模块下实现方法,存在共性的模块可以单独拎出来开一个接口,这样方便功能上的扩展,而且在出现问题的时候可以按照层次来排除。架构上设计的原则是抽象分离,各司其职。

    测试理解与实践的演进

      在前两个单元的时候,我的测试一般都是自己手写,针对代码中的比较复杂的方法来进行测试,求导单元则是将各个元素组合都进行尝试,但是仍然会有疏漏,比如说某个模块在第一次使用的时候可能没有问题,但是第二次使用的话,可能会有第一次执行产生的数据没有清空导致错误。那个时候觉得人工测试还是有限的,所以在第三单元的时候我采用了Junit测试的方法,但是,但是,实际使用起来效果也没有想象的那么香,实际上也和自己设计用例相差不多,只是自己能够知道自己在测试哪个模块,而且分开测试的话,就不会产生我上面所说的那种第一次第二次之间数据未清空所导致的错误。然并卵,第三单元的错误出的还是比较少的,主要在于算法的设计上,没有及时考虑到时间上面的优化。

      测试不管是在作业中还是未来参加工作中的工程测试都是至关重要的,学会系统的测试方法,熟练地使用Junit等自动测试工具会让自己在测试的时候多一份力量,会覆盖自己测试的时候没能考虑到的情况。我比较惭愧,到了第三单元才逐渐了解并使用单元测试的方法,如果前面也采用了单元测试的方法,那么可想BUG应该会减少不少。

    课程收获

      经过一整个学期的OO学习,我感觉除了掌握并且熟练使用java语言之外,更多的是一种面向对象的思想,我们在实际解决问题的时候一般会把问题分成几个部分,然后各个部分完成自己的工作,再通过数据连通起来就完成了。如果这种思想放在C语言中,就会是各种各样的函数,在java中就可以分成类来写,类之间相互调用,更加抽象,更加符合我们在实际思考问题的时候的思路。就拿第二单元的作业来说,如果将电梯放在C语言中,那么各种各样的函数罗列出来,有的是管理调度器的,有的是电梯的运行,有的负责输入输出,这样很容易导致数据管理上出问题,而且各个函数之间我们默认是属于不同的模块的,放在一个文件里面也会导致层次不分明,而且函数之间的关系也会容易错乱。java经过类的抽象,已经将问题划分为实际处理中的模块,既封装了数据和行为,而且加入接口和继承还便于管理和扩展。

    改进建议

    1、JML单元可以适当的将重心放在JML规格上面,虽然实验有顾及到,但是实际作业都卷起了算法,变味了

    2、第二单元第一次作业难度梯度较大,第一单元第三次作业难度也较大

    3、实验难度可以调整,在接受新内容一天时间就进行测试,许多时候工具链都没搞明白。

    线上OO学习体会

      本学期全程在家学习,我感觉比我在学校的学习效率要高不少,当然也可能是因为我课少,而且自己比较闲,除过最近农忙时间每次OO课程都会投入比较多的时间。线上学习的自由度很好,比较适合在家或者在宿舍学习,也用不到特别高的自制力。一般情况下,每单元的第一次作业能跟上,之后的作业大概率不会跟丢(大概) 。而且线上学习大家的讨论度会比较高,会给平时听课后半段注意力不集中的同学一个很好的选择。

  • 相关阅读:
    开源.NET FTP组件edtFTPnet 用法
    C#开发的较好的FTP类
    C# 配置文件读取与修改
    对于List的All,Any,Where,FirstOrDefault,Average,Sum,Distinct,Union,AddRange,RemoveRange,InsertRange,GetRange操作
    一次性打印多个C1FlexGrid
    Word自动生成目录页码靠右对齐
    Windows Workflow学习文档
    Windows Workflow开发演练
    Boo who
    Missing letters
  • 原文地址:https://www.cnblogs.com/xuwenguang/p/13162141.html
Copyright © 2020-2023  润新知