OO第四次博客

本文是作者对OO课程四个单元练习的总结。阐述了两次UML作业的架构设计,回顾了四个单元中架构设计、OO方法理解及测试的演进,提及课程收获包括代码能力提升和对面向对象思维的初步理解。最后提出实验课改进、JML内容提前、提前公布作业指导书等建议。

  这是最后一个单元的OO练习。我个人感觉这两次作业相比于前三个单元而言,主要的难点在于理解UML相关概念。作业的要求里面将很多内容做了简化,尤其是第二次作业,避免了一些繁琐的处理。总的来说这两次作业我感觉还是比较顺利的。

一.两次作业的架构设计

  两次作业的架构其实差不多,第二次作业可以理解为第一次作业的拓展版本,增加了顺序图和状态图的一些查询,增加了类图的检查。我的思路是预先计算出所有需要查询的内容,实现接口的一系列查询方法时,就可以直接取出已经算好的结果。

  所有的计算是在类的构造函数里就直接完成的。为了计算的方便,原始的UmlClass等类并不能完美满足需要,我自行定义了新的类如MyClass等。这些新的类将能承载更多的信息,更能满足查询的需要。

  因此我的代码由一个主类,一个需要实现的类,和一系列为了计算方便而设计的UmlElement的扩展类构成。整体的思路还是比较清晰的。将传入构造函数的一系列UmlElement分门别类存好,把关系理清,然后计算相应结果。(第二次作业还需要进行类图检查)一系列查询方法都是通过获取存好的结果来完成操作的。

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

  在这四个单元的练习里,我的架构设计能力是逐步提升的。

  在第一个单元,表达式的作业里,主要的思路是设计表达式、项和因子三个类,分别完成它们的构造(从字符串中解读出相应信息)、运算(相加、相乘、求导)、输出。整个的思路是比较简单的,我觉得就是根据事物的客观性质,用代码把它们描述出来。

  第二个单元是多线程电梯作业。这个单元一方面是讲解多线程程序的基本知识,另一方面是强调合理设计架构以应对新需求的引入。不过以我的能力并不能顺利设计出好的架构,因此我每次都重构了。请求队列是一个简单的多线程读写模型。电梯要复杂一些,包含一系列电梯属性,在获取请求以后会根据调度算法做相应的运行操作。我的调度算法是写死在里面的,这意味着每一次都会大改。

  第三个单元是根据JML写程序,可以认为是在做一个架构的规范。我感觉架构设计没有太多可以说的,基本都定死了。更多的精力花在了设计好的算法来提高运行效率上。

  第四个单元的架构在上面提到了。UML本身结构要比第一单元的表达式复杂不少。能顺利完成UML,说明架构设计能力和OO方法理解都比学期初要进步不少。

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

  我感觉测试方面,第二个单元由于是多线程,难度比另外三个单元高出不少。测一次过了不代表再测一遍还能过,测出问题了再测也未必能复现出来。很多时候都是靠一行行读代码做分析来解决的问题。

  至于对测试的理解,我觉得关键在于保证测试数据对问题的全覆盖。这个量可能很大,因此就需要依靠自动生成测试用例和自动评测脚本。

  合理的架构设计对检查bug会有很大帮助。代码结构清晰,跟踪寻找错误位置就会方便很多。

四.课程收获

  最基本的收获就是代码能力提升了。这个学期的OO课总共写了应该有上万行的质量较高的代码,这对代码能力的提升是很有帮助的。对于java语言,对多线程编程,都有锻炼。

  关于面向对象思维,我的理解还很有限,但至少是有了一些理解。还记得第一次作业时我觉得非常茫然,感觉问题并不复杂,但又不那么好写。不把表达式分析清楚就鲁莽地开始编程,就会在各种各样的细节中越陷越深,会感到非常苦恼。随着OO课程的学习,我渐渐不再有这样的感觉,而是在拿到问题以后就能有一个大致的思路,应该要有什么样的几个对象。虽然架构还未必是非常合理,可扩展性也并不强。这个还需要在今后的其它课程和具体实践中不断锻炼。

  此外,四个单元的OO博客对我也是很有帮助的。博客作业一方面是梳理所学知识,一方面也是在锻炼表达能力。总之,我觉得这个学期的OO课是很有收获的。

五.三个具体改进建议

1.实验课训练对于理论课作业是一个很好的补充,一些题目也非常好。但每次考完以后就没有下文了,既不提供考题也不公布答案,不利于大家进一步学习。此外,如果能像理论课作业一样提供bug修复或者其他订正机制,应该会更好一些。毕竟考试只是一个方面的作用,更重要的还是通过实验课巩固OO的知识。

2.我个人感觉JML规格的内容可以适当提前,比如放在第二章。因为我觉得这是比较基础性的内容,放在前面或许好一些。有了JML的知识以后,做多线程电梯,思路会清晰的多,比如什么时候涉及线程安全问题,有了规格的帮助,在代码实现和检查时都会方便很多。当然这只是我个人的想法,可能不够成熟,也没有任何实践结果的证明,只是在这里提一个观点。

3.我觉得在博客周可以提前公布下一单元的第一次作业的指导书(或者对作业核心部分做个描述)。我每个单元的作业都是觉得第一次作业难以有思路,后面两次作业即便难一些,顺着做下去也一般不会有太多困难。博客周往往任务不重,如果能提前了解下一个单元的第一次作业,早一点开始思考,这样时间安排上要平衡一些。当然这也只是我个人观点。

 

 

转载于:https://www.cnblogs.com/buaa1623-zyx/p/11075116.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值