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

实验内容

单元测试

三种代码

  • 伪代码
百分制转五分制:
如果成绩小于60,转成“不及格”
如果成绩在60与70之间,转成“及格”
如果成绩在70与80之间,转成“中等”
如果成绩在80与90之间,转成“良好”
如果成绩在90与100之间,转成“优秀”
其他,转成“错误”
  • 产品代码
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 "错误";
}
}
  • 边界情况测试代码
public class MyUtil1Test1 {
public static void main(String[] args) {
//测试边界情况
if(MyUtil.percentage2fivegrade(0) != "不及格")
System.out.println("test failed 1!");
else if(MyUtil.percentage2fivegrade(60) != "及格")
System.out.println("test failed 2!");
else if(MyUtil.percentage2fivegrade(70) != "中等")
System.out.println("test failed 3!");
else if(MyUtil.percentage2fivegrade(80) != "良好")
System.out.println("test failed 4!");
else if(MyUtil.percentage2fivegrade(90) != "优秀")
System.out.println("test failed 5!");
else if(MyUtil.percentage2fivegrade(100) != "优秀")
System.out.println("test failed 6!");
else
System.out.println("test passed!");
}
}

  • 修改代码后测试边界情况
        if(MyUtil.percentage2fivegrade(0) != "不及格")
System.out.println("test failed 1!");
else if(MyUtil.percentage2fivegrade(60) != "及格")
System.out.println("test failed 2!");
else if(MyUtil.percentage2fivegrade(70) != "中等")
System.out.println("test failed 3!");
else if(MyUtil.percentage2fivegrade(80) != "良好")
System.out.println("test failed 4!");
else if(MyUtil.percentage2fivegrade(90) != "优秀")
System.out.println("test failed 5!");
else if(MyUtil.percentage2fivegrade(100) != "优秀")
System.out.println("test failed 6!");
else System.out.println("test passed!");

面向对象三要素

1.抽象

(1)抽象就是抽出事物的本质特征而暂时不考虑他们的细节,对于复杂系统问题人们借助分层次抽象的方法进行问题求解。

(2)在抽象的最高层,可以使用问题环境的语言,以概括的方式叙述问题的解。在抽象的较低层,则采用过程化的方式进行描述。

(3)在描述问题解时,使用面向问题和面向实现的术语。

(4)程序设计中,抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象的结果是函数,数据抽象的结果是抽象数据类型。

2.封装、继承与多态

(1)面向对象(Object-Oriented)的三要素包括:封装、继承、多态。

(2)封装实际上使用方法(method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,从而带来模块化和信息隐藏的好处。

(3)接口是封装的准确描述手段。

TDD的使用

1.TDD的一般步骤如下:

明确当前要完成的功能;

记录成一个测试列表;

快速完成编写针对此功能的测试用例;

测试代码编译不通过;

编写并完善产品代码;

测试通过;

对代码进行重构,并保证测试通过;

循环完成所有功能的开发。

2.TDD的编码节奏是:

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

3.在IDEA中设置使得IDEA具备单元测试功能

public class MyUtil{
public static String percentage2fivegrade(int grade){
//如果成绩小于0,转成“错误”
if ((grade < 0))
return "错误";
//如果成绩小于60,转成“不及格”
else 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 "优秀";
//如果成绩大于100,转成“错误”
else
return "错误";
}
}

4.完善代码

复数类Complex

  • 首先编写一段实现复数加减乘的代码如下
public class ComplexNumber { // 复数类
double m_dRealPart; // 实部
double m_dImaginPart; // 虚部
ComplexNumber(double m_dRealPart,double m_dImaginPart){ // 带参数的构造方法
this.m_dRealPart = m_dRealPart;
this.m_dImaginPart = m_dImaginPart;
}
public ComplexNumber() {
// TODO Auto-generated constructor stub
}
public double getRealPart() {
return m_dRealPart;
}
public void setRealPart(double m_dRealPart) {
this.m_dRealPart = m_dRealPart;
}
public double getImaginPart() {
return m_dImaginPart;
}
public void setImaginPart(double m_dImaginPart) {
this.m_dImaginPart = m_dImaginPart;
}
ComplexNumber add(ComplexNumber a){ // 复数相加
double m_dRealPart2 = a.getRealPart();
double m_dImaginPart2 = a.getImaginPart();
double newM_dRealPart = m_dRealPart + m_dRealPart2;
double newM_dImaginPart = m_dImaginPart + m_dImaginPart2;
ComplexNumber result = new ComplexNumber(newM_dRealPart,newM_dImaginPart);
return result;
}
ComplexNumber sub(ComplexNumber a){ // 复数相减
double m_dRealPart2 = a.getRealPart();
double m_dImaginPart2 = a.getImaginPart();
double newM_dRealPart = m_dRealPart - m_dRealPart2;
double newM_dImaginPart = m_dImaginPart - m_dImaginPart2;
ComplexNumber result = new ComplexNumber(newM_dRealPart,newM_dImaginPart);
return result;
}
ComplexNumber mul(ComplexNumber a){ // 复数相乘
double m_dRealPart2 = a.getRealPart();
double m_dImaginPart2 = a.getImaginPart();
double newM_dRealPart = m_dRealPart* m_dRealPart2 - m_dImaginPart*m_dImaginPart2;
double newM_dImaginPart = m_dImaginPart* m_dRealPart2 + m_dRealPart*m_dImaginPart2;
ComplexNumber result = new ComplexNumber(newM_dRealPart,newM_dImaginPart);
return result;
} public void print(){ // 用于格式化输出
if(m_dImaginPart > 0){
System.out.println(m_dRealPart + " + " + m_dImaginPart + "i");
}else if(m_dImaginPart < 0){
System.out.println( m_dRealPart+ "" + m_dImaginPart + "i");
}else{
System.out.println( m_dRealPart);
}
}
// 封装了具体运算,主要为对输入进行转换,对输出封装
public static void talk(String data1_1,String data1_2,String data2_1,String data2_2,String operation){
// 以下语句为格式转换
double dat1_1 = Double.parseDouble(data1_1);
double dat1_2 = Double.parseDouble(data1_2.substring(0,data1_2.length()-1));
double dat2_1 = Double.parseDouble(data2_1);
double dat2_2 = Double.parseDouble(data2_2.substring(0,data2_2.length()-1));
ComplexNumber num1 = new ComplexNumber(dat1_1,dat1_2);
ComplexNumber num2 = new ComplexNumber(dat2_1,dat2_2);
ComplexNumber result;
int a,b;
if(operation.equals("+")){ // 两数相加
result = num1.add(num2);
result.print();
}
if(operation.equals("-")){ // 两数相减
result = num1.sub(num2);
result.print();
}
if(operation.equals("*")){ // 两数相乘
result = num1.mul(num2);
result.print();
}
}
}
  • 编写一段测试代码
public class MainClass { // 用于测试复数类
public static void main(String[] args) {
ComplexNumber ComplexNumber = new ComplexNumber();
System.out.println("测试1:————————-"); // 一般测试
ComplexNumber.talk("5", "4i", "3", "6i", "+");
ComplexNumber.talk("5", "4i", "3", "6i", "-");
ComplexNumber.talk("5", "4i", "3", "6i", "*"); System.out.println("\n测试2:————————-"); // 包含负数测试
ComplexNumber.talk("-2","4i", "5", "-8i","+");
ComplexNumber.talk("-2","4i", "5", "-8i","-");
ComplexNumber.talk("-2","4i", "5", "-8i","*"); System.out.println("\n测试3:————————-"); // 包含小数测试
ComplexNumber.talk("-1.2","3.1i","4.3","-6.5i","+");
ComplexNumber.talk("-1.2","3.1i","4.3","-6.5i","-");
ComplexNumber.talk("-1.2","3.1i","4.3","-6.5i","*"); System.out.println("\n测试4:————————-"); // 一般测试
ComplexNumber.talk("5", "4i", "0", "0i", "+");
ComplexNumber.talk("5", "4i", "0", "0i", "-");
ComplexNumber.talk("5", "4i", "0", "0i", "*"); }
}

结果如下图:

UML应用

  • 用WhiteStarUML生成JAVA代码

PSP时间

步骤 耗时 百分比
需求分析 30min 25.0%
设计 20min 16.7%
代码实现 40min 33.3%
测试 20min 16.7%
分析总结 10min 8.3%

20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》的更多相关文章

  1. Python程序设计实验报告二:顺序结构程序设计(验证性实验)

      安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  崔攀  学号3190505136 成绩 日期     2020.3.22     指导老师       修宇 [实验 ...

  2. 20145312《Java第一次实验报告》

    20145312<Java第一次实验报告> Java开发环境的熟悉(Windows+Idea) 一.实验内容 使用Idea编辑.编译.运行.调试Java程序. 使用JDK编译.运行简单的J ...

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

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

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

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

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

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

  6. 20145221 《Java程序设计》实验报告二:Java面向对象程序设计

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

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

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

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

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

  9. 20175212童皓桢 Java实验二-面向对象程序设计实验报告

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

  10. 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验二 面向对象程序设计 实验报告

    20175316 盛茂淞 2018-2019-2 <Java程序设计>实验二 面向对象程序设计 实验报告 (一)单元测试 在 IDEA中我们把产品代码放在src目录中,把测试代码放在tes ...

随机推荐

  1. python基础-基本数据类型

    一. 运算符 1.算数运算: ps: 示例1: python2.7示例 #!/usr/bin/env python # -*- coding:utf-8 -*- #Author: nulige #算数 ...

  2. Eclipse+Maven创建webapp项目<一>

    Eclipse+Maven创建webapp项目<一> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...

  3. 【CodeVS 2822】爱在心中

    “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home.” 在爱的国度里有N个人,在他们的心中都有着一个 ...

  4. NPOI使用手册[转]

    NPOI使用手册 目录 1.认识NPOI 2. 使用NPOI生成xls文件 2.1 创建基本内容 2.1.1创建Workbook和Sheet 2.1.2创建DocumentSummaryInforma ...

  5. 总结Controller向View传值的方式(转)

    总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通View页面传一个Model对象 向强类型页面传传 ...

  6. 堆 poj 2010

    选n个人从c个中 花费不超过f c个人的成绩和花费 求分数中位数最大 n是奇数 显然中位数是n/2+1 ~c-n/2之间的(假如存在的话) 用大顶堆维护前n/2个小的花费 求出以这个人为中位数的花费 ...

  7. 概率 light oj 1104

    t个数据 n天一年  至少2个人在同一天生日的概率>=0.5 问至少多少人 显然要从反面考虑 设365天 都在不同一天的概率 p(num)=1*364/365*363/365...; =(day ...

  8. shell 题

    (1)有一推主机地址:a.baidu.com.....z.baidu.com如何从这些数据中提取出.baidu.com之前的字母,如:a b...z? #cat f1.txt | while read ...

  9. Web前端性能优化教程04:压缩组件

    本文是Web前端性能优化系列文章中的第四篇,主要讲述内容:压缩组件.完整教程可查看:Web前端性能优化 基础知识 gzip编码:gzip是GUNzip的缩写,是使用无损压缩算法的一种,最早是用于Uni ...

  10. Python列表、元组、字典和字符串的常用函数

    Python列表.元组.字典和字符串的常用函数 一.列表方法 1.ls.extend(object) 向列表ls中插入object中的每个元素,object可以是字符串,元组和列表(字符串“abc”中 ...