20165308 实验二 Java面向对象程序设计

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

一、实验报告封面

  • 课程:Java程序设计 班级:1653班 姓名:张士洋 学号:20165308

  • 指导教师:娄嘉鹏 实验日期:2018年4月16日 实验时间:15:35 - 17:15

  • 实验序号:实验二 实验名称:Java面向对象程序设计

实验内容及要求:

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

实验内容、步骤与体会

目录:

  • (一)初步掌握单元测试和TDD
  • (二)以TDD的方式研究学习StringBuffer
  • (三)对MyDoc类进行扩充,让其支持Boolean类,初步理解设计模式
  • (四)以TDD的方式开发一个复数类Complex
  • (五)使用StarUML对实验中的代码进行建模

二、实验内容及步骤

(一)使用JUnit 单元测试

参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习
提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图,截图上要有画图加水印,输入自己的学号
本提交点考查JUnit会不会使用,测试用例至少要包含正常情况,错误情况,边界情况的测试。

产品代码

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 "错误";
}
}

测试代码

import org.junit.Test;
import junit.framework.TestCase;
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 testExceptions () {
assertEquals("错误",MyUtil.percentage2fivegrade(105));
assertEquals("错误",MyUtil.percentage2fivegrade(-55));
} @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));
}
}

测试截图

(二)以TDD的方式研究学习StringBuffer

TDD的一般步骤如下:

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

产品代码

public class StringBufferDemo{
StringBuffer buffer = new StringBuffer();
public StringBufferDemo(StringBuffer buffer){
this.buffer = buffer;
}
public Character charAt(int i){
return buffer.charAt(i);
}
public int capacity(){
return buffer.capacity();
}
public int length(){
return buffer.length();
}
public int indexOf(String buf) {
return buffer.indexOf(buf);
}
}

测试代码

import junit.framework.TestCase;
import org.junit.Test; public class StringBufferDemoTest extends TestCase {
StringBuffer a = new StringBuffer("StringBuffer");
//测试12个字符
StringBuffer b = new StringBuffer("StringBufferStringBuffer");
//测试24个字符
StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");
//测试36个字符
StringBuffer d = new StringBuffer("StringBufferStringBufferStringBufferStr");
//测试39个字符
@Test
public void testcharAt() {
assertEquals('S',a.charAt(0));
assertEquals('e',b.charAt(10));
assertEquals('f',c.charAt(20));
assertEquals('B',d.charAt(30));
}
@Test
public void testcapacity() {
assertEquals(28,a.capacity());
assertEquals(40,b.capacity());
assertEquals(52,c.capacity());
assertEquals(55,d.capacity());
}
@Test
public void testindexOf() {
assertEquals(0,a.indexOf("Str"));
assertEquals(3,b.indexOf("ing"));
assertEquals(6,c.indexOf("Buffer"));
assertEquals(8,d.indexOf("ff"));
}
@Test
public void testlength() {
assertEquals(12,a.length());
assertEquals(24,b.length());
assertEquals(36,c.length());
assertEquals(39,d.length());
}
}

测试截图

(三)设计模式示例进行扩充,让系统支持Boolean类

参考实验二 Java面向对象程序设计
对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式 用自己的学号%6进行取余运算,根据结果进行代码扩充:
0:让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
1:让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
3:让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
4:让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
5:让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

产品代码

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;
Document() {
pd=new Boolean();
}
public void DisplayData(){
pd.DisplayValue();
}
}
public class MyDoc {
static Document d;
public static void main(String[] args) {
d = new Document();
d.DisplayData();
}
}

测试截图

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

参考http://www.cnblogs.com/rocedu/p/6736847.html

任务:以TDD的方式开发一个复数类Complex,要求如下:

// 定义属性并生成getter,setter
double RealPart;
double ImagePart;
// 定义构造函数
public Complex()
public Complex(double R,double I) //Override Object
public boolean equals(Object obj)
public String toString() // 定义公有方法:加减乘除
Complex ComplexAdd(Complex a)
Complex ComplexSub(Complex a)
Complex ComplexMulti(Complex a)
Complex ComplexDiv(Complex a)

产品代码


import java.lang.*;
public class Complex {
// 定义属性并生成getter,setter
public void setRealpart(double R){
RealPart=R;
}
public double getRealpart(){
return RealPart;
}
public void setImagePart(double I){
ImagePart=I;
}
public double getImagePart(){
return ImagePart;
} double RealPart;
double ImagePart;
// 定义构造函数
public Complex(double R,double I){
RealPart=R;
ImagePart=I;
} //Override Object
public boolean equals(Complex obj){
if(this.getRealpart()==obj.getRealpart() && this.getImagePart()==obj.getImagePart())
return true;
else
return false;
}
public String toString(){
return RealPart+"+"+ImagePart+"i";
} // 定义公有方法:加减乘除
public Complex ComplexAdd(Complex a){
return new Complex(this.RealPart+a.RealPart,this.ImagePart+a.ImagePart);
}
public Complex ComplexSub(Complex a){
return new Complex(this.RealPart-a.RealPart,this.ImagePart-a.ImagePart);
}
public Complex ComplexMulti(Complex a){
return new Complex(this.RealPart*a.RealPart-this.ImagePart*a.ImagePart,
this.RealPart*a.ImagePart+this.ImagePart*a.RealPart);
}
public Complex ComplexDiv(Complex a){
double x=this.RealPart;
double y=this.ImagePart;
double m=a.RealPart;
double n=a.ImagePart;
return new Complex((x*m+y*n)/(m*m+n*n),(y*m-x*n)/(m*m+n*n));
}
}

测试代码

import junit.framework.TestCase;
import org.junit.Test;
public class ComplexTest extends TestCase {
Complex p1=new Complex(1,1);
Complex p2=new Complex(1,-1);
@Test
public void testAdd(){
assertEquals("2.0+0.0i",p1.ComplexAdd(p2).toString());
System.out.println(p1.ComplexAdd(p2));
}
@Test
public void testSub(){
assertEquals("0.0+2.0i",p1.ComplexSub(p2).toString());
System.out.println(p1.ComplexSub(p2));
}
@Test
public void testMulti(){
assertEquals("2.0+0.0i",p1.ComplexMulti(p2).toString());
System.out.println(p1.ComplexSub(p2));
}
@Test
public void testDiv(){
assertEquals("0.0+1.0i",p1.ComplexDiv(p2).toString());
System.out.println(p1.ComplexDiv(p2));
}
}

测试截图

(五)UML截图

使用[WhiteStarUML](http://whitestaruml.sourceforge.net/)对实验二中的代码进行建模,发类图的截图,加上学号水印。
参考http://www.cnblogs.com/rocedu/p/6736847.html 类图中只少两个类。

四、实验体会与总结

实验过程中,真的遇到了超级多的困难而且都真的很难去自己全部解决,例如在对MyDoc类进行扩充,让其支持Boolean类时如何合法定义有关变量的类型,以及复数类Complex的编写等,要得到多次同学的帮助才能结果,虽然过程很艰难,但是学会了这种通过先写伪代码再利用测试代码辅助完成产品代码的方法,这样对于编程来说比较方便,而且对于各种情况的监测利用Junit测试也是真的方便。

20165308 实验二 Java面向对象程序设计的更多相关文章

  1. 实验二 Java面向对象程序设计

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

  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. 20145113 实验二 Java面向对象程序设计

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

  6. JAVA课程实验报告 实验二 Java面向对象程序设计

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  7. 20145225唐振远 实验二 "Java面向对象程序设计"

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

  8. 20145208 实验二 Java面向对象程序设计

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

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

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

随机推荐

  1. Linux文件系统命令 mkdir/rmdir

    命令名:mkdir 功能:创建一个文件夹,和touch的区别是,touch是创建一个文件,后面可以跟绝对路径和相对路径 eg: mkdir ren 命令名:rmdir 功能:删除一个文件夹

  2. 一个灵活的AssetBundle打包工具

      尼尔:机械纪元 上周介绍了Unity项目中的资源配置,今天和大家分享一个AssetBundle打包工具.相信从事Unity开发或多或少都了解过AssetBundle,但简单的接口以及众多的细碎问题 ...

  3. pytest 的 yield

    前言:1.当 pytest.fixture(scope="module") 时,pytest的yieId 类似unittest的teartownclass 2.当 pytest.f ...

  4. 十、编写LED混杂设备驱动

    led.c修改为: #include <linux/init.h> #include <linux/module.h> #include <linux/miscdevic ...

  5. 解决The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.

    SpringMVC中当在浏览器中输入对应的MappingUrl时,报The resource identified by this request is only capable of generat ...

  6. mysql主从复制-读写分离

    mysql主从复制+读写分离 环境:mysql主:193.168.1.1mysql从:193.168.1.2amoeba代理:193.168.1.3########################## ...

  7. java学习笔记19(Arrays类)

    Arrays类: 此类包含用来操作数组的各种方法(比如升序和搜索): import java.util.Arrays; public class Demo { public static void m ...

  8. JAVA Clone复制对象

    谈到了对象的克隆,就不得不说为什么要对对象进行克隆.Java中所有的对象都是保存在堆中,而堆是供全局共享的.也就是说,如果同一个Java程序的不同方法,只要能拿到某个对象的引用,引用者就可以随意的修改 ...

  9. easyUI 下拉组件转义

    <labelclass="label"for="belongWidget">归属组件:</label> <inputid=&quo ...

  10. INS-20802 Oracle Cluster Verification Utility failed解释说明

    背景:安装RAC,安装GI集群管理软件时,在最后快结束时,总是报如上INS-错误 #官方文档:error 说明;字符串解析失败 INS-20802: string failed. Cause: The ...