OO第四次总结

测试与正确性论证的比较

测试: 测试的难点是构造测试用例分支树,通过执行测试用例查看代码的覆盖情况,能够排查无效的分支和执行错误的分支,从而完善程序。但是构造一个全覆盖的测试用例集往往是比较困难的,而且单个方法或类的执行正确也无法保证程序整体正确性。
正确性论证 :正确性论证方法根据代码规格等,通过逻辑推导分析代码执行的过程,能够确保程序按照编程者的逻辑执行。但是无法检查出一些语法错误或一些库函数使用的错误。

OCL与JSF

OCL(object constraint language)对象约束语言,是一种约束定义,形式化的无二义性的语言。它用于在UML中补充元素之间的关系,完善模型的相关细节。有如下特点:

  1. 准确、无歧义
  2. OCL兼有符号表达和自然语言描述,表达能力更强。
  3. 强类型语言,每个表达式的值都用明确的类型,或者是int、boolean这类基本类型,或者是自定义的类型。

OCL与JSF的相同点:

  1. 二者都通过明确的逻辑表达式约束程序。
  2. 结构相似,都有前置、后置条件。

不同点:

  1. OCL有上下文,JSF没有
  2. 符号、语法不同
  3. OCL有监护条件,JSF有Modifies

UML类图

时序图

状态图

学期总结

四个单元知识列表

第一个单元是基本的java程序编写,从零开始认识java,编写一些单线程的程序,加强对于面向对象的编程习惯,掌握类属性方法等元素以及继承、多态等OO的基本思想。
第二次单元是基本的多线程,引入并行的概念,几次作业重点关注线程同步、数据安全。
第三个单元注重的是JSF规格,优化代码设计。主要是简化单个类和单个方法的复杂度,整理多个类之间的数据,逻辑关系,保证代码按照预想的方式实现。
第四个单元是代码的正确性论证和测试,从工程角度优化代码。

个人收获小结

  1. JAVA语言,面向对象编程思维。
    在OO这本门课程的学习中,我最大的收获应该是学会了Java语言,并培养起了面向对象的编程思维。在课程开始之前我几乎每写过Java也没有过面向对象的编程经验,在课程中,我学到了很多,从最开始的简单创建类,对象,到Java的类库使用比如正则表达式,容器等,再到后来的多线程,又学会了对各种锁的使用。
    OO课程的任务量对我个人而言确实很大,每周一个大作业,一月一次总结,不过正是这样的高强度训练才让我有了巨大的进步。从以前对一个简单的问题无从下手,到现在可以设计一个高效,清晰的代码,其中的收获让我感受到了进步的快乐。
  2. 代码设计
    OO课程的后半段终点考察了对程序整体的设计,我学到了SOLID设计原则,并在自己写代码过程中尽可能综合考虑。在以前写代码的过程中,我更多的是得到一个可行的解决方案,而现在我更注重一个高质量的解决方案。
  3. 互测机制
    说到北航OO,不得不说其中的互测机制,我在其中遇到过很多“不公平”,也遇到过热心帮忙改代码而不注重分数的同学。但是正如老师所说,我们在这门课上的经历就像以后实际的工作一样,没用绝对的公平,也没有需求非常明确的客户,我们唯一需要做的是做好代码设计,给出尽可能完美的解决方案。

对工程化开发的理解

结合OO课程,我对工程开发有如下几点理解:

  1. 时效性:工程开发都是又时间要求的,正如我们每周的作业都有ddl,在实际开发中,往往在时间需求内完成的方案才可能有实际的应用价值。
  2. 可读性:工程开发一般都是多人协作完成的,所以一个人写的代码要有较好的可读性,合适的规格、注释,要让其他使用者有对类或方法有明确的认识。
  3. 可扩展性:在工程中一个类,可能会在其他程序中作为父类继承,这就需要父类的作者对类的结构数据维护有很好的设计。

对课程的期望和建议

首先,我认为OO这门课是我在北航上过的最痛苦,也是收获最大的一门课。这里也向课程组、助教团队表达感谢,感谢你们这一个学期的辛苦付出,感谢你们耐心回复同学们的问题与诉求。
另外,我认为OO课程的难度可以适当调整,我认为前半段过大的难度让很多人都不适应,而后半段相对容易的任务也让很多人懈怠。所以我希望课程组可以适当调整课程进度或作业难度,让整体的难度曲线更平缓。

posted on 2018-06-25 19:49  L__L  阅读(176)  评论(0编辑  收藏  举报