20165202 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计
一、实验报告封面
课程:Java程序设计 班级:1652班 姓名:贾海粟 学号:20165202
指导教师:娄嘉鹏 实验日期:2018年4月16日 实验时间:15:35 - 17:15
实验序号:实验二 实验名称:Java面向对象程序设计
实验内容:
1初步掌握单元测试和TDD
2 理解并掌握面向对象三要素:封装、继承、多态
3 初步掌握UML建模
4 熟悉S.O.L.I.D原则
5 了解设计模式
实验要求:
1 没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;
2 完成实验、撰写实验报告,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);
3 实验报告中统计自己的PSP(Personal Software Process)时间;
4 严禁抄袭。
二、实验内容及步骤
(一)使用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
类图中只少两个类。

三、实验过程中遇到的问题
(一):按教程介绍无法下载JUnitGenerator V2.0
解决方案:参考《idea 无法下载JUnitGenerator V2.0插件解决办法》,我在连接提供的网址下载了jar文件。使用file->settting->plugins->install plugin from disk操作后成功安装

(二)step1中junit和test显示红色,和教程中提到的testcase为红色不太一致

解决方案:按照查找方式选取的两个jar均不可用,我在网络上下载了一个进行安装,问题得到解决。


四、实验体会与总结
本次实验主要包括junit的使用,通过实际练习我发现junit测试的可以很大提高效率,迅速找到问题所在。本实验中一些题目略难,好在老师提供了一些模板供参考,在日常学习还是要加强巩固基础。
| 步骤 | 耗时 | 百分比 |
|---|---|---|
| 需求分析 | 20min | 7% |
| 设计 | 60min | 21% |
| 代码实现 | 120min | 42% |
| 测试 | 40min | 15% |
| 分析总结 | 30min | 11% |
20165202 实验二 Java面向对象程序设计的更多相关文章
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告
20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...
- 20145113 实验二 Java面向对象程序设计
20145113 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 1.初 ...
- JAVA课程实验报告 实验二 Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
- 20145225唐振远 实验二 "Java面向对象程序设计"
20145225<Java程序设计> 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...
- 20145208 实验二 Java面向对象程序设计
20145208 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...
- 20162311 实验二 Java面向对象程序设计 实验报告
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
随机推荐
- 详解Java中的clone方法 -- 原型模式
转自: http://blog.csdn.net/zhangjg_blog/article/details/18369201 Java中对象的创建 clone顾名思义就是复制, 在Java语言中, ...
- 转载:vsftp中的local_umask和anon_umask
转载出处:http://blog.sina.com.cn/s/blog_67c5699001010e3e.html umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限u ...
- python3.6连接mysql或者mariadb
python3.6版本的安装查看上一篇文章 mysql或mariadb数据库的安装查看以前的文章,这里不再赘述 首先在mariadb数据库中创建相应的库和表: MariaDB [(none)]> ...
- 20145324 《Java程序设计》第5周学习总结
20145324 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 1.java中所有错误都会被包装成为对象 2.可以使用尝试(try)执行程序并捕捉代表错误的对象后做一些处理 ...
- MR案例:倒排索引 && MultipleInputs
本案例采用 MultipleInputs类 实现多路径输入的倒排索引.解读:MR多路径输入 package test0820; import java.io.IOException; import j ...
- jackson序列化字段字母大小写及字段名重复
一:Jackson默认的属性发现规则将会查找到如下所述的属性: 1.所有被public修饰的字段(成员变量): 2.所有被public修饰的getter(即形如“getXxx()”的方法): 3.所有 ...
- MapReduce实现共同朋友问题
答案: package com.duking.mapreduce; import java.io.IOException; import java.util.Set; import java.util ...
- Web前端可以转行做游戏吗?
作者:ManfredHu 链接:http://www.manfredhu.com/2018/03/15/31-laya-game-tips/index.html 声明:版权所有,转载请保留本段信息,谢 ...
- [转]3个著名加密算法(MD5、RSA、DES)的解析
MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展而来. ...
- 【转】由浅入深探究mysql索引结构原理、性能分析与优化
摘要: 第一部分:基础知识 第二部分:MYISAM和INNODB索引结构 1.简单介绍B-tree B+ tree树 2.MyisAM索引结构 3.Annode索引结构 4.MyisAM索引与Inno ...