一、实验内容

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

    二、实验步骤

    (一)单元测试

    1.三种代码:伪代码、测试代码、产品代码
    需求:在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。
    伪代码:

百分制转五分制:
如果成绩小于60,转成“不及格”
如果成绩在60与70之间,转成“及格”
如果成绩在70与80之间,转成“中等”
如果成绩在80与90之间,转成“良好”
如果成绩在90与100之间,转成“优秀”
其他,转成“错误”

之后用java语言编程MyUtil.java

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

再写一个测试代码MyUtilTest.java来检验产品代码
测试三种情况
1.正常情况
2.错误情况(负数,超过100的数)
3.边界情况(0,60,70,80,90,100)
测试代码:

import junit.framework.TestCase;
import org.junit.Test;public class MyUtilTest extends TestCase {@Testpublic void testNormal() {assertEquals("不及格", MyUtil.percentage2fivegrade(55));assertEquals("及格", MyUtil.percentage2fivegrade(65));assertEquals("中等", MyUtil.percentage2fivegrade(75));assertEquals("良好", MyUtil.percentage2fivegrade(85));assertEquals("优秀", MyUtil.percentage2fivegrade(95));}@Testpublic void testExceptions(){assertEquals("错误", MyUtil.percentage2fivegrade(105));assertEquals("错误", MyUtil.percentage2fivegrade(-55));}@Testpublic 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));}
}

测试通过截图

2.测试驱动开发TDD(测试代码->产品代码)
测试StringBufferDemo类的方法有charAt()capacity()indexOf()length():
char charAt(int index)返回此序列中指定索引处的 char 值。
int capacity()返回当前容量。
int indexOf(String str)返回第一次出现的指定子字符串在该字符串中的索引。
int length()返回长度(字符数)。
代码:

public class StringBufferDemo {public static void main(String [] args){StringBuffer buffer = new StringBuffer(20);buffer.append('S');buffer.append("tringBuffer");System.out.println(buffer.charAt(1));System.out.println(buffer.capacity());System.out.println(buffer.indexOf("tring12345"));System.out.println("buffer = " + buffer.toString());System.out.println(buffer.length());}
}

测试代码:

import junit.framework.TestCase;
import org.junit.Test;public class StringBufferDemoTest extends TestCase {StringBuffer a = new StringBuffer("StringBuffer");StringBuffer b = new StringBuffer("StringBufferStringBuffer");StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");@Testpublic void testcharAt() throws Exception{assertEquals('S',a.charAt(0));assertEquals('n',a.charAt(4));assertEquals('u',a.charAt(7));}public void testcapacity() throws Exception{assertEquals(28,a.capacity());assertEquals(40,b.capacity());assertEquals(52,c.capacity());}public void testlength() throws Exception{assertEquals(12,a.length());assertEquals(24,b.length());assertEquals(36,c.length());}public void testindexOf() throws Exception{assertEquals(0,a.indexOf("Str"));assertEquals(5,a.indexOf("gBu"));assertEquals(6,b.indexOf("Buf"));assertEquals(7,b.indexOf("uff"));assertEquals(9,c.indexOf("fer"));assertEquals(10,c.indexOf("erS"));}
}

测试通过截图:

(二)对设计模式示例进行扩充,让其支持Long类

要求支持Long类,这样需Document类修改构造方法,这违背了OCP原则,。封装、继承、多态解决不了问题,需要添加:
class Long extends Data
class LongFactory extends Factory
代码:

abstract class Data {abstract public void DisplayValue();
}
class Integer extends  Data {int value;Integer() {value=100;}public void DisplayValue(){System.out.println (value);}
}
class Long extends Data {long value;Long(){value=2017530999;}public void DisplayValue(){System.out.println(value);}
}
abstract class Factory {abstract public Data CreateDataObject();
}
class IntFactory extends Factory {public Data CreateDataObject(){return new Integer();}
}
class LonFactory extends Factory {public Data CreateDataObject(){return new Long();}
}
class Document {Data pd;Document(Factory pf){pd = pf.CreateDataObject();}public void DisplayData(){pd.DisplayValue();}
}
public class MyDoc {static Document e;public static void main(String[] args) {e=new Document(new LonFactory());e.DisplayData();}
}

运行通过截图

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

方法:

getA(int a);返回实部
getB(int b);返回虚部
ComplexAdd(Complex c);实现复数相加
ComplexMinus(Complex c);实现复数相减
ComplexMulti(Complex c);实现复数相乘
ComplexDiv(Complex c);实现复数相除

代码:

public class Complex {    //a + biprivate double a;private double b;public Complex(){                      //构造方法,置0this.a = 0;this.b = 0;}public Complex(double a, double b) {  //构造方法,初始化一个复数this.a = a;this.b = b;}public  double getA(){                  //获取实部return this.a;}public double getB(){                  //获取虚部return this.b;}public double setA(double a){         //设置实部this.a = a;return a;}public double setB(double b){         //设置虚部this.b = b;return b;}Complex ComplexAdd(Complex c){//复数相加double a = c.getA();double b = c.getB();double newA = a + this.a;double newB = b + this.b;Complex Result = new Complex(newA,newB);return Result;}Complex ComplexMinus(Complex c){//复数相减double a = c.getA();double b = c.getB();double newA = a - this.a;double newB = b - this.b;Complex Result = new Complex(newA,newB);return Result;}Complex ComplexMulti(Complex c){//复数相乘double a = c.getA();double b = c.getB();double newA = a * this.a;double newB = b * this.b;Complex Result = new Complex(newA,newB);return Result;}Complex ComplexDiv(Complex c){//复数相乘double a = c.getA();double b = c.getB();double newA = a / this.a;double newB = b / this.b;Complex Result = new Complex(newA,newB);return Result;}public String toString() {String s = " ";if (b > 0)s =  a + "+" + b + "i";if (b == 0)s =  a + "";if (b < 0)s = a + " " + b + "i";return s;}
}

测试代码:

import junit.framework.TestCase;
import org.junit.Test;
import static org.junit.Assert.*;public class ComplexTest extends TestCase {Complex c1 = new Complex(0, 3);Complex c2 = new Complex(-1, -1);Complex c3 = new Complex(2,1);@Testpublic void testgetRealPart() throws Exception {assertEquals(-1.0, new Complex().setA(-1.0));assertEquals(5.0, new Complex().setA(5.0));assertEquals(0.0, new Complex().setA(0.0));}@Testpublic void testgetImagePart() throws Exception {assertEquals(-1.0, new Complex().setB(-1.0));assertEquals(5.0, new Complex().setB(5.0));assertEquals(0.0, new Complex().setB(0.0));}@Testpublic void testComplexAdd() throws Exception {assertEquals("-1.0+2.0i", c1.ComplexAdd(c2).toString());assertEquals("2.0+4.0i", c1.ComplexAdd(c3).toString());assertEquals("1.0", c2.ComplexAdd(c3).toString());}@Testpublic void testComplexSub() throws Exception {assertEquals("-1.0 -4.0i", c1.ComplexMinus(c2).toString());assertEquals("2.0 -2.0i", c1.ComplexMinus(c3).toString());assertEquals("3.0+2.0i", c2.ComplexMinus(c3).toString());}@Testpublic void testComplexMulti() throws Exception {assertEquals("-0.0 -3.0i", c1.ComplexMulti(c2).toString());assertEquals("0.0+3.0i", c1.ComplexMulti(c3).toString());assertEquals("-2.0 -1.0i", c2.ComplexMulti(c3).toString());}@Testpublic void testComplexComplexDiv() throws Exception {assertEquals("-0.0 -3.0i", c2.ComplexDiv(c1).toString());assertEquals("-0.0 -3.0i", c2.ComplexDiv(c1).toString());assertEquals("-2.0 -1.0i", c2.ComplexDiv(c3).toString());}
}

测试截图

(四)面向对象三要素

使用UML对实验二中代码进行建模
代码:

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() + "!";}
}

UML图

实验中遇到的问题

1.Junit的包安装上之后无法使用。
解决办法:最开始只装了一个junit.jar的包,没有装另外一个junit-4.12.jar的包导致无法使用

2.UML软件不会使用
解决办法:参考教程:https://blog.csdn.net/luansha0/article/details/82260678

PSP

步骤 耗时 百分比
需求分析 30min 10%
设计 30min 10%
代码实现 110min 36.7%
测试 70min 23.3%
分析总结 60min 20%

感悟

不知道怎么回事,老师的博客图片不能显示,对我做实验造成了极大的困扰,后来参照着20175306王佳烁、20175313张黎仙同学的博客上面的步骤才得以完成,再此谢谢二位前辈!
参考博客
20175306王佳烁:https://www.cnblogs.com/wjs123456/p/10700936.html
20175313张黎仙:https://www.cnblogs.com/xiannvyeye/p/10720425.html

转载于:https://www.cnblogs.com/20175309lyh/p/10733744.html

实验二《Java面向对象程序设计》实验报告相关推荐

  1. java面向对象实验结论及心得_20162305 实验二 Java面向对象程序设计 实验报告

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

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

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

  3. 20135234mqy 实验二 Java面向对象程序设计

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

  4. 20175333曹雅坤 实验二 Java面向对象程序设计

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

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

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计                         班级:1353            姓名:陈巧然     ...

  6. java程序面向对象show,20165309 实验二 Java面向对象程序设计

    2017-2018-2 20165309实验二<Java面向对象程序设计>实验报告 一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初 ...

  7. Java面向对象程序设计实训教程_JAVA课程实验报告 实验二 JAVA面向对象程序设计...

    课程:Java程序设计  班级:1352  姓名:黄伟业  学号:20135315 成绩:             指导教师:娄嘉鹏    实验日期:2015.5.7 实验密级:         预习 ...

  8. 实验二《面向对象程序设计》_实验报告

    实验二<面向对象程序设计>_实验报告 一.实验前期预习准备 Junit的安装和配置 选择File->Setting打开设置对话框,在设置对话框中选择Plugins, 单击Instal ...

  9. 20155229实验三 《Java面向对象程序设计实验三 敏捷开发与XP实践 》实验报告

    实验题目 1.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能. 2.下载搭档实验二的Complex代 ...

  10. 帮你快速拿Offer!java面向对象程序设计实验报告

    Spring Security观后感--手绘思维脑(供参考) Spring Security手绘思维脑图 手绘的思维导图,是我自己根据自身的情况读完这套阿里出品的Spring Security王者晋级 ...

最新文章

  1. NLP顶级专家Dan Roth :自然语言处理领域近期的任务和主要应用
  2. R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能
  3. 推荐的 PHP 读物列表
  4. 蒸妙集团:大健康产业时代的弄潮儿,中国熏蒸行业的领跑者!
  5. 需求用例分析之七:业务用例之小结
  6. 工程制图 (装配图)
  7. elasticsearch dump 教程
  8. Java RMI 入门
  9. 统计一个数的补码中二进制中1的个数
  10. anaconda配置虚拟环境
  11. React 通过style来设置背景图片。
  12. 偏差-方差分解简要推导
  13. sublime text 批量删除空白行
  14. centos6.5 MailScanner+ Spamassassin垃圾邮件过滤器+clamav 杀毒软件
  15. A novel hybrid intrusion detection method integrating anomalydetection with misuse detection
  16. 计算机怎么设置加密文件,怎么把电脑文件加密_怎么把文件加密-win7之家
  17. PTA~习题8-4 报数 (20分) 2020年11月
  18. SpringCloud 微服务工具集 SpringCloud 版本: Hoxton SR6
  19. docker 离线安装 mysql_Linux下离线安装Docker
  20. for update

热门文章

  1. 使用angular4和asp.net core 2 web api做个练习项目(二), 这部分都是angular
  2. 单例模式之恶汉模式(详解)
  3. reStructuredText(.rst)语法规则快速入门
  4. kbengine通讯协议
  5. 茴香豆的n种写法之②——Sql据多个条件 查询每个条件的前N条记录
  6. TOJ 3046: 招商银行网络系统
  7. 4001.基于双向链表的双向冒泡排序法
  8. AngualrJS之服务器端通信
  9. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
  10. python对文件进行读写操作