第四单元oo作业总结 + 课程总结

第四单元oo作业总结

  陪伴了自己一学期的oo课程也终于迎来了结束,在这里进行这一学期的总结和反思。

一、第四单元作业总结

  这一单元总共有两次作业,但这两次作业的完成对于我来说都并不容易,总结反思来看,主要是一开始对于作业需求分析不明确,架构设计不合理导致的。

  第一次作业是对于类图进行解析,这一次作业中我的解析架构并不合理,每一层架构的功能区分不明确,比如对于类、类的属性和类的方法三个问题,更加良好的架构是每一个类对应自己的属性以及操纵方法,但是在第一次作业中对他们的方法的功能区分不明确,十分混乱,所以虽然最终完成了作业需求,但是给下一次的作业带来了很大的困难和问题。

  第二次作业中加入了对于状态图和顺序图的解析,以及对于类图的检查。对于顺序图和状态图的解析,我吸取上次作业的经验,设计了更加清晰的架构,比如对于顺序图,对于顺序图的”画布“建立对象,对于画布上的生命线建立对象,下面图中只截取了这两个操作类的图。

  总结来看,两次作业的架构设计基本是一致的,类图,状态图,顺序图。下面是对于我的代码的整体思路的更形象化的简单的表示。

  下图是整体的uml类图

  在对于类图整体的分析之后也可以发现,每一个类的操作都是比较复杂的,自己的设计对于输入的处理过程是十分冗长繁杂的,甚至导致函数超过了五百行,只能重新建立新的类来处理,对于这个地方的处理并不好。

  发现的bug:

  在第二次作业中被发现了一个bug:是由于顺序图传递消息,有可能是向endpoint传递消息,但是这里课下 对于顺序图的理解不到位,没有考虑这种情况,导致报了nullpoint的异常。

二、oo课程总结

第一单元总结

  第一单元是,是个人认为最难的一个单元,但也是学习java语言的思想最快的一个单元。但可能主要是对于java语言的不熟悉和面向对象思维没有及时转变,导致第一单元第三次作业的完成是十分艰难的,几乎没有设计架构可言,基本上是面向过程的思想分解开编写代码,也同时出现了很多的bug。在完成作业以后,认真学习了给出的优秀样例,感觉对于面向对象的思想有了更加深入的理解。所以,动手写代码一定是学习一门语言最重要的方式。

第二单元总结

  第二单元是基于电梯问题的多线程的应用,在这一单元中,主要是对于多线程思想的理解,不再是之前简单的单线程运行,而是多个道路同时运行,运行结果难以复现,所以给debug的过程带来很大的难题。在多线程运行的过程中,十分重要的是对于多个线程共享数据的处理,在这三次作业中我主要采用了wait-notify机制,对于共享数据加锁来保护共享数据的方式,保证只有一个线程操作共享数据,从而保证正确性。

第三单元总结

  第三单元是基于对jml语言学习和应用的数据结构还债课,主要考察jml语言的理解,从简单的路径保存容器到地铁图的构建,每次作业逐步深入,正确理解jml语言并寻找合适的数据结构和算法,对这一单元的作业十分重要,由于提前的思考比较完备,所以这一单元的作业完成的还算是比较顺利,没有遇到过多的障碍。除此之外,另一个学习到的重要的操作是jmlunit自动化生成测试用例和junit生成测试框架,生成自动化测试是十分完备的,保证我们难以测试到的边界数据和特殊测试数据,对于代码编写很重要。

第四单元总结

  第四单元是对于uml图的解析,将uml图解析为文本,再从文本中提取并且整合相应的信息,其实整体难度并不大,但是十分繁琐,代码量比较大,如果没有清晰的思路和良好的架构,是十分容易写崩溃的(这在我第二次作业继承第一次作业时候有深深的体会,甚至不知道自己之前写的是什么东西:),所以我也认为,这是很好的考察设计架构能力的一次作业,清晰的架构会让这次作业的难题迎刃而解。

三、oo课程测试

  在oo课程学习的过程中,写代码和测试都是同样重要的一部分,测试代码可以帮助我们发现程序中隐藏的bug。

  在测试过程中,测试方法也在逐渐的改进和自动化,由一开始简单的手动输出,眼动对比的方法,到采用命令行的方式运行输出对比结果,到第三单元学习的junit和jmlunit,自动化生成测试用例,对比结果。测试的方法在不断的改进,测试效果也更加明显。自动化测试的优势非常明显,首先是数据的完备性,包括了边界数据和特殊数据,这可能是我们自己在编写测试样例中难以考虑到的,而我们自己编写测试用例也十分容易被自己编写代码的思路所诱导,导致难以发现漏洞,测试样例的覆盖率扩大;其次是数据集增大,编写好测试代码,可以直接生成大量的测试数据,让测试的效率大大提高。

四、课程收获

  不得不说,这一学期在oo和os的陪伴下是十分充实的,在这充实的每一周之后,现在回头看看,我也感受到了自己的水平已经得到了很大提升,设计架构和编写代码的能力都提高了。 

  1.编写代码的能力,层次设计和架构的能力,由面向过程的思维更多的转化到面向对象的思维,将问题分块化处理,在一周内完成将近千行的代码的工作量,这是在课程开始之前难以想象的。

  2.对于java语言面向对象的理解,个人认为,在最后一单元的作业中就很好的考察了我们设计架构的能力和面向对象的思维,而在这一学期的训练之后,我也可以游刃有余的在编写代码前设计好所应用的架构。

  3.代码测试的设计,之前我对于代码测试的重视程度并不够,也没有很好的测试方法,这一学期中,在很多大佬的指导下,我学习到了很多设计测试的方式,编写测试代码,命令行测试运行,自动生成测试数据和测试框架。在应用中也逐渐的熟练。

  4.编写代码的规范, checkstyle可以说是一个让人又爱又恨的东西,他很好的帮助我们规范了自己的代码风格。

五、建议

  oo课程的大幅改动,给了我们更加良好的oo之旅体验,也再一次感谢为我们的oo课程奉献了很多的老师和助教,让这门课不再因为某一个环节而饱受诟病,形成了更加良好的课程体系,带了了更好的课程体验,也让我们学到了很多东西,以下是我在学习的过程中想提出的几点建议,希望能让我们的oo课程变得越来越好:

  1.首先是实验课程设置的问题,上午讲,下午做,对于我们而言几乎没有消化吸收的时间,下午实验上机的时候也很难达到应有的练习学习的效果。

  2.对于难度较大的作业可以在作业完成后给出代码架构的示例,这样可以让我们更好的学习优秀的架构设计,甚至可以不给出完整的代码,只是简单的架构设计的图解,我个人认为对于我们学习架构也是十分有帮助的。

  3.对于作业的需求说明可以更加严谨完善一些,比如第四单元作业,作业需要考虑的情况其实有很多,希望老师 和助教能够更加及时地给出答复。

 

转载于:https://www.cnblogs.com/cxy1999/p/11079572.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值