zoukankan      html  css  js  c++  java
  • OO总结

    一、测试与正确性论证

    测试:从需求出发,构造测试集,给出期望输出,可以证明程序存在bug,但是无法证明程序是正确的

    正确性论证:从程序最终实现出发,基于程序逻辑,通过假设、推理、论证,证明程序的正确性。

    两相比较下,正确性论证具有更高的严谨性,但是也需要投入更大的时间精力。故两种方法难分高下,有不同的应用场景,需要针对性使用。

    二、OCL & JSF

    OCL(Object Constraint Language),即对象约束语言,是一种用于施加在指定的模型(UML)元素上约束的语言。

    其特点为:

    1. OCL是一种精确的,无二义性的语言。

    2. OCL是一种规范说明性语言,所有有关实现的问题都不能用OCL来表达。

    3. OCL是一种纯表达式语言,它是具有没有任何副作用的申明性语言。

    4. OCL是一种类型化语言,即OCL中的每一个表达式都是具有类的。

    5. OCL不是一种程序设计语言,不能用OCL编写程序逻辑和控制流程。

    OCL表达对模型元素性质的约束时,常使用如下三种形式:不变量、前置与后置条件、let表达式。

    与我们在课程中使用的JSF相比,OCL更多将重点放在对象内的数据项,而JSF是围绕方法与类展开的。

    同时OCL的约束能力功能强,但是JSF实现起来更为轻便快捷。

    两者的关系有些像上面论述的测试与正确性论证,使用的时候需要视情况而定。

    三、单电梯系统的相关图

    UML类图

    顺序图

    状态图

    四、课程总结

    4.1  四个模块知识点之间的关系

    第一单元:java与对象

    课程:对象与对象化设计(1)、对象与对象化设计(2)、继承多态与抽象            

    作业:多项式加减、单线程傻瓜电梯、单线程可捎带电梯

     第二单元:并发与安全

    课程: java对象运行机制与多线程、线程的安全设计、面向对象的需求设计与设计原则

    作业:多线程电梯、IFTTT、出租车

    第三单元:抽象与规格 

    课程:过程抽象与异常处理、数据抽象、类型层次规格与迭代

    作业:出租车+流量、出租车+红绿灯、出租车+特殊出租车

    第四单元:测试与论证

    课程:面向对象测试、基于规格的程序正确性论证、如何更好地进行设计

    作业:覆盖率测试、正确性论证报告、UML模型

    四个单元知识循序渐进,但是又相互关联。

    4.2 自己的进步

      从第一次作业的“java从入门到放弃”,到现在轻松写出1k+行代码,拥有了一套电梯系统,随手召唤百辆出租车。OO一路走来,现在的自身的能力和做出的成果是三个月前,想都不敢想的。

      开始两次作业对java的不熟练消耗了大量的时间,不知如何抽象出对象,艰难地从面向过程向面向对象迈进,那个时候,一份在现在看来小case的作业,需要花上我几天的时间,全身心投入地攻克,并且写出来的代码在现在看来,真的有些不忍直视。

      接着进入多线程单元,犹记得自己和同学讨论了两天,脑海中仍旧一片混沌,设计框架理了一遍又一遍,又一次次推翻否决。不得不说,空想是最浪费时间的方法,把思路写出来、理清可以更好地帮助我们思考与解决问题。

       进入了被最多吐槽的规格设计单元,坦白地讲,我是质疑的、不满的,甚至在不知道自己熬夜到底在写着什么的时候,是有些愤懑的。但是渐渐地,我觉得jsf没有我想象中的那么鸡肋,我们写的小程序与大的工程开发就是小巫见大巫,也许jsf在我们的代码里看起来是一种作业的负累,但是在大的工程开发中是团队成员间的桥梁。

      一个学期的课程结束后,自己的进步是巨大的:

    盲目测试>>>从代码中找bug

    代码行数50+>>>封装、类层次划分

    乱用try catch>>>尽量从设计保证程序鲁棒性

      当然抗压能力和处事交流能力也得到了锻炼:从一开始看到被报bug就会暴跳如雷,到理智面对。

    4.3 对工程化开发的理解

      说道工程化就想起了学习计组的时候,高老板的工程化设计表格。不得不说,那个表格拯救了我混沌的大脑。

      这个学期的OO课程学习又是一次工程化设计之旅。每次作业,接到指导书,分析需求;进行整个程序的框架层次设计;然后进行细化,完善每个类的属性功能细节;完成了这些准备工作就可以着手码代码了。之后,对编写的代码进行测试;交作业,进行互测。

      从这个作业完成流程中,可以简单地抽象出工程化开发的流程:

        接到项目 --> 需求分析 --> 框架设计 --> 细化设计 --> 代码编写 --> 项目测试 --> 交付使用

       感觉工程化开发的核心就是将一些方法流程抽象成一个模板,进行严谨的、统一的规约,虽然不是十分灵活,但是在大的工程开发中可以保证规范性,有助于团队统一开发。

    4.4 对课程的期望与建议

    首先在课程体系上,希望在同学们具备了java基础后,先讲授规格设计单元,让同学们养成根据需求撰写代码的好习惯,而不像我们先写代码,然后根据代码实现编写JSF。 

    对于互测,希望进行更加严格的审查,避免恶意扣bug,这种行为是非常过分的,应该进行严肃处理的。

    另外,历次作业的指导书也需要完善。在这学期,很多次作业的指导书都出现了漏洞和巨大的问题,然后助教组和老师进行商讨后,又多次改动,对同学们做作业造成了很大的困扰。同时,也需要一个统一的、明确地信息发布平台,很多问题最后助教给出的答复可能在不同的群,issue上的答复也可能有改动,但是这些不是所有的同学都能知道,因为这些问题,很多的同学都在互测中被报了bug,然而并不是没有能力实现的问题,而是给出的需求不统一、不明确的问题。希望课程组能重视这个问题,并在下一届有相应的举措解决问题。

    记录一下自己OO之路~

    一个学期的课程就这样结束啦,撒花庆祝,感谢课程组老师和助教们的辛苦付出~

  • 相关阅读:
    BZOJ 3506 机械排序臂 splay
    BZOJ 2843 LCT
    BZOJ 3669 魔法森林
    BZOJ 2049 LCT
    BZOJ 3223 文艺平衡树 splay
    BZOJ 1433 假期的宿舍 二分图匹配
    BZOJ 1051 受欢迎的牛 强连通块
    BZOJ 1503 郁闷的出纳员 treap
    BZOJ 1096 ZJOI2007 仓库设计 斜率优化dp
    BZOJ 1396: 识别子串( 后缀数组 + 线段树 )
  • 原文地址:https://www.cnblogs.com/jyqin1117/p/9225523.html
Copyright © 2011-2022 走看看