20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》
2016-04-14 21:56
615 查看
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% |
相关文章推荐
- java HashMap详解,剖析
- 关于java.lang.OutOfMemoryError: Java heap space的问题
- mybatis java.lang.NullPointerException
- java的数据类型
- springmvc4环境简单搭建和定时任务
- Java内部类:匿名内部类(四)
- JAVA——构造函数
- Java实现24点纸牌游戏
- java中文乱码解决之道(八)-----解决URL中文乱码问题
- java中文乱码解决之道(七)-----JSP页面编码过程
- java中文乱码解决之道(六)-----javaWeb中的编码解码
- java中文乱码解决之道(五)-----java是如何编码解码的
- [SpringBoot实践]spring-data-mongo自定义Repository接口及其实现
- java中文乱码解决之道(四)-----java编码转换过程
- java中文乱码解决之道(三)-----编码详情:伟大的创想---Unicode编码
- java中文乱码解决之道(二)-----字符编码详解:基础知识 + ASCII + GB**
- java输入学生成绩
- java怎么连接mysql数据库
- java中文乱码解决之道(一)-----认识字符集
- (2)java自带软件包javax.crypto的使用方法,保存generator中生成的key