BUAA_OO_Unit4

BUAA_OO_Unit4

目录

  • 总结本单元作业的架构设计

  • 总结自己在四个单元中架构设计思维及OO方法理解的演进

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

  • 总结自己的课程收获

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

一、第四单元作业架构设计

1、第一次作业

 

 

 MainClass为主函数,MyImplentation实现了官方包UserApi接口。Class、Operation、Interface分别封装了UmlClass、UmlOperation、UmlInterface,且根据Uml类图的树状结构增加了一些管理Uml图的属性,用以维护各个UmlElement的关系。

2、第二次作业

 

 

 

 此次作业与上一次作业相比,需要多实现两种类图的管理且增加了六种指令,为了使MyImplementation类的代码的总数低于500行,所以使用AllClassModel、AllCollaboration、AllStatement类来管理MyImplementation。MyImplementation首先将传入的UmlElement分为ClassModel、Collaboration、StateChart三类,再将对应的UmlElement传入对应的属性,然后在AllClassModel、AllCollaboration、AllStatement建立三种类图关系并实现具体的指令。State类统一管理状态图中的所有的状态,包括初始态和终止态,用type属性来管理不同UmlState的ElementType类型。

3、第三次作业

第三次作业的架构与第二次架构大致相同,但在AllClassModel增加了对UmlAssociation、UmlAssociationEnd的处理。并在不同的类图中分别实现了要求的合理性检查。

二、架构设计思维及OO方法理解的演进

  • 第一单元

   第一单元的主题是解析表达式,是我认为最难的一个单元。

   当时我才刚刚接触面向对象编程和java这门语言,pre的作业虽然大致完成了但还没有建立起面向对象的概念,所以刚开始接触第一单元的第一次作业时,感到非常的绝望,不知道怎样入手。但后面看了Trainning的代码再加上有其他同学的帮助,终于看到了完成作业的希望。可以说,这个单元是我最煎熬的一个单元,但在这个单元中我初步建立了面向对象的思想,开始学习并熟练使用封装,而不是像pre的作业一般,依然用面向过程的编程思想写代码。 

  • 第二单元

  这个单元是多线程的处理。经过第一单元的训练再加上第二单元的难度确实有所下降,这一单元我开始对自己有了些信心。

  在这个单元中,我学习了多线程的概念和相关知识。基于第一单元的训练,在这个单元中,我有了更清楚的面向对象的思维,本单元的代码具有较好的架构,所以我在修改bug的时候也就更容易定位并修改。

  • 第三单元

  本单元强调对规格的理解。是四个单元中最为简单的一个单元,但需要充分理解规格的意义,并运用一定的图论的知识。

  • 第四单元

  本单元学习了Uml类图的各个结构,并没有学习更多的面向对象的思想。在完成作业的过程中,我觉得更多地是对前几个单元所学的面向对象的知识的巩固,加强我们对面向对象思想的理解,锻炼我们建立好的架构的能力。

  • 总结

OO课程的每个单元作业都分成了三个阶段,这符合实际开发中逐渐增改需求的情况。如果在每个单元的第一次作业就建立了方便扩展的架构,那么后面两次的作业就比较容易,只需要在之前的架构做相应的修改。虽然我在这四个单元地作业中没有重构过,但是还是有几次作业的架构并不是很方便扩展,虽然不需要完全推翻重构,但还是需要进行大量修改,这个修改过程中容易带来许多新的bug,也增加了工作量。但在这个过程中,我也逐渐明白什么样的架构是好的,如何建立起好的架构。好的架构往往是高内聚、低耦合、易维护、可扩展的。为了建立起好的架构,我们需要使得每个类或方法都应有一个明确的职责,管理自己该管理的数据。此外,对于有泛化关系的类应采用继承来表现共性中的特性,但也要注意不应滥用继承。还需要合理设置属性、方法的访问权限,尽可能将数据隐藏起来并提供相应的访问操作,遵循策略与机制分离,将功能模块化封装的科技原则,使得代码具有高内聚低耦合的特点。

三、测试理解与实践的演进

测评主要是通过自己构造数据和测评机完成。

刚开始主要是自己根据代码中可能会出问题的、没有把握的地方构造测试数据进行测试。之后就主要依靠测评机与其他人进行对拍来进行测试。

手动构造测试数据的方法虽然具有针对性,但效率较低且一般只能覆盖到一部分情况。测评机测试虽然针对性不高,但效率很高,并且只要测评机的代码写好了,就能覆盖绝大部分情况。为了构造好的测评机,我们需要对输入数据的各部分的各种可能进行排列组合;我们还要确保测试数据能让代码中的每个分支都被执行到。

四、课程收获

  1. 学习并熟练掌握了Java语言。其实,oo课程中对java语法的内容涉及的部分比较少,可以说几乎没有,大部分时候都需要靠我们自己阅读指导书或是上网查找资料,自己学习相关的语法知识。从这一方面来说,oo课程还锻炼了我的自学能力。
  2. 学习了多线程,对于多线程编程有了较深的理解。对各线程间的同步、互斥有深入的理解,全面和仔细地分析协作是如何进行的。
  3. 学习了JML。相比于自然语言注释,JML更加严谨和清晰,有利于程序员之间进行更有效的交流。
  4. 学习了UML的相关知识。UML可以帮助开发者对系统进行建模,这对于设计一个好的架构有重要的意义。通过对UML的学习和第四单元的作业,深入了解了元素的结构和组织方式。
  5. 建立了面向对象编程的思想。在每次作业的架构设计中,我对于面向对象的理解都有进一步的加深。
  6. 代码的能力有了很大的提升。本学期oo课程作业的难度都不算低,代码量也很大,几乎每次作业都有千行以上的代码——这是以前没有的体验。但在这四个单元12次代码作业的锻炼中,我的代码能力也有了很大的提升。

五、改进建议

  1. 希望能提高中测数据的覆盖率。
  2. 建议在寒假预习期间增加对Java语法内容的系统学习。
  3. 建议在将线程相关的基础知识加入寒假的预习内容。
posted @ 2022-06-28 22:26  Hu_ly  阅读(27)  评论(1编辑  收藏  举报