• 20135337朱荟潼Java实验报告二


    20135337朱荟潼

    实验二 Java面向对象程序设计

    一、实验内容

    1. 初步掌握单元测试和TDD

    2. 理解并掌握面向对象三要素:封装、继承、多态

    3. 初步掌握UML建模

    4. 熟悉S.O.L.I.D原则

    5. 了解设计模式

    二、实验要求

    1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

    2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)解决办法(空洞的方法如查网络问同学看书等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

    3. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

    4. 请大家先在实验楼中的~/Code目录中用自己的学号建立一个目录,代码和UML图要放到这个目录中,截图中没有学号的会要求重做,然后跟着下面的步骤练习

    三、实验步骤

    (一)单元测试

    (1) 三种代码

    伪代码、产品代码、测试代码

     (2) TDD(Test Driven Devlopment, 测试驱动开发)

    (1)a.先写测试代码,然后再写产品代码的开发方法叫测试驱动开发TDD)。TDD的一般步骤如下:

    • 明确当前要完成的功能,记录成一个测试列表
    • 快速完成编写针对此功能的测试用例
    • 测试代码编译不通过(没产品代码呢)
    • 编写产品代码
    • 测试通过
    • 对代码进行重构,并保证测试通过(重构下次实验练习)
      • 循环完成所有功能的开发

    b.基于TDD,我们不会出现过度设计的情况,需求通过测试用例表达出来了,我们的产品代码只要让测试通过就可以了。 Java中有单元测试工具JUnit来辅助进行TDD 

    红叉说明代码存在语法错误,原因很简单,MyUtil类还不存在,类中的percentage2fivegrade方法也不存在,我们在TDDDemosrc目录中新建一个MyUtil的类,并实现percentage2fivegrade方法

    c.测试结果出现了一个绿条(green bar,说明测试通过了。

    (2)TDD的编码节奏是:

    增加测试代码、JUnit出现红条、修改产品代码、JUnit出现绿条,任务完成

    (二)面向对象三要素

    1)抽象

    2)封装、继承与多态

    (三)设计模式初步

    1S.O.L.I.D原则

    面向对象三要素是封装、继承、多态,任何面向对象编程语言都会在语法上支持这三要素。如何借助抽象思维用好三要素特别是多态还是非常困难的,S.O.L.I.D类设计原则是一个很好的指导:

    • SRP(Single Responsibility Principle,单一职责原则)
    • OCP(Open-Closed Principle,开放-封闭原则)
    • LSP(Liskov Substitusion Principle,Liskov替换原则)
    • ISP(Interface Segregation Principle,接口分离原则)
    • DIP(Dependency Inversion Principle,依赖倒置原则)

    (四)练习

    1使用TDD的方式设计关实现复数类Complex

    2.实验报告中统计自己的PSP(Personal Software Process)时间

     

    四、具体实现的步骤截图

    1

     

    (2)

    (3)

    a.

    b.

    (3)

    (4)

    (4)实现复数

    伪代码:

    复数的加减运算:

    定义一个整型a作为实部;

    定义一个整型b作为虚部;

    运算后定义newA作为实部;

    运算后定义newB作为虚部;

    加法运算返回p1

    减法运算返回p2

    输出加、减运算结果;

    产品代码:

    //实现复数的加减

    class complex

    {

    int a,b;  //a表示实部,b表示虚部

    void complex(int a,int b){

    this.a=a;

    this.b=b;

    }

    int Shi(){

    return a;

    }

    int Xu(){

    return b;

    }

    complex add(complex p){

    int aa=p.Shi();

    int bb=p.Xu();

    int newA=aa+a;

    int newB=bb+b;

    complex p1=new complex();

    p1.complex(newA, newB);

    return p1;

    }

    complex sub(complex p){

    int aa=p.Shi();

    int bb=p.Xu();

    int newA=aa-a;

    int newB=bb-b;

    complex p2=new complex();

    p2.complex(newA, newB);

    return p2;

    }

    }

    public class Comp5337{

    public static void main(String[] args){

    complex c1=new complex();

    complex c2=new complex();

    c1.complex(1, 2);

    c2.complex(3, 1);

    complex p1=c1.add(c2);

    int p1a=p1.Shi();

    int p1b=p1.Xu();

    System.out.println("a="+p1a+",bi="+p1b+"i");

    System.out.printf("=%d+%di",p1a,p1b);

    System.out.println();

    complex p2=c1.sub(c2);

    int p2a=p2.Shi();

    int p2b=p2.Xu();

    System.out.printf("=%d-%di",p1a,p1b);

    }

    }

    测试代码:

    五、PSP时间分析

    步骤

    耗时

    百分比

    需求分析

    1小时 

     12.5%

    设计

     2小时

     25%

    代码实现

     2小时

     25%

    测试

     2小时

     25%

    分析总结

     1小时

     12.5%

    六、遇到的问题及解决方法

    1,由于win8系统,虚拟机一直出现问题,无法正常工作。因此,使用了电脑上的Ecliose软件。2测试代码的编写过程中由于对知识的不完全熟悉,花费了许多时间,对代码的修改也是反复进行。3,在UML画图,第一次画时,忘记了画箭头,随后补上了。 

    七、总结及体会

    这次实验相比较第一次实验还是很有难度的,首先,知识点远比上一次的多,这就要求我课下还需对理论知识进行梳理巩固。其次,由于电脑系统原因,没能够在这次实验中全程使用虚拟机,比较遗憾,我会尽快处理好虚拟机的问题。然后,对于单元测试,我认为是有利于学习的,在动手编代码的过程中巩固了课本上的理论知识,让知识付诸实践,虽然在设计、编写代码时仍不太顺利,但是java面向对象的思想有助于整理思路。通过这次实验,我在代码设计及编写方面欠缺很多,今后还需努力学习。

     

     

     

    20135337
  • 相关阅读:
    树点涂色
    搜索+DP的一波小水题
    洛谷 P2194 HXY烧情侣
    洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur
    走楼梯升级版(9.8 模拟赛。。。xxy原创)
    洛谷 P2966 [USACO09DEC]牛收费路径Cow Toll Paths
    Tyvj P2207 上学路线route
    cogs 2342. [SCOI2007]kshort
    洛谷 P2740 [USACO4.2]草地排水Drainage Ditches
    洛谷 P1318 积水面积
  • 原文地址:https://www.cnblogs.com/zzzz5/p/4483765.html
Copyright © 2020-2023  润新知