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

实验内容

单元测试

三种代码

  • 伪代码
  1. 百分制转五分制:
  2. 如果成绩小于60,转成“不及格”
  3. 如果成绩在6070之间,转成“及格”
  4. 如果成绩在7080之间,转成“中等”
  5. 如果成绩在8090之间,转成“良好”
  6. 如果成绩在90100之间,转成“优秀”
  7. 其他,转成“错误”
  • 产品代码
  1. public class MyUtil {
  2. public static String percentage2fivegrade(int grade){
  3. //如果成绩小于60,转成“不及格”
  4. if (grade < 60)
  5. return "不及格";
  6. //如果成绩在60与70之间,转成“及格”
  7. else if (grade < 70)
  8. return "及格";
  9. //如果成绩在70与80之间,转成“中等”
  10. else if (grade < 80)
  11. return "中等";
  12. //如果成绩在80与90之间,转成“良好”
  13. else if (grade < 90)
  14. return "良好";
  15. //如果成绩在90与100之间,转成“优秀”
  16. else if (grade < 100)
  17. return "优秀";
  18. //其他,转成“错误”
  19. else
  20. return "错误";
  21. }
  22. }
  • 边界情况测试代码
  1. public class MyUtil1Test1 {
  2. public static void main(String[] args) {
  3. //测试边界情况
  4. if(MyUtil.percentage2fivegrade(0) != "不及格")
  5. System.out.println("test failed 1!");
  6. else if(MyUtil.percentage2fivegrade(60) != "及格")
  7. System.out.println("test failed 2!");
  8. else if(MyUtil.percentage2fivegrade(70) != "中等")
  9. System.out.println("test failed 3!");
  10. else if(MyUtil.percentage2fivegrade(80) != "良好")
  11. System.out.println("test failed 4!");
  12. else if(MyUtil.percentage2fivegrade(90) != "优秀")
  13. System.out.println("test failed 5!");
  14. else if(MyUtil.percentage2fivegrade(100) != "优秀")
  15. System.out.println("test failed 6!");
  16. else
  17. System.out.println("test passed!");
  18. }
  19. }

  • 修改代码后测试边界情况
  1. if(MyUtil.percentage2fivegrade(0) != "不及格")
  2. System.out.println("test failed 1!");
  3. else if(MyUtil.percentage2fivegrade(60) != "及格")
  4. System.out.println("test failed 2!");
  5. else if(MyUtil.percentage2fivegrade(70) != "中等")
  6. System.out.println("test failed 3!");
  7. else if(MyUtil.percentage2fivegrade(80) != "良好")
  8. System.out.println("test failed 4!");
  9. else if(MyUtil.percentage2fivegrade(90) != "优秀")
  10. System.out.println("test failed 5!");
  11. else if(MyUtil.percentage2fivegrade(100) != "优秀")
  12. System.out.println("test failed 6!");
  13. 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具备单元测试功能

  1. public class MyUtil{
  2. public static String percentage2fivegrade(int grade){
  3. //如果成绩小于0,转成“错误”
  4. if ((grade < 0))
  5. return "错误";
  6. //如果成绩小于60,转成“不及格”
  7. else if (grade < 60)
  8. return "不及格";
  9. //如果成绩在60与70之间,转成“及格”
  10. else if (grade < 70)
  11. return "及格";
  12. //如果成绩在70与80之间,转成“中等”
  13. else if (grade < 80)
  14. return "中等";
  15. //如果成绩在80与90之间,转成“良好”
  16. else if (grade < 90)
  17. return "良好";
  18. //如果成绩在90与100之间,转成“优秀”
  19. else if (grade <= 100)
  20. return "优秀";
  21. //如果成绩大于100,转成“错误”
  22. else
  23. return "错误";
  24. }
  25. }

4.完善代码

复数类Complex

  • 首先编写一段实现复数加减乘的代码如下
  1. public class ComplexNumber { // 复数类
  2. double m_dRealPart; // 实部
  3. double m_dImaginPart; // 虚部
  4. ComplexNumber(double m_dRealPart,double m_dImaginPart){ // 带参数的构造方法
  5. this.m_dRealPart = m_dRealPart;
  6. this.m_dImaginPart = m_dImaginPart;
  7. }
  8. public ComplexNumber() {
  9. // TODO Auto-generated constructor stub
  10. }
  11. public double getRealPart() {
  12. return m_dRealPart;
  13. }
  14. public void setRealPart(double m_dRealPart) {
  15. this.m_dRealPart = m_dRealPart;
  16. }
  17. public double getImaginPart() {
  18. return m_dImaginPart;
  19. }
  20. public void setImaginPart(double m_dImaginPart) {
  21. this.m_dImaginPart = m_dImaginPart;
  22. }
  23. ComplexNumber add(ComplexNumber a){ // 复数相加
  24. double m_dRealPart2 = a.getRealPart();
  25. double m_dImaginPart2 = a.getImaginPart();
  26. double newM_dRealPart = m_dRealPart + m_dRealPart2;
  27. double newM_dImaginPart = m_dImaginPart + m_dImaginPart2;
  28. ComplexNumber result = new ComplexNumber(newM_dRealPart,newM_dImaginPart);
  29. return result;
  30. }
  31. ComplexNumber sub(ComplexNumber a){ // 复数相减
  32. double m_dRealPart2 = a.getRealPart();
  33. double m_dImaginPart2 = a.getImaginPart();
  34. double newM_dRealPart = m_dRealPart - m_dRealPart2;
  35. double newM_dImaginPart = m_dImaginPart - m_dImaginPart2;
  36. ComplexNumber result = new ComplexNumber(newM_dRealPart,newM_dImaginPart);
  37. return result;
  38. }
  39. ComplexNumber mul(ComplexNumber a){ // 复数相乘
  40. double m_dRealPart2 = a.getRealPart();
  41. double m_dImaginPart2 = a.getImaginPart();
  42. double newM_dRealPart = m_dRealPart* m_dRealPart2 - m_dImaginPart*m_dImaginPart2;
  43. double newM_dImaginPart = m_dImaginPart* m_dRealPart2 + m_dRealPart*m_dImaginPart2;
  44. ComplexNumber result = new ComplexNumber(newM_dRealPart,newM_dImaginPart);
  45. return result;
  46. }
  47. public void print(){ // 用于格式化输出
  48. if(m_dImaginPart > 0){
  49. System.out.println(m_dRealPart + " + " + m_dImaginPart + "i");
  50. }else if(m_dImaginPart < 0){
  51. System.out.println( m_dRealPart+ "" + m_dImaginPart + "i");
  52. }else{
  53. System.out.println( m_dRealPart);
  54. }
  55. }
  56. // 封装了具体运算,主要为对输入进行转换,对输出封装
  57. public static void talk(String data1_1,String data1_2,String data2_1,String data2_2,String operation){
  58. // 以下语句为格式转换
  59. double dat1_1 = Double.parseDouble(data1_1);
  60. double dat1_2 = Double.parseDouble(data1_2.substring(0,data1_2.length()-1));
  61. double dat2_1 = Double.parseDouble(data2_1);
  62. double dat2_2 = Double.parseDouble(data2_2.substring(0,data2_2.length()-1));
  63. ComplexNumber num1 = new ComplexNumber(dat1_1,dat1_2);
  64. ComplexNumber num2 = new ComplexNumber(dat2_1,dat2_2);
  65. ComplexNumber result;
  66. int a,b;
  67. if(operation.equals("+")){ // 两数相加
  68. result = num1.add(num2);
  69. result.print();
  70. }
  71. if(operation.equals("-")){ // 两数相减
  72. result = num1.sub(num2);
  73. result.print();
  74. }
  75. if(operation.equals("*")){ // 两数相乘
  76. result = num1.mul(num2);
  77. result.print();
  78. }
  79. }
  80. }
  • 编写一段测试代码
  1. public class MainClass { // 用于测试复数类
  2. public static void main(String[] args) {
  3. ComplexNumber ComplexNumber = new ComplexNumber();
  4. System.out.println("测试1:————————-"); // 一般测试
  5. ComplexNumber.talk("5", "4i", "3", "6i", "+");
  6. ComplexNumber.talk("5", "4i", "3", "6i", "-");
  7. ComplexNumber.talk("5", "4i", "3", "6i", "*");
  8. System.out.println("\n测试2:————————-"); // 包含负数测试
  9. ComplexNumber.talk("-2","4i", "5", "-8i","+");
  10. ComplexNumber.talk("-2","4i", "5", "-8i","-");
  11. ComplexNumber.talk("-2","4i", "5", "-8i","*");
  12. System.out.println("\n测试3:————————-"); // 包含小数测试
  13. ComplexNumber.talk("-1.2","3.1i","4.3","-6.5i","+");
  14. ComplexNumber.talk("-1.2","3.1i","4.3","-6.5i","-");
  15. ComplexNumber.talk("-1.2","3.1i","4.3","-6.5i","*");
  16. System.out.println("\n测试4:————————-"); // 一般测试
  17. ComplexNumber.talk("5", "4i", "0", "0i", "+");
  18. ComplexNumber.talk("5", "4i", "0", "0i", "-");
  19. ComplexNumber.talk("5", "4i", "0", "0i", "*");
  20. }
  21. }

结果如下图:

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. Android Bundle

    #Bundle类介绍 Bundle主要用于传递数据:它保存的数据,是以key-value(键值对)的形式存在的. 我们经常使用Bundle在Activity之间传递数据,传递的数据可以是boolean ...

  2. jQuery鼠标悬停内容动画切换效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. HttpHelper类

    using System;using System.Collections.Generic;using System.Text;using System.Net;using System.IO;usi ...

  4. php实现木桶排序

    今天重新看了看木桶排序,思路比较简单,这里整理一下,免得下次忘记. 假设要对一组数据 2 2 3 1 6 5 4 进行桶排序. 1.首先选出最小元素1和最大元素6,做一个桶,也就是定义一个1-6的数组 ...

  5. ASP.NET MVC 4 异步加载控制器

    ASP.NET 4 Developer preview中的异步操纵器 在放弃了对.NET 3的支持之后, ASP.NET MVC 4 彻底拥抱了Task类库, 你不需求再蛋疼的给每个Action写两个 ...

  6. BZOJ 1110: [POI2007]砝码Odw

    1110: [POI2007]砝码Odw Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 547  Solved: 296[Submit][Status ...

  7. 【BZOJ-4518】征途 DP + 斜率优化

    4518: [Sdoi2016]征途 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 230  Solved: 156[Submit][Status][ ...

  8. java的静态代理和动态代理(jdk、cglib)

    一.代理模式 代理的概念来自于设计模式中的代理模式,先了解一下代理模式 1.结构图 2.参与者 Subject:接口,定义代理类和实际类的共用接口 RealSubject:实际类,实现Subject这 ...

  9. Npoi实现Excel绘制功能

    使用Npoi操作Excel,是我一直很喜欢的一种方式. 说简单也简单,但是封装好重用性,易用性,也稍稍费了些时间.在这里做个记录,免得以后遗忘. 首先说一下需求,需求有两点 1.新建Excel,并下载 ...

  10. HDU 5908 Abelian Period(暴力+想法题)

    传送门 Description Let S be a number string, and occ(S,x) means the times that number x occurs in S. i. ...