面向对象第四单元总结

面向对象第四单元总结

第四单元三次作业围绕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课程能越来越好。

posted @ 2020-06-18 20:29  歌未竟  阅读(135)  评论(0编辑  收藏  举报