一、实验报告封面

    • 课程:Java程序设计 班级:1751 班 姓名:谢文航 学号:20175126
    • 指导教师:娄嘉鹏 实验日期:2019年4月17日
    • 实验时间:--- 实验序号:实验二
    • 实验名称:Java开发环境的熟悉
    • 实验题目:
    • 实验要求:
      • 完成实验二《Java面向对象程序设计》中的内容
      • 其中Eclipse相关的内容参考Intellj IDEA 简易教程换成IDEA实现
      • 参考实验二《Java面向对象程序设计》的一点说明,完成云班课中的检查点,也可以先完成实验报告,直接提交。注意不能只有截图,要有知识点,原理,遇到的问题和解决过程等说明。实验报告中一个检查点要有多张截图。
      • 发表实验报告博客,标题“学期(如2018-2019-2) 学号(如20175300)实验二《Java面向对象程序设计》实验报告”

二、实验内容

(一)单元测试

  (1) 三种代码: 伪代码、产品代码、测试代码。
  伪代码与具体编程语言无关,伪代码从意图层面来解决问题,最终,伪代码是产品代码最自然的、最好的注释。

  • 伪代码:

百分制转五分制:
如果成绩小于60,转成“不及格”
如果成绩在60与70之间,转成“及格”
如果成绩在70与80之间,转成“中等”
如果成绩在80与90之间,转成“良好”
如果成绩在90与100之间,转成“优秀”
其他,转成“错误”

  • 产品代码:

  • public class MyUtil {
    public static String percentage2fivegrade(int grade) {
    if (grade < 0)
    return "错误";
    else if(grade<60){
    return "不及格";
    }
    else if(grade<70){
    return "及格";
    }
    else if(grade<80){
    return "中等";
    }
    else if (grade<90){
    return "良好";
    }
    else if (grade<=100){
    return "优秀";
    }
    else
    return "错误";
    }
    }
  • 测试代码:

  • 测试代码:
    import junit.framework.TestCase;
    import org.junit.Test; 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(-55));
    assertEquals("错误",MyUtil.percentage2fivegrade(115));
    }
    @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));
    }
    }
  • 具体流程:在IDEA中打开一个项目,并打开其测试项,插入代码

  • 但是一般刚插进去的时候,test部分会是红色的,这需要我们先插入Junit包:

  • 首先用everthing找到junit.jar的位置:

  • 然后插入junit.jar:

  • 接下来根据要求补充完整后,运行,看是否结果符合预期。

  • 最终运行测试图:

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

  • 一般步骤

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

    public class StringBufferDemo {
    public static void main(String [] args){
    StringBuffer buffer = new StringBuffer();
    buffer.append('S');
    buffer.append("tringBuffler");
    System.out.println(buffer.charAt(1));
    System.out.println(buffer.indexOf("tring"));
    System.out.println("buffer = "+buffer.toString());
    }
    }
  • 测试代码

import junit.framework.TestCase;
import org.junit.Test; public class StringBufferDemoTest extends TestCase {
StringBuffer a = new StringBuffer("StringBuffer");
StringBuffer b = new StringBuffer("StringBufferStringBuffer");
StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");
@Test
public void testcapacity() throws Exception{
assertEquals(28,a.capacity());
assertEquals(40,b.capacity());
assertEquals(52,c.capacity());
}
@Test
public void testcharAt() throws Exception{
assertEquals('S',a.charAt(0));
assertEquals('g',a.charAt(5));
assertEquals('r',a.charAt(11));
}
@Test
public void testlength() throws Exception{
assertEquals(12,a.length());
assertEquals(24,b.length());
assertEquals(36,c.length());
}
@Test
public void testindexOf() throws Exception{
assertEquals(0,a.indexOf("Str"));
assertEquals(5,a.indexOf("gBu"));
assertEquals(7,a.indexOf("uff"));
} }
  • 照例,创建好StringBufferDemo.java后,创建一个test:

  • 测试结果运行图:

(三)任务三:对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式

  • 产品代码

    abstract class Data{
    public abstract void DisplayValue();
    }
    class Integer extends Data {
    int value;
    Integer(){
    value=100;
    }
    public void DisplayValue(){
    System.out.println(value);
    }
    }
    class Boolean extends Data {
    boolean value;
    Boolean() {
    value=true;
    }
    public void DisplayValue(){
    System.out.println (value);
    }
    }
    class Document {
    Data pd,qw;
    Document() {
    pd=new Integer();
    qw=new Boolean();
    }
    public void DisplayData(){
    pd.DisplayValue();
    qw.DisplayValue();
    }
    }
    public class MyDoc {
    static Document d;
    public static void main(String[] args) {
    d = new Document();
    d.DisplayData();
    }
    }
  • 首先我们根据要求算一下自己应该做第几题:26%2=2,所以做第二题:

  • 2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
  • 要想输出Boolean,就必须要先添加一个Boolean的小类,可以依葫芦画瓢,根据上面Integer的内容写出Boolean的代码:

  • 最后再在输出的Document类上加上刚才增加的内容:

  • class Document {
    Data pd,qw;
    Document() {
    pd=new Integer();
    qw=new Boolean();
    }
    public void DisplayData(){
    pd.DisplayValue();
    qw.DisplayValue();
    }
    }

      

  • 最终运行结果图,符合预期:

(四)任务四:以TDD的方式开发一个复数类Complex

  • 产品代码

    import static java.lang.Math.sqrt;
    
    public class MyComplex {
    double realpart,imagepart;
    public MyComplex(double R,double I){
    realpart=R;
    imagepart=I;
    }
    public double getRealPart(){
    return realpart;
    }
    public double getImagePart(){
    return imagepart;
    }
    public MyComplex Complexjiafa(MyComplex a){
    return new MyComplex((realpart+a.realpart),imagepart+a.imagepart);
    }
    public MyComplex Complexjianfa(MyComplex a){
    return new MyComplex((realpart-a.realpart),imagepart-a.imagepart);
    }
    public MyComplex Complexchengfa(MyComplex a){
    return new MyComplex((realpart*a.realpart-imagepart*a.imagepart),realpart*a.imagepart+imagepart*a.realpart);
    }
    public MyComplex Complexchufa(MyComplex a){
    double d = sqrt(a.realpart*a.realpart)+sqrt(a.imagepart*a.imagepart);
    double e = (realpart*a.imagepart-imagepart*a.realpart);
    return new MyComplex((realpart*a.realpart+imagepart*a.imagepart)/d,imagepart/a.imagepart);
    }
    public static void main(String args[]){
    MyComplex w = new MyComplex(2,10);
    MyComplex e = new MyComplex(1,3);
    MyComplex a = new MyComplex(4,5);
    MyComplex b = new MyComplex(3,7);
    a.Complexjiafa(b);
    System.out.println("("+a.realpart+"+"+a.imagepart+"i)+("+b.realpart+"+"+b.imagepart+"i)="+a.Complexjiafa(b).realpart+"+"+a.Complexjiafa(b).imagepart+"i");
    System.out.println("("+a.realpart+"+"+a.imagepart+"i)-("+e.realpart+"+"+e.imagepart+"i)="+a.Complexjianfa(e).realpart+"+"+a.Complexjianfa(e).imagepart+"i");
    System.out.println("("+a.realpart+"+"+a.imagepart+"i)*("+b.realpart+"+"+b.imagepart+"i)="+a.Complexchengfa(b).realpart+"+"+a.Complexchengfa(b).imagepart+"i");
    System.out.println("("+a.realpart+"+"+a.imagepart+"i)/("+w.realpart+"+"+w.imagepart+"i)="+a.Complexchufa(w).realpart+"+"+a.Complexchufa(w).imagepart+"i");
    } }
  • 测试代码

  • import junit.framework.TestCase;
    import org.junit.Test; public class MyComplexTest extends TestCase {
    MyComplex a = new MyComplex(4,5);
    MyComplex b = new MyComplex(3,7);
    MyComplex c = new MyComplex(2.7,9.5);
    MyComplex d = new MyComplex(8,2.1);
    MyComplex e = new MyComplex(8,15);
    @Test
    public void testgetRealPart() throws Exception {
    assertEquals(4.0,a.getRealPart());
    assertEquals(2.7,c.getRealPart());
    }
    @Test
    public void testgetImagePart()throws Exception{
    assertEquals(7.0,b.getImagePart());
    assertEquals(2.1,d.getImagePart());
    }
    @Test
    public void testComplexjiafa()throws Exception{
    assertEquals(7.0,a.Complexjiafa(b).realpart);
    assertEquals(11.6,c.Complexjiafa(d).imagepart);
    }
    @Test
    public void testComplexjianfa()throws Exception{
    assertEquals(1.0,a.Complexjianfa(b).realpart);
    assertEquals(7.4,c.Complexjianfa(d).imagepart);
    }
    @Test
    public void testComplexchengfa()throws Exception{
    assertEquals(-23.0,a.Complexchengfa(b).realpart);
    assertEquals(81.67,c.Complexchengfa(d).imagepart);
    }
    @Test
    public void testComplexchufa()throws Exception{
    assertEquals(2.0,e.Complexchufa(a).realpart);
    assertEquals(3.0,e.Complexchufa(a).imagepart);
    }
    }

      

  • 首先思路是,要有一个定义复数的函数,即有实数部,和虚数部:

  • 再设计一个,返回实数部和返回虚数部的函数:

  • 最后再依次设计加减乘除的算法:

  • 最后再增加一个test对其进行测试,看是否符合预期:

  • 测试图:

(五)任务五:使用StarUML对实验二中的代码进行建模

  • UML图:

三、实验中遇到的问题及解决过程

问题1:添加junit.jar包后还是找不到文件test

问题1解决办法:

上网百度了一下,只要再将Junit-4.12.jar添加进去即可

问题2:在test的时候出现看不懂的英文错误

问题2解决办法:

百度了一下,test部分的名称必须为主程序里有的类,且首字母必须为小写。

问题3:出现错误:无法从静态上下文中引用上文方法

问题3解决办法:

使用getRealPart()函数的方法错误,应改为所定义的函数方式。

四、实验体会

本次实验我感觉难度很大,在做实验的时候,也在不停的百度,看能否解决自己的问题,虽然很累但收获也很多,并且也学会了UNL图的制作办法。

五、参考资料

2018-2019-2 20175126谢文航 实验二《Java面向对象程序设计》实验报告的更多相关文章

  1. 20145239杜文超 《Java程序设计》实验二 Java面向对象程序设计实验报告

    20145239 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...

  2. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  3. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  4. 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告

    20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...

  5. 20162311 实验二 Java面向对象程序设计 实验报告

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  6. 实验二Java面向对象程序设计实验报告(2)

    实验二 Java面向对象程序设计 实验概述: 课程:程序设计与数据结构 班级:1623班 姓名: 邢天岳 学号:2309 指导老师:娄老师 王老师 实验日期:2017.4.16 实验名称: Java面 ...

  7. 实验二 Java面向对象程序设计实验报告

    实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验 ...

  8. 20145326《Java程序设计》实验二Java面向对象程序设计实验报告

    20145326<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  9. 20155217 实验二 Java面向对象程序设计 实验报告

    20155217 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模 ...

  10. 20145219 《Java程序设计》实验二 Java面向对象程序设计实验报告

    20145219 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...

随机推荐

  1. python 字符串转16进制函数

    需要用python处理16进制的文本,比如像下面这个文本 40 80 C0 40 80 C0 40 80 C0 40 80 C0 40 BF CC 40 80 C0 40 80 C0 40 80 C0 ...

  2. Mono的CustomConditionAttribute使用

    1.Mono的CustomConditionAttribute使用有诸多的限制,没有在XML中定义来的灵活 2.CustomConditionAttribute定义的子类必须和ExtensionAtt ...

  3. Ehcache3.4 XML配置硬盘存储

    最近开始学习使用Ehcache, 3.4的文档实在过于简单,尤其是对于XML配置,例子太少.相对于硬编码,我更偏爱灵活的XML配置,为了实现xml配置,摸索了两天,终于运行成功. ehcache.xm ...

  4. codeblock 生成和使用makefile

    下载cbp2make 文件名:cbp2make-stl-rev138.tar.gz 里面有个cbp文件用codeblock打开,编译,生成的bin目录下有个执行文件. 使用命令生成Makefile . ...

  5. POJ3094 Quicksum

    POJ3094 Quicksum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18517   Accepted: 1271 ...

  6. Webdriver+Testng实现测试用例失败自动截图功能

    testng执行测试用例的时候,如果用例执行失败会自动截图,方便后续排查问题 1.首先定义一个截图类: package com.rrx.utils; import java.io.File;impor ...

  7. hash加密

    hash import hashlib content = 'its so coll'.encode('utf8') o = hashlib.sha1() # 创建一个hash对象 o.update( ...

  8. Anatomy of a Database System学习笔记 - 存储管理

    使用裸设备,还是使用文件系统?   描述 pros cons 裸设备 顺序读磁盘快比随机要快10-100倍,DB比OS更懂磁盘负载,因此很多DB是直接管理数据块如何存放的. DB对裸设备的管理,比文件 ...

  9. sql server 报错处理

    1.错误:针对程序集 'StoreProc' 的 CREATE ASSEMBLY 失败,因为程序集 'StoreProc' 未获授权,不满足 PERMISSION_SET = UNSAFE.满足以下两 ...

  10. App专项测试之弱网测试

    转载 https://blog.csdn.net/TestingGDR/article/details/83059415