20144303 《Java程序设计》第二次实验实验报告

北京电子科技学院(besti)实验报告

实验内容

  • 初步掌握单元测试和TDD
  • 理解并掌握面向对象三要素:封装、继承、多态
  • 初步掌握UML建模
  • 熟悉S.O.L.I.D原则
  • 了解设计模式

实验步骤

一、三种代码:

产品代码

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的测试模块

public class MyUtilTest {
public static void main(String[] args) {
// 百分制成绩是50时应该返回五级制的“不及格”
if(MyUtil.percentage2fivegrade(50) != "不及格")
System.out.println("test failed!");
else
System.out.println("test passed!");
}
}

结果:

只有一组输入的测试是不充分的,我们把一般情况都测试一下,代码如下:

 public class MyUtilTest {
public static void main(String[] args) {
//测试正常情况
if(MyUtil.percentage2fivegrade(55) != "不及格")
System.out.println("test failed!");
else if(MyUtil.percentage2fivegrade(65) != "及格")
System.out.println("test failed!");
else if(MyUtil.percentage2fivegrade(75) != "中等")
System.out.println("test failed!");
else if(MyUtil.percentage2fivegrade(85) != "良好")
System.out.println("test failed!");
else if(MyUtil.percentage2fivegrade(95) != "优秀")
System.out.println("test failed!");
else
System.out.println("test passed!");
}
}

结果:

TDD:

一般步骤如下:

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

TDD的编码节奏

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

二、面向对象三要素

  • 抽象
  • 封装、继承与多态
  • 设计模式初步

三、S.O.L.I.D原则

面向对象三要素是“封装、继承、多态”,任何面向对象编程语言都会在语法上支持这三要素。如何借助抽象思维用好三要素特别是多态还是非常困难的,S.O.L.I.D类设计原则是一个很好的指导:

  • SRP(Single Responsibility Principle,单一职责原则)

  • OCP(Open-Closed Principle,开放-封闭原则)

  • LSP(Liskov Substitusion Principle,Liskov替换原则)

  • ISP(Interface Segregation Principle,接口分离原则)

  • DIP(Dependency Inversion Principle,依赖倒置原则)

    public abstract class Animal {

    private String color;

    public String getColor() {

    return color;

    }

    public void setColor(String color) {

    this.color = color;

    }

    public abstract String shout();

    }

    public class Dog extends Animal{

    public String shout(){

    return "汪汪";

    }

    public String toString(){

    return "The Dog's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";

    }

    }

    public class Cat extends Animal{

    public String shout(){

    return "喵喵";

    }

    public String toString(){

    return "The Cat's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";

    }

    }

四、练习

public class TestComplex
{ public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.println("请输入复数A:");
float realpart1=sc.nextInt();float imagepart1=sc.nextInt();
System.out.println("请输入复数B:");
float realpart2=sc.nextInt();float imagepart2=sc.nextInt();
Complex c1=new Complex(realpart1,imagepart1);
Complex c2=new Complex(realpart2,imagepart2);
System.out.println("请选择运算:\n"+
"(选择 1 执行加法运算)\n"+
"(选择 2 执行减法运算)\n"+
"(选择 3 执行乘法运算)\n"+
"(选择 4 执行除法运算)");
int s=sc.nextInt();
Complex C=new Complex();
for(;;)
{
C.PressButton(s,c1,c2);
System.out.println("Please input complex A again:");
realpart1=sc.nextInt();imagepart1=sc.nextInt();
System.out.println("Please input complex B again:");
realpart2=sc.nextInt();imagepart2=sc.nextInt();
System.out.println("Please choose the operate pattern:\n"+
"(choose 1 will run add operation)\n"+
"(choose 2 will run sub operation)\n"+
"(choose 3 will run mul operation)\n"+
"(choose 4 will run div operation)");
s=sc.nextInt();
if(s==-1)
{
System.out.println("Game over!");
break;
}
} }
}

结果:

import java.util.Scanner;

public class ComplexMain {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入两个复数的实部和虚部:(a+bi、c+di)");
System.out.printf("a =");
int a=scanner.nextInt();
System.out.printf("b =");
int b=scanner.nextInt();
System.out.printf("c =");
int c=scanner.nextInt();
System.out.printf("d =");
int d=scanner.nextInt();
Complex fushu1=new Complex(a,b);
Complex fushu2=new Complex(c,d);
while(true) {
System.out.println("请输入需要进行的运算:1、ADD 2、SUBTRACT 3、MULTIPLY ");
int choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.println(Complex.addition(fushu1, fushu2));
break;
case 2:
System.out.println(Complex.subtract(fushu1, fushu2));
break;
case 3:
System.out.println(Complex.multiplication(fushu1, fushu2));
break; default:System.out.println("ERROR!!!");
}
}
}
}

结果:

20144303 《Java程序设计》第二次实验实验报告的更多相关文章

  1. 201621123005《Java程序设计》第九次实验总结

    201621123005<Java程序设计>第九周实验总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 ...

  2. Java程序设计第四次实验报告

    北京电子科技学院(BESTI) 实     验    报     告 课程:java程序设计 班级:1352  姓名:何伟钦  学号:20135223 成绩:            指导教师:娄嘉鹏 ...

  3. 201621123005《Java程序设计》第十次实验总结

    201621123005<Java程序设计>第十周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1. 常用异常 1.1 自己 ...

  4. 201521123008<java程序设计>第三周实验总结

    1.本周学习总结 2.书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; pub ...

  5. 201521123063 JAVA程序设计 第二周学习总结

    1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...

  6. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  7. java程序设计第二次实验报告

    北京电子科技学院(BESTI) 实验报告 课程:数据结构    班级:1352    姓名:何伟钦     学号:20135223 成绩:            指导教师:娄嘉鹏      实验日期: ...

  8. java程序设计第二课

    抽象基类和接口 能够使用keywordabstact来创建抽象类,该抽象类不能被实例化 也能够使用keywordabstact来描写叙述一个尚未被详细实现的方法,该方法不能包括方法体 一个抽象方法仅仅 ...

  9. java程序设计第二次作业

  10. 20165206 2017-2018-2《Java程序设计》课程总结

    20165206 2017-2018-2<Java程序设计>课程总结 一.每周作业链接汇总 预备作业1:对师生关系的看法和期望 预备作业2:c语言基础和学习技能的理解 预备作业3:Linu ...

随机推荐

  1. js 闭包与垃圾回收-待删

    关于闭包请看戳 串讲-解释篇:作用域,作用域链,执行环境,变量对象,活动对象,闭包,本篇写的不太好: 先摆定义: 函数对象,可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内,这种 ...

  2. 基于xml文件的格式配置Spring的AOP

    用例子直接说明: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...

  3. Spring---Bean的继承与依赖

    Spring 允许继承 bean 的配置(通过Bean的parent属性来指定,例如parent=”teacher“), 被继承的 bean 称为父 bean.   继承这个父 Bean 的 Bean ...

  4. synchronized和volatile的使用方法以及区别

    先看看下面的例子: public class ThreadTest { public static void main(String[] args) { final Counter counter = ...

  5. APNS/苹果推送服务

    Apple Push Notification Service Google Cloud Message/Google 云 消息 Firebase Cloud Messaging

  6. Spark 源码分析 -- BlockStore

    BlockStore 抽象接口类, 关键get和put都有两个版本序列化, putBytes, getBytes非序列化, putValues, getValues 其中putValues的返回值为P ...

  7. MapReduce自定义InputFormat和OutputFormat

    一.自定义InputFormat 需求:将多个小文件合并为SequenceFile(存储了多个小文件) 存储格式:文件路径+文件的内容 c:/a.txt I love Beijing c:/b.txt ...

  8. 【css】长文本左侧显示省略号

    classnames: https://blog.csdn.net/duola8789/article/details/71514450 react普通样式 行内样式: https://blog.cs ...

  9. python爬虫 (一) 爬虫基础了解,urllib

    • URL的含义: 统一资源定位符,结构: URL的格式由三部分组成: ①第一部分是协议(或称为服务方式). ②第二部分是存有该资源的主机IP地址(有时也包括端口号). ③第三部分是主机资源的具体地址 ...

  10. 004-Maven的安装与配置

    1.在Windows上安装Maven 1.1.检查jdk安装 命令行:echo %JAVA_HOME% java -version 1.2.下载Maven 地址:http://maven.apache ...