面向对象补给站总结博客

一、未通过作业回顾

第一单元:

  在完成第一单元作业时主要的困难在于输入的处理与表达式构建,当时没有写出一种简单有效而且逻辑清晰的方式处理输入的表达式,使得后续求导、输出以及化简的实现都非常不顺畅,没有完成作业。

第二单元:

  第二单元作业在开发时没有较大的困难,未通过原因在于线程安全的控制中出现疏忽,有一个公测测试点会无法结束运行,另外由于拖延,作业开始时间较晚,未能在时间截止前修复该bug。

第四单元:

  第四单元作业有一个困难点是阅读官方包的代码,需要在读懂后实现作业需求,补全功能,未通过原因在于第四单元的首次作业未能按时完成,此后的递进开发也因此受到影响未能按时完成。

二、补给站作业改进

第一单元:

  (1)在补给站完成的第一单元作业与之前相比的改进首先在于使用语法解析的递归下降方法处理输入,相较春季学期的处理思路清晰,不易遗漏出错,代码量也较为简洁

面向对象补给站总结博客_第1张图片

 

面向对象补给站总结博客_第2张图片

 

 

  (2)其次作业架构也比之前有了较大提升,处理输入的方法会首先扫描一遍输入的表达式字符串,架构上将输入处理与后续计算隔离开,对功能实现的思考不再需要受糟糕的输入处理方法的限制,作业整体架构如下图

面向对象补给站总结博客_第3张图片

 

 

 

   (3)此外本次作业在补给站中的改进是做了若干化简优化,并未限于求导的基本功能,如在加法规则和乘法规则中合并同类项,化简0,1等常数以及调整加法项的顺序使减号移后

第二单元:

  (1)在补给站中我仔细考察了共享访问的对象,找到并修复了春季学期中的bug

  (2)改进了调度器在分派请求时对电梯的选择,由之前的随机分派改进为选择在当前状态下等待时间最短的电梯

第四单元:

  在补给站中我加深了对UML的掌握,重新设计了第四单元作业的架构,而且改进了自己建模的class,interaction,statemachine等类中的部分属性方法,更便于类图等的存储,建立和查询

面向对象补给站总结博客_第4张图片

 

 

 三、讲解的收获和进步

  讲解的收获首先是自己需要在讲解前对完成作业时设计、开发、测试等各阶段进行回望反思和总结,并梳理作业的实现逻辑,这一过程可以增强对作业需求的本质的认识,有助于发现漏洞或改进优化,也能加深对许多细小知识的理解。

  此外,讲解时老师的提问还会帮助复习一些容易忽视的知识细节,或是学习到一些实用技巧;讲解后老师对于程序改进优化方向的建议也可以提升一定架构设计能力。具体而言,比如:

  1.第一单元作业的设计中,我将各个简单函数及组合规则都实现求导接口,老师建议使用指导书推荐的架构。事后思考后,的确抽象出简单项父类和组合项父类在设计理念上会使程序更为简洁且有组织,在实际中,我的设计里简单函数如sin(x)^n,cos(x)^n,x^n都具有^n的结构,输出方法有一定相似性,而组合规则中加法项对0的省略和乘法项对1的省略也有较大相似性,都可以提取公共部分做成父类方法

  2.诸老师给出了一些对第一单元作业里表达式化简优化的可行思路

  3.第二单元作业在讲解后明确了调度器动态分派请求的改进方向,使电梯既作为请求的消费者也作为请求的生产者,在架构上具有更优越的可扩展性

  4.在旁听第二单元讲解时学习到了可以把结束信号作为一种特殊请求来处理的思路

  5.荣老师提及了一些关于十字链表的实用用处

  最后还有一方面收获是关于时间观念,讲解的时间安排以及老师的叮嘱都传达了不要拖延,提前完成的教诲。

四、对补给站的建议

  虽然写程序应当自己做好测试,但我建议course平台多开放一些评测,尤其是第三单元第四单元这样递进性更强的单元,有助于控制进度和稳定心态。

五、心得体会

  首先课程内容上的心得体会依然与春季学期相同,课程很好地培养了OO编程思想,对软件架构的重视,测试能力等等。而没有顺利完成春季学期课程进入补给站促进了我思考我个人存在的一些根本性问题,我认为是比较严重的拖延和没有较大的代码量积累,补给站阶段过后我应当着手于这两个“未按时完成”“实现有困难”等未通过理由下更深层的问题。

  补给站的课程和学习我认为已经对我有较大帮助,可以补全作业,重新完成自己未能完成的内容,期间的学习也进一步强化了春季学期的知识,增强了一定架构设计的能力。

  最后感谢老师和助教们的辛勤付出,也祝OO课程越来越好。

你可能感兴趣的:(面向对象补给站总结博客)