20165223实验二面向对象程序设计(代码片段)

乐十六君の博客园 乐十六君の博客园     2022-11-03     521

关键词:

目录

一、实验报告封面

北京电子科技学院(BESTI)

实 验 报 告

课程 Java程序设计 班级 1652班
姓名 蔡霓 学号 20165223
成绩 指导教师 娄嘉鹏
实验日期 2018年4月16日 实验密级 非密级
预习程度 已预习 实验时间 13:45 - 15:25
必修/选修 选修 实验序号

实验名称:面向对象程序设计

实验内容

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

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

3.初步掌握UML建模

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

5.了解设计模式

实验要求

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

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

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

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

返回目录

二、具体实验内容

(一)初步掌握单元测试和TDD

1.参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习

2.提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图,截图上要有画图加水印,输入自己的学号

3.本提交点考查JUnit会不会使用,测试用例至少要包含正常情况,错误情况,边界情况的测试

(1)实验步骤

  • 新建类:MyUtil.java,输入代码
  • 新建一个测试用例类:MyUtilTest,输入代码

Java编程时,程序员对类实现的测试叫单元测试。
我们一般新建一个XXXXTest的类用作类XXXX的测试模块。
这种先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)

  • 进行基于TDD的JUnit测试

(2)实验代码

  • MyUtil.java
public class MyUtil
    public static String percentage2fivegrade(int grade)
        //如果成绩小于60,转成“不及格”
        if (grade < 60)
            return "不及格";
        //如果成绩在60与70之间,转成“及格”
        else if (grade < 70)
            return "及格";
        //如果成绩在70与80之间,转成“中等”
        else if (grade < 80)
            return "中等";
        //如果成绩在80与90之间,转成“良好”
        else if (grade < 90)
            return "良好";
        //如果成绩在90与100之间,转成“优秀”
        else if (grade < 100)
            return "优秀";
        //其他,转成“错误”
        else
            return "错误";
    


  • MyUtilTest
import org.junit.Test;
import junit.framework.TestCase;

public class MyUtilTest extends TestCase 
    @Test
    public void testNormal() 
        assertEquals("不及格", MyUtil.percentage2fivegrade(55));
        assertEquals("及格", MyUtil.percentage2fivegrade(65));
        assertEquals("中等", MyUtil.percentage2fivegrade(75));
        assertEquals("良好", MyUtil.percentage2fivegrade(85));
        assertEquals("优秀", MyUtil.percentage2fivegrade(95));
    

    @Test
    public void testException() 
        assertEquals("错误", MyUtil.percentage2fivegrade(105));
        assertEquals("错误", MyUtil.percentage2fivegrade(-55));
    

    @Test
    public void testBoundary() 
        assertEquals("不及格", MyUtil.percentage2fivegrade(0));
        assertEquals("及格", MyUtil.percentage2fivegrade(60));
        assertEquals("中等", MyUtil.percentage2fivegrade(70));
        assertEquals("良好", MyUtil.percentage2fivegrade(80));
        assertEquals("优秀", MyUtil.percentage2fivegrade(90));
        assertEquals("错误", MyUtil.percentage2fivegrade(100));
    


(3)实验截图

  • 增加测试代码,JUnit出现红条(显示2个错误)

  • 根据提示修改产品代码,JUnit出现绿条,任务完成

返回目录

(二)以TDD的方式研究学习StringBuffer

参考积极主动敲代码,使用JUnit学习Java
以TDD的方式研究学习StringBuffer
提交你的单元测试用例和测试通过的截图,截图要加上学号水印
测试自己会不会写JUnit测试用例

(1)实验步骤

  • 编写StringBufferDemo
  • 快速编写测试代码StringBufferDemoTest
  • TDD运行报错、更正代码
  • 出现绿条,成功

(2)实验代码

  • StringBufferDemo
public class StringBufferDemo 
    public static void main(String [] args)
        StringBuffer buffer = new StringBuffer();
        buffer.append(\'S\');
        buffer.append("tringBuffer");
        System.out.println(buffer.charAt(1));
        System.out.println(buffer.capacity());
        System.out.println(buffer.indexOf("tring"));
        System.out.println("buffer = " + buffer.toString());
    


  • 测试代码StringBufferDemoTest
import junit.framework.TestCase;
import org.junit.Test;

import java.lang.management.BufferPoolMXBean;

public class StringBufferDemoTest extends TestCase 
    StringBuffer str=new StringBuffer("StringBuffer");
    @Test
    public void testcharAt ()
        assertEquals(\'S\',str.charAt(0));
        assertEquals(\'B\',str.charAt(6));
    
    @Test
    public void testcapacity()
        assertEquals(28,str.capacity());
    
    @Test
    public void testindexof()
        assertEquals(6,str.indexOf("Buffer"));
    
    @Test
    public void testtoString()
        assertEquals("str:StringBuffer","str:"+str.toString());
    



(3)实验截图

返回目录

(三)面向对象程序设计-3 OCP原则和DIP原则的应用

参考http://www.cnblogs.com/rocedu/p/4472842.html
对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
用自己的学号%6进行取余运算,根据结果(结果是5)进行代码扩充:
5: 让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

(1)实验步骤

  • 对设计模式示例进行扩充,扩充出DoubleDoubleFactory

(2)实验代码

abstract class Data 
    abstract public void DisplayValue();


class Double extends Data
    double value;

    Double()
        value=5;
    
    public void DisplayValue()
        System.out.println(value);
    


abstract class Factory 
    abstract public Data CreateDataObject();


class DoubleFactory extends Factory
    public Data CreateDataObject()
        return new Double();
    


class Document 
    Data pd;
    Document(Factory pf)
        pd = pf.CreateDataObject();
    
    public void DisplayData()
        pd.DisplayValue();
    


public class MyDoc 
    static Document d;
    public static void main(String[] args) 
        d = new Document(new DoubleFactory());
        d.DisplayData();
    


(3)实验截图

返回目录

(四)面向对象程序设计-4 以TDD的方式开发一个复数类Complex

参考http://www.cnblogs.com/rocedu/p/6736847.html
任务:以TDD的方式开发一个复数类Complex

(1)实验步骤

  • 定义属性并生成getter,setter

double RealPart;
double ImagePart;

  • 定义构造函数

public Complex()
public Complex(double R,double I)

  • Override Object

public boolean equals(Object obj)
public String toString()

  • 定义公有方法:加减乘除

Complex ComplexAdd(Complex a)
Complex ComplexSub(Complex a)
Complex ComplexMulti(Complex a)
Complex ComplexDiv(Complex a)

(2)实验代码

  • Complex
public class Complex 

    private double RealPart;
    private double ImagePart;

    public Complex() 

    

    public Complex(double R, double I) 
        this.RealPart = R;
        this.ImagePart = I;
    

    public double getRealPart() 
        return RealPart;
    

    public void setRealPart(double realPart) 
        RealPart = realPart;
    

    public double getImagePart() 
        return ImagePart;
    

    public void setImagePart(double imagePart) 
        ImagePart = imagePart;
    

    public boolean equals(Object obj) 
        if (this == obj) 
            return true;
        
        if (!(obj instanceof Complex)) 
            return false;
        
        Complex complex = (Complex) obj;
        if (complex.RealPart != ((Complex) obj).RealPart) 
            return false;
        
        if (complex.ImagePart != ((Complex) obj).ImagePart) 
            return false;
        

        return true;
    

    public String toString() 
        String string = "";
        if (ImagePart > 0)
            string = RealPart + "+" + ImagePart + "i";
        if (ImagePart == 0)
            string = RealPart + "";
        if (ImagePart < 0)
            string = RealPart + " " + ImagePart + "i";
        return string;
    

    Complex ComplexAdd(Complex a) 
        return new Complex(RealPart + a.RealPart, ImagePart + a.ImagePart);
    

    Complex ComplexSub(Complex a) 
        return new Complex(RealPart - a.RealPart, ImagePart - a.ImagePart);
    

    Complex ComplexMulti(Complex a) 
        return new Complex(RealPart * a.RealPart - ImagePart * a.ImagePart, ImagePart * a.RealPart + RealPart * a.ImagePart);
    

    Complex ComplexDiv(Complex a) 
        Complex d = new Complex();
        d.RealPart = (this.RealPart * a.RealPart + this.ImagePart * a.ImagePart) / (a.RealPart * a.RealPart + a.ImagePart * a.ImagePart);
        d.ImagePart = (this.ImagePart * a.RealPart - this.RealPart * a.ImagePart) / (a.RealPart * a.RealPart + a.ImagePart * a.ImagePart);
        return d;

    



  • 测试代码ComplexTest
import org.junit.*;
import static org.junit.Assert.*;
public class ComplexTest 
    Complex a = new Complex(0, 2);
    Complex b = new Complex(2, -1);
    @Test
    public void testAdd() 
        assertEquals("2.0+1.0i", a.ComplexAdd(b).toString());
        System.out.println(a.ComplexAdd(b));
    
    @Test
    public void testSub() 
        assertEquals("-2.0+3.0i", a.ComplexSub(b).toString());
        System.out.println(a.ComplexSub(b));
    
    @Test
    public void testMulti() 
        assertEquals("2.0+4.0i", a.ComplexMulti(b).toString());
        System.out.println(a.ComplexMulti(b));
    
    @Test
    public void testDiv() 
        assertEquals("-0.4+0.8i", a.ComplexDiv(b).toString());
        System.out.println(a.ComplexDiv(b));
    


(3)实验截图

返回目录

(五)面向对象程序设计-5 对代码进行UML类图建模

使用WhiteStarUML对实验二中的代码(选其一)进行建模,发类图的截图,加上学号水印。
参考http://www.cnblogs.com/rocedu/p/6736847.html,类图中至少有两个类。

(1)实验步骤

  • 打开StarUML,选择对MyDoc.java进行UML类图建模
  • 注意MyDoc中各变量和方法的名字

(2)实验截图

返回目录

三、实验总结

  • 遇到的问题

刚开始使用TDD测试代码的时候还不太熟练,看到出现红条后一位运行失败了,仔细参考老师所给教程后得知可以直接在测试代码上进行修改,只需要看下端提示栏中显示的错误,就能直接点击跳转过去,并且按照给出的结论修改代码即可最终成功。另外还要查缺补漏,将各种可能性都包含在内,才能将代码进一步完善。

  • 分析与总结

这次实验蛮难的……涉及到的内容也挺多,主要是新增了单元测试和TDD的使用,从未接触过有些措手不及,所以刚开始的时候犯了挺多错误做了无用功。后来跟着教程了解到快速创建测试代码test的方法,发现IDEA真的很方便啊,增添了测试用例的使用就能更快的找出错误的地方,还能自动报错,直接帮你指出错误应该怎么修改,只需要动动手改正就行。这个实验考验了我的思维能力,毕竟要想使自己的代码显得完美无缺,就要将方方面面的漏洞都考虑到,再加上测试代码这个辅助,才能在有效时间里高效的操作,更正,完善带密码。当然以后也希望能用上这个方法对代码进行检查,特别是长代码就更需要机器帮忙识别报错了。

  • 参考资料
  1. Intellj IDEA 简易教程-单元测试
  2. 实验二《Java面向对象程序设计》的一点说明
  3. 积极主动敲代码,使用JUnit学习Java
  4. 实验二 Java面向对象程序设计

返回目录

四、PSP时间

实验步骤 耗时 百分比
题目分析 1h 10%
思路设计 2h 20%
代码实现 5h 50%
调试测试 1h 10%
实验总结 1h 10%

返回目录

20165201实验二面向对象程序设计(代码片段)

##20165201实验二面向对象程序设计Java面向对象程序设计-1实验目的与要求:参考http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST完成单元测试的学习提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图,截图上... 查看详情

实验报告二面向对象程序设计(代码片段)

一、面向对象程序设计-11、检查点要求参考http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST参考http://www.cnblogs.com/rocedu/p/6736847.html提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。2、截图3、相关代码的... 查看详情

20165223结对编程之四则运算(代码片段)

...图六、结对感受一、结对对象担任角色驾驶员(Driver):20165223蔡霓(是控制键盘输入的人)领航员(Navigator):20165218赵冰雨(起到领航、提醒的作用)搭档本次结对博客:本次结对码云链接:二、需求分析取自《结对编程项... 查看详情

2018-2019-220175308实验二《面向对象程序设计》实验报告(代码片段)

20175308实验二《Java面向对象程序设计》实验报告一、前期准备:单元测试和TDD:(一)单元测试我们首先要会写三种代码:伪代码产品代码测试代码Java编程中,我们首先写伪代码,它与具体的编程语言无关,从意图层面来解决... 查看详情

20175209实验二《java面向对象程序设计》实验报告

20175209实验二《Java面向对象程序设计》实验报告一、实验前期准备了解三种代码伪代码产品代码测试代码我们先写伪代码,伪代码从意图层面来解决问题;有了伪代码我们用特定编程语言翻译一下,就是可用的产品代码;写完产... 查看详情

实验二:java面向对象程序设计

实验二Java面向对象程序设计目录[一、单元测试和TDD](#first)[任务一:实现百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能](#firstTask)[任务二:以TDD的方式研究学习StringBuffer](#SecondTask)[二、面向对象三要素:封装... 查看详情

2018-2019-220175207实验二《面向对象程序设计》实验报告(代码片段)

目录IDEA中下载并配置单元测试工具JUnit使用Junit学JAVATDDS.O.L.I.D原则实验总结IDEA中下载并配置单元测试工具JUnit(虚拟机中)下载File->Settings或Ctrl+Alt+S进入Settings页面,点击Plugins,在搜索框内输入junit,找到对应的工具并下载。... 查看详情

python程序设计实验7:面向对象编程(代码片段)

面向对象编程一、编写类RegularPolygon,表示正n边形。类包括:(1)大致思路:(2)编程实现:(3)运行并测试:二、自定义数据结构栈。栈是一种后进先出(Last-In-First-Out)的... 查看详情

2018-2019-120165223实验三实时系统(代码片段)

...系统--并发程序目录一、实验内容任务一:基于LinuxSocket程序设计实现wc服务器和客户端任务二:使用多线程实现wc服务器二、实验总结(一)遇到的问题(二)分析与总结(三)参考资料一、实验内容任务一:基于LinuxSocket程序... 查看详情

20175213《java程序设计》实验二java面向对象程序设计实验报告

实验内容1.初步掌握单元测试和TDD2.理解并掌握面向对象三要素:封装,继承,多态3.初步掌握UML建模4.熟悉S.O.L.I.D原则5.了解设计模式知识总结1.伪代码2.产品代码:①Java编程时,程序员对类实现的测试叫单元测试。②测试用例是... 查看详情

2018-2019-220175211实验二《java面向对象程序设计》实验报告

目录代码托管一、命令行下Java程序开发二、IDEA下Java程序开发、调试(1)建立与Git的链接(2)开发、调试程序(3)上传代码至码云三、练习四、问题及解决五、学习总结代码托管一、命令行下Java程序开发在码云上建立以学号命名的仓... 查看详情

2018-2019-220175105王鑫浩实验二《java面向对象程序设计》实验报告

一、实验步骤1.初步掌握单元测试和TDD2.理解并掌握面向对象三要素:封装,继承,多态3.初步掌握UML建模4.熟悉S.O.L.I.D原则5.了解设计模式二、实验内容(一)、单元测试1.三种代码伪代码百分制转五分制:如果成绩小于60,转成... 查看详情

狄慧201771010104《面向对象程序设计(java)》第八周学习总结(代码片段)

实验六接口的定义与使用实验时间2018-10-18一、实验目的与要求(1)掌握接口定义方法;(2)掌握实现接口类的定义要求;(3)掌握实现了接口类的使用要求;(4)掌握程序回调设计模式;(5)掌握Comparator接口用法;(6)掌握对象浅层拷贝与... 查看详情

面向对象方法及软件工程实验二(代码片段)

一.代码链接:https://gitee.com/GjqDream/css_learning/tree/master二.网页截图:当鼠标移动到电影名字上或旁边时会有简单的动画效果——字体加粗、背景色渐变,当鼠标移动到电影类别上时会改变背景色,点击时会跳转到相应的类... 查看详情

面向对象设计与构造课程总结作业(代码片段)

...面向对象方法理解的演进在面向对象课之前上学期写某物实验的数据处理程序和某组实验的数据生成程序的时候,比较频繁的使用结构体套函 查看详情

2018-2019-220175202实验二《java面向对象程序设计》实验报告

2018-2019-220175202实验二《Java面向对象程序设计》实验报告一、实验内容1.初步掌握单元测试和TDD2.理解并掌握面向对象三要素:封装、继承、多态3.初步掌握UML建模4.熟悉S.O.L.I.D原则5.了解设计模式二、实验要求1.没有Linux基础的同... 查看详情

20182332实验五《数据结构与面向对象程序设计》实验报告(代码片段)

20182332实验五《数据结构与面向对象程序设计》实验报告课程:《程序设计与数据结构》班级:1823姓名:盛国榕学号:20182332实验教师:王志强实验日期:2019年10月11日必修/选修:必修1.实验内容&过程&结果任务一:完成Hell... 查看详情

20192304实验六《数据结构和面向对象的程序设计》实验报告(代码片段)

201923042020-2021-1《数据结构与面向对象程序设计》实验五报告课程:《程序设计与数据结构》班级:1923姓名:刘润衡学号:20192304实验教师:王志强实验日期:2020年11月5日必修/选修:必修1.实验内容(1)通过键盘输入一些整数,... 查看详情