面向对象第四单元总结
面向对象第四单元总结
第四单元三次作业围绕uml图的理解展开,分别是解析uml类图、解析uml顺序图、状态图和类图以及对部分有效性规则的检验。
架构设计
-
第一次作业
第一次作业主要采用了树状图的架构方法,新建了用于存放类图信息的类unlunit,将属于一个umlclass或者一个umlinterface的属性和方法放在一起,并且将关联、继承、实现关系也放入其中。建立通过id和name进行查找的两种方式,便于方法进行调用。
-
第二次作业
第二次作业新增了对uml状态图和顺序图的解析。新增属性对第一次作业部分几乎没有影响,但是需要注意无源attribute的处理。第二次作业增加了两个管理类,分别为stateinterface和generalinterface来对状态图和顺序图进行处理。在umlinterface中直接将UmlElement[] elements作为参数传入各个管理类,调用方法时直接调用相应类的方法。
-
第三次作业
第三次作业新增了对uml图有效性的检查,规则较为复杂,针对uml类图的检查是重点。对于名字不存在或者重名的情况,原先用名字进行索引的要修改,以防将null传入发生错误。R2检查循环继承问题,可以转化为有向图查找环的问题。R3检查重复继承问题,可以转化为搜索问题。R4检查重复实现问题,可以转化为搜索问题。针对某种图的检查只需要在相应图管理类中添加新的方法,保证架构的相对合理。
四个单元的架构分析和理解
-
第一单元
第一单元的任务是对表达式的求导。这一单元主要是对Java语言的熟悉和理解,包括类的概念和运用、正则表达式的使用等等,重点还是在于思路的构建和具体方法的实现。良好的架构也对程序有着巨大的作用。现在看来,我的架构有很大的改善空间,程序中面向过程的痕迹还是过于明显。
-
第二单元
第二单元的任务是电梯问题。这个单元的重点是多线程编程思想和同步问题。我在这个单元的架构设计有一定进步,将不同功能的部分分为若干类各司其职,提高了可读性和debug的效率。这个单元给我的印象比较深刻,因为多线程的程序bug可能会比较隐蔽,debug时需要对自己的程序运行流程有着清晰的认识。而且,在电梯策略方面,自由性也比较足,可以自行探索花费少的方法。
-
第三单元
第三单元的任务是解析jml语言。用jml语言来描述方法、类等的行为和结果,以及根据jml语言去编写程序。在这个单元,理解jml语言的语法和含义是比较重要的,作业只需要遵守jml语言约束即可。这个单元我学会了很多,我认为jml是一种很好的传达需求的方式,但也有一些限制。一般来说,jml语言还是主要用于代码编写人员的交流,甲方提出需求时,很难用形式化语言进行精确表达。不过,架构师对架构进行精确描述时,jml语言就可以发挥作用。总的来说,我认为说明文档和jml语言配合可以达到很好的效果。
-
第四单元
第四单元的任务是分析uml图,将uml图所含信息提取出来并进行处理。第四单元中,我学会了绘制uml图并且初步掌握了uml图的概念和用法。我对uml图的用处有一些疑问,非代码编写人员对uml图欠缺理解,而编程人员更倾向于阅读代码或者说明文档,这就使uml图的作用较为尴尬。我认为uml图作为一种可视化工具还是不错的,但是“有人能通过画uml图写出完整代码”这种说法我还是不甚认同的。
测试方法和理解
第一单元和第二单元,我主要还是手动生成测试数据,我的重点还是放在对于算法和边界数据上,没有针对覆盖性进行的测试。
第三单元,我开始编写一些自动生成测试数据的工具,进行简单的覆盖性测试,并且通过对拍检验正确性,由于部分理解偏颇和忽视,导致有些地方还是出现了问题。
第四单元中,由于我对uml图的理解较慢,而且输入mdj文件的格式没有完全理解,我没有编写自动测试工具,也导致很多地方没有发现问题,这是比较失败的。
测试是程序很重要的一环,覆盖性测试以及正确性分析对程序质量有着至关重要的作用。我认为自动测试工具是很有必要的,测试工作在软件开发工作中也有必要单独成立相关部门进行反馈。
课程收获
-
java语言
通过一学期的学习,我基本掌握了java语言的语法和相关用法,体会到了java语言一些独特的特性。 -
面向对象编程思想
面向对象编程以所需数据结构和功能为核心,以类的方式组织,描述了对象的行为.通过封装、继承、多态等建立了很多实用的库和函数,避免了重复"造轮子"。 -
多线程编程思想
多线程编程是很有意思的一部分,通过同步等操作,使得一个程序中的线程相互配合达到预定目的,在软件中广泛运用。 -
自动化测试方法
通过对自动化测试脚本的书写和数据生成器的书写,提升了测试能力。 -
形式化规格和语言
在学习jml的过程中,我思考了怎么才能更好地传达需求和理解需求。 -
对未来使用java进行软件编程的兴趣
java语言和编译器在使用过程中给我感觉极好,相关的库也很齐全,进行了这学期的学习之后,我更有信心用java写一些感兴趣的程序。
建议
-
关于实验
有几次实验我并没有很好地理解题意,不大懂是要干什么,希望可以有相应的讲解以及在课上进行一些铺垫。实验的答案也希望可以发下来进行学习。 -
关于uml图
我还是觉得uml图的用处不是很多,觉得没有必要突出强调。可以将uml图单元换一个背景,进行架构或者图的学习。个人感觉,uml图课上所讲与作业练习不是很紧密,而且作业有些部分不难,但是缺少一些初学者所需的提示。 -
关于jml语言
jml语言很有用,但是感觉没有必要用一个单元去学习其用法,而且这个单元着重于根据jml补充代码,我觉得书写jml能力有待提升。可以在平常的作业或者预习中加入jml的学习。 -
关于测试
java测试也是很重要的一部分,个人感觉重要程度不亚于一些传统知识点,可以单独设立一个单元进行学习。
线上学习体会
这学期的线上学习更强调了自学能力和理解能力。在遇到困难时,需要自己找出问题所在。这样既有好处也有坏处。一方面,锻炼了自己的能力。另一方面,有时候很简单的问题会卡住很久,浪费时间。线下学习更有助于交流和互相学习,也是很有帮助的。
总结
个人感觉oo课程难度适中,安排合理,学习有很大收获,有提升空间,希望之后的oo课程能越来越好。