OO第一单元总结

OO第一单元总结

三次作业总览

  如何用代码来描述事物,这是在学习面向对象过程中很值得思考的一个问题。本单元的任务是扩展表达式,我在三次作业中都使用了表达式树来描述表达式,这种描述表达式的方式体现了运算的本质,很契合我们要解决的问题,使程序具有很强的可迭代性,故我在完成这三次作业过程中没有重构,而是很顺利地逐步增强ExpressionExpander的功能。

类图和OO度量分析

  三次作业中我逐步形成了如下的架构设计:

  建立起表达式树后,表达式的结构变得清晰明了,要完成扩展表达式的任务,只需调用root的getResult方法,以此递归调用其他节点的getResult方法。这种结构不仅可以实现扩展表达式,还可以实现求导等诸多功能,具有很强的可移植性。
  为了完成复杂的解析任务,我设计了如下的几个工具类:

  解析思路是递归下降、因子代入。这种思路和建立表达式树的过程很契合,为解题提供了很多便利。
  以下是作业3的OO度量,可以看到LCOM值比较小,FANIN值比较大,符合高内聚低耦合的设计要求。

分析作业的bug

  在这三次作业的强测与互测中,我的作业都没有被找出bug(当然没有被测出bug不意味着程序完全没有bug)

分析他人程序bug所采用的策略

  先大概阅读一遍他人代码,分析代码可能存在的薄弱点,针对其薄弱点构造随机测试数据。在前两次作业中均hack了他人代码中的两个bug。

架构设计体验

  三次作业的迭代可以说是比较顺利的,第一次作业实现了按照固有的运算规则来建立表达式树,第二次作业在第一次的基础上增加了对自定义函数和求和函数的解析建模,并以此辅助建立表达式树,第三次作业沿用第二次作业的架构即可,并未做出改动。好的架构不仅可以提供代码的质量,还可以很大程度的减少工作量。所谓磨刀不误砍柴工,在解决新问题的时候,一定不要急于写代码,而是把任务需求、迭代需求思考清楚,设计好类,再进行创作。无论是在面向对象还是计算机组成原理实验中,这一点都已经得到了证明。

心得体会

  面向对象是一种编程思想,强调数据封装。如何去描述事物,用代码的方式来呈现事物的属性与行为,我认为这是第一单元最重要的问题。做好现实问题与代码的映射,不仅能提高代码的可读性,还能让自己在写代码时更好地从全局去观察自己的写作,这对代码质量的提升有莫大的好处。

posted @ 2022-03-26 13:32  Xayah06  阅读(21)  评论(1编辑  收藏  举报