zoukankan      html  css  js  c++  java
  • OO第四次博客作业

    测试与正确性论证的效果差异/优缺点

    关于方法的测试,是针对规格设计相关测试样例,判断该方法在执行该样例后能否能获得与预期相符的结果。而正确性论证则是在方法规格的基础上,从理论上论证该方法的代码能否做到与规格相同的EFFECTS效果。测试更倾向于具体情况,正确性论证更倾向于论证整体所有情况。

    测试:可能需要提供众多的测试样例,很难覆盖完整个代码的所有分支情况,费时费力,但是十分直观,出错了也能通过具体的样例来展示。

    论证:由于是通过理论层面的论证,所以更加抽象。但是覆盖范围十分全面,涉及到了所有的情况,相较于测试而言更加简便,但不直观。


     OCL语言与JSF的比较


    OCL语言全名为对象约束语言(Object Constraint Language),是一种用于施加在指定的模型元素上约束的语言。UML类图中的所有值都可以被约束,而表达这些约束的方法就是 OCL。在UML2标准中,OCL不仅用来写约束,还能够用来对UML图中的任何元素写表达式。

    OCL是约束(Constraint)语言和查询(Query)语言。OCL基于数学中的集合论和谓词逻辑,有一个形式化的数学语义,但是却没有使用数学符号。它采取了自然语言和数学符号的折中方案,使用普通的ASCII码来表达数学中同样的概念,同时OCL规范也允许用户定义属于自己的OCL符号集。

    相较于JSF:

    相同

    1. 都有前置条件、后置条件和不变量(invariants)

    2. 都是声明(declare),仅仅表示应该去做"什么",而非"怎样"去做

    3. 都是对对象/方法的约束

    不同:

    1. JSF仅算一种规格(在java中以javadoc的形式呈现),而OCL是一种语言

    2. OCL大部分表达式执行后会返回一个布尔值,但有的也会用来选择一个单一值或一个对象/值的集合。而JSF的表达式都返回布尔值


     UML类图

    UML顺序图

    UML状态图


    学期总结

    1.四个单元知识点总结

    第一单元主要在将我们引入OO设计的大门,主要训练了单周期OO继承和类的抽象,以及强调了属性private的重要性。第二单元开始,我们开始写多线程程序。训练了线程安全这一重点。为了线程安全,属性私有化十分重要,这也是第一单元所强调的。第三单元我们开始了出租车(规格设计),出租车设计难度不大,主要重点在于JSF程序规格。这一步是在向工业界靠拢,强调程序规格的重要性。第四单元我们进行了单元测试和正确性论证。二者各有优势,都能够论证代码/方法的正确性。

    2.进步

    从第一次作业到现在,我完成了以下程序:

    1) 多项式运算

    2) 傻瓜电梯

    3) ALS带捎带的电梯

    4) 带捎带多线程(3个)电梯

    5) IFTT(文件管控/处理)

    6) 普通出租车调度

    7) 增加了开关道路的出租车调度

    8) 又新增了红绿灯的出租车调度

    9) 之前基础上新增可追踪的特殊出租车的出租车调度

      这一学期走来,自己在程序设计上取得了很大的进步。

      刚刚开始写OO程序的时候,代码风格和面向过程语言设计无异,方法代码行数长,功能单一性差。

      慢慢地再进入多线程后,情况得到好转,开始进行类的抽象,独立每个方法的功能,降低了每个方法的代码行数,便于更改维护。这样子自己写起来,或者debug的时候也感觉到确实更加轻松。

      因为第三次作业写的很烂,所以在14次作业中重写了ALS电梯。这次用时大概3个小时,算上后面debug的时间,也比之前写短了太多太多,而且确实方法功能明细,每个类功能明确,方法的代码行数最多也就3,40行,相较之前,有了许多的进步。

    3. 自己对于工程化开发的理解

      我并没有接触过什么工程设计,自己对于工程化开发的理解也全凭脑洞。

      我认为工程化开发应该不是一个人的工作,至少应该是一个team一起的工作。每个人分工合作,各自完成一部分代码。这个时候就也许会有最终汇总能不能对的上的问题。所以规格化设计十分重要。每个人先明确自己代码的规格,再根据规格写代码,只要写的代码对的上规格,最终汇总起来,应该就不会有太大问题。再后期维护环节,也能较好地进行维护,降低工作难度。

    4. 对课程的期望和建议

      我没太多建议,主要就是指导书希望能够更加明确详细一点。很多细节问题指导书都没有,不同的助教也可能有不同的看法,有时候就改来改去。而且写代码的时候也很忙,issue上的每个帖子也不可能全部仔细看一遍,不免就有些疏漏。而且第三次ALS电梯的指导书真的太复杂了。我在14次作业中重写代码之前,读了几遍指导书,还是没咋读懂= = ,看的我头晕眼花。

      另一个建议,就是还是查一下一些乱扣分的同学,做出点惩罚。全系的人都在抱怨有同学靠JSF乱扣分,一次扣几十个,甚至有人一个方法报3个JSF。我觉得这不是这门课想要的结果。希望以后这样的情况能少出现点。

  • 相关阅读:
    分享知识-快乐自己:Maven 相关原理
    分享知识-快乐自己:Struts2 前台日期到后台的日期格式转换
    分享知识-快乐自己:SSH 整合 Demo
    分享知识-快乐自己:Struts2 拦截器 与 过滤器
    是否可以重定向到 WEB-INFO 下的页面?
    分享知识-快乐自己:Caused by: org.hibernate.tool.schema.extract.spi.SchemaExtractionException: More than one table found in namespace (, ) : Dept (XXX)
    分享知识-快乐自己:Struts2 (常用的 constant 总结)
    分享知识-快乐自己:Maven 无法加载 Oracle 数据库驱动源
    Java的不同版本
    用VIM写作
  • 原文地址:https://www.cnblogs.com/feiyue666/p/9196594.html
Copyright © 2011-2022 走看看