BUAA_OO_Unit4 &学期 总结
UML单元作业架构设计
本单元学习了对UML模型的理解和解析,了解了UML模型的语义规则,主要是针对类图、时序图和状态图进行了学习。两次作业是在对UML模型理解的基础上,根据课程组发放的开源包,对UML模型进行不同程度上的解析。
本单元的两次作业架构如下:
第一次作业是构建自己的UmlClass类、UmlInterface类等,在相应的类内保存了所需要的关联对端、操作、属性等。在写相应的方法时,感觉有点大一在上数据结构时,学习“指针“部分的操作。
第二次作业按照第一次作业的思想,但是架构有所改变。关于时序图和状态图的部分相对简单,与链表的数据结构类似,并且由于作业要求没有考察其与类图的一致性,相应结构做的较为粗糙。关于类图的三个新的方法,很遗憾的是考虑不够全面,没有找到合适的解法。
架构设计与OO认知
在我的印象中,第一单元是开始了OO方法的认知,了解“对象“及有关概念;架构的有关强调应该是在第二、三单元。那就先从对OO方法的理解说起吧,第一单元的起步感觉很困难,虽然老师和同学尽可能得将这个抽象的概念讲得简单一点,但是在代码中还是没有办法找到面向对象的方法。就算是现在来说自己对OO的理解,恐怕也只是”对象是什么、它们的接口是什么“这种浅显的深度上。很多介绍书本的第一章或第二章都会讲关于”对象“的理解,如何构建程序。我认为对OO方法的理解也就体现在怎么样去分析和设计程序。
首先是找到问题域,然后归纳问题域中的实体,找到实体间的联系图(这里就可以使用uml类图),最后构建相应的类,进行一些优化措施。这是对设计程序过程的简单概括。在后面单元学到的UML类图反过来应该是设计时就可能需要引入的概念了。
在这几单元作业中,程序的架构设计都有考察,因为作业是逐次扩展形式展开的。其次,除了扩展的便捷性之外,还有对程序可维护性等方面的考察。印象深刻的是老师在第二单元总结中,让我们针对程序复杂度进行分析,观察bug出现位置与程序较复杂的部分的关系。很显然,如果程序部分复杂度过高,出现bug的概率就会越大。这也是架构设计要考虑的一部分。具体的内容就是第七讲的《面向对象程序的需求分析与设计原则》,这部分内容看起来较为抽象,落实在代码设计中有相当重要的作用。这部分内容练习还是不够,缺乏有效的考核形式,SOLID原则的使用仍然缺乏熟练度。
测试理解与实践
四单元作业的测试环节占有相当大的比例,但是自己对于这部分内容做的很差。
第一单元是多项式的求导,测试即需要我们寻找不同的多项式的样例。我在寻找样例时,是针对不同单项式的形式寻找若干样例,之后再进行一些排列组合。手工制造样例,类型有欠缺,且样例数量较少。这部分最严重的问题是:自己找样例的思维与自己设计代码的思维是一致的,如果在设计代码时忽略了某种情况,在寻找样例时也大概率地会忽略这些情况。
第二单元的输入是包括输出时间的输出,相比于第一单元的输入更多元化,情况也更多。样例的选择自然是根据指导书的功能要求寻找样例,但是由于输入有时间的要求,在IDEA的run界面输入肯定是不行的。我自己的做法是改变输入流,选择文本输入,这也可以在0时刻同时输入若干条命令,这样就可以满足大多数的情况要求了。
第三单元作业是关于JML的内容,测试更具单元化的特征,也逐步掌握了Junit的使用。
第四单元作业是关于UML的内容,测试样例需要根据uml图并且由课程组提供的工具进行解析。关于图形化的不同样例我感觉是很难找的,这部分没有进行多种样例测试。
课程收获
这学期虽然自己做的不是很好,但是仍然有了相当多的收获。在知识层次上,主要是了解了Java语言的使用,程序设计上了解了面向对象编程的思想。另外跟着课程组的安排,对完成项目时间规划有了一定的认识。根据自己这学期的表现和作业,希望能在“补给站”里,把这些知识进行巩固,尽量的熟练起来。这学期的OO内容还是很多的。
改进建议
① 作业的起点难度略高。在接触java的第一次作业与假期的预习感觉难度差距很大,没有合适的样例去模仿学习,感觉很困难。
② 实验课内容缺乏及时反馈。感觉实验课的知识考察点更针对当周新学习的知识,但是上机没有反馈,上机内容感觉没有很好地利用。
③ 上课知识密度过大。可能只是我个人的想法,可能是单节课时间的减少等原因,感觉单次理论课内容太多,不能有效理解。可以考虑减少上机或者研讨课内容。