面向对象程序设计 第四单元总结

这是这学期OO最后一次作业了,每周五晚上的爆肝代码时间要空出来了,还有点不太习惯

(1)总结本单元作业的架构设计

  由于这单元的三次作业是简单的增量式开发,没有涉及到功能的修改与删除,并且我在这三次作业中也没有重构,所以以下直接分析第三次作业的架构设计。

  本次作业UML类图如下:

 

 

  根据指导,可以将整个程序分为类图,顺序图,状态图和合法性检查四个部分,在每个部分中再实现各自对应的功能。在实现类图,顺序图和状态图时,都要先阅读官方包中的代码,确定UML图中的元素类型与意义,如果发现官方包的类无法满足功能实现的需求,就要自己重新写一个类,如myclass这个类。之后根据UML图的结构与元素之间的关系,设计对应的类和方法。如在类图类中,我就先将类图中的元素都输入进来,再统一处理,处理时以myclass类为中心,将类下属的属性,操作,父类等加入myclass类的对象之中,以此构建UML类图。

  在这次作业中有几个需要注意的点:某些查询方法所需的数据在输入时就可以顺便提取出来作为缓存,避免每次查询调用对应方法时都要重复计算,浪费时间。另外,要注意自己的代码是不是会爆nullpointer。由于某些对象的parentid并不都是能在输入中找到的,所以一定要先判断是否为空指针。在调用容器方法时也要注意是否可能出现空指针。最后,在合法性检查的类中,由于期末时间紧张,我在某些方法中直接用了dfs递归,性能很差,在处理大批量数据的时候可能爆栈,所以尽量少用递归。

(2)总结自己在四个单元中架构设计及OO方法理解的演进

第一单元:

  在第一单元中,我认识到了架构设计在解决具体问题中的重要性。在写面向对象的代码时,其架构设计要比面向过程复杂得多。如果说面向过程的思维是一条线,那面向过程的思维就是一张网。在架构设计时,要先对问题中的各种元素进行抽象,成为对象,并明确这些对象之间的关系,建立层次化的架构。再明确对象的数据与行为,进一步建立抽象层次并管理层次关系。这也就是面向对象设计的一些基本技巧。但这一单元我对OO方法的理解还比较浅显,仍然有很多面向过程的思维。

第二单元:

  第二单元的多线程电梯就是彻彻底底的面向对象了。这一单元主要学习了面向对象的并发和多线程,了解了一些基本的多线程交互设计模式。在架构设计方面,比较重要的一点就是确定对象之间共享的对象或者数据有哪些,在多个对象并发访问这种对象或者数据时,要用互斥锁把他们保护起来。

第三单元:

  这一单元主要学习了JML规格。在架构设计方面,主要就是读懂规格,明确数据结构和要实现的功能,之后照着原样写出来或者自己优化一下算法再实现。这一单元让我认识到了JML规格的巨大作用和重要意义。在面向对象实际开发中,JML规格可以省去很多的麻烦。

第四单元:

  第四单元学习了UML,并且实现了UML的简单功能。这一单元的架构设计和OO方法同第三单元相差不多,不再重复。

(3)总结自己在四个单元中测试理解与实践的演进

  在测试的理解和实践中,第一单元我采用手动构造数据的方法,数据大多取自边界,以此进行测试。第二单元由于多线程测试的不可复现性,我只是把指导书中的样例拿来测试了就提交了。第三单元由于代码结构相对固定,就可以采用junit进行自动测试,这让我的程序更加可靠了。第四单元可以使用starUML构造数据,并观察数据之间的关系,非常方便。

(4)总结自己的课程收获

  • 学会了一门编程语言java,养成了良好的代码风格
  • 面向对象的编程思想与技巧
  • 认识到了设计架构的重要性,学会了层次化的架构设计
  • 多线程常用设计模式与设计技巧
  • JML规格
  • 阅读UML图
  • 对程序进行全面设计的重要性

(5)立足于自己的体会给课程提三个具体改进建议

  • 第一单元第二次作业对没有OO基础的同学来说(比如我)确实很难顶,可以考虑一下重新设计一下难度梯度。
  • OO实验课每次都不给答案,这样对OO学习帮助并不是很大。希望能给下答案。
  • 测评机有时会把RW报成WA,这个错误对debug误导非常大,希望能解决一下。
posted @ 2021-06-21 20:27  twilight3590  阅读(75)  评论(0)    收藏  举报