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

课程:java程序设计

姓名:赵冰雨

学号:20165218

指导教师:娄嘉鹏

实验日期:2018.4.16

实验密级:Java开发环境的熟悉

实验内容、步骤与体会:

(一)单元测试

  • 实验要求

参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST

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

提交最后三个测试用例都通过的截图

  • 实验步骤
  1. 根据伪代码编写产品代码MyUtil.java
  2. 新建一个测试代码MyUtil.java
  3. 测试多种情况,包括正常情况,异常情况(负分或大于100的乘积),边界情况,并根据测试结果调整产品代码(以上是自己编写测试代码的过程)
  4. 新建测试文件夹test,并将其改成可作为源代码编译

  1. 在test文件夹下新建MyUtilTest.jva,输入代码:
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));
}
}
  1. 运行成功

  2. 出现语法错误时

    File->Project Structure

在IDEA安装地址下找到如下三个文件并添加即可


(二)面向对象的三要素

  • 实验要求

参考 积极主动敲代码,使用JUnit学习Java

http://www.cnblogs.com/rocedu/p/4837092.html)

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

以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图

  • 实验步骤
  1. 编写测试用例代码
/**
* Created by zby on 2018/4/16.
*/
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer();
buffer.append('S');
buffer.append("tringBuffer");
System.out.println(buffer.charAt(1));
System.out.println(buffer.capacity());
System.out.println(buffer.indexOf("tring"));
System.out.println("buffer = " + buffer.toString());
System.out.println(buffer.length());
}
}
  1. 测试代码
import junit.framework.TestCase;
import org.junit.Test; /**
* Created by zby on 2018/4/16.
*/ import junit.framework.TestCase;
import org.junit.Test; import static org.junit.Assert.*; public class StringBufferTest extends TestCase {
StringBuffer string1 = new StringBuffer("hellojava");//测试9个字符
StringBuffer string2 = new StringBuffer("To be or not to be");//测试18个字符
StringBuffer string3 = new StringBuffer("Quando abbandonare ogni speranza");//测试32个字符 @Test
public void testCharAt() {
assertEquals('h', string1.charAt(0));
assertEquals('e', string2.charAt(4));
assertEquals('a', string3.charAt(7));
} @Test
public void testCapacity() {
assertEquals(25, string1.capacity());
assertEquals(34, string2.capacity());
assertEquals(48, string3.capacity());
} @Test
public void testindexOf() {
assertEquals(0, string1.indexOf("he"));
assertEquals(9, string2.indexOf("not"));
assertEquals(7, string3.indexOf("abbando"));
} @Test
public void testlength() {
assertEquals(9, string1.length());
assertEquals(18, string2.length());
assertEquals(32, string3.length());
}
}
  1. 如果显示测试失败(如下图),根据提示修改测试代码
  2. 测试成功

(三)设计模式初步

  • 实验内容

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

对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式

用自己的学号%6进行取余运算,根据结果进行代码扩充:

0: 让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

  • 实验步骤
  1. 设计编写代码Data.javaMyDoc.java
/**
* Created by zby on 2018/4/16.
*/
abstract class Data {
abstract public void DisplayValue();
} class Integer extends Data {
int value; Integer() {
value = 100;
} public void DisplayValue() {
System.out.println(value);
}
} class Byte extends Data {
byte value; Byte() {
value = (byte) 20165218;
} public void DisplayValue() {
System.out.println(value);
}
} // Pattern Classes
abstract class Factory {
abstract public Data CreateDataObject();
} class IntFactory extends Factory {
public Data CreateDataObject() {
return new Integer();
}
} class ByteFactory extends Factory {
public Data CreateDataObject() {
return new Byte();
}
} //Client classes
class Document {
Data data; Document(Factory factory) {
data = factory.CreateDataObject();
} public void DisplayData() {
data.DisplayValue(); }
}
public class MyDoc {
static Document d; public static void main(String[] args) {
d = new Document(new ByteFactory());
d.DisplayData();
}
}

(四)练习

  • 实验内容

提交:单元测试代码和运行成功截图及码云上代码链接,截图要加上学号水印

参考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)
  • 实验步骤
  1. 产品代码
/**
* Created by zby on 2018/4/16.
*/
public class Complex { // 定义属性并生成getter,setter
private double RealPart;
private double ImagePart; // 定义构造函数
public Complex() { } public Complex(double R, double I) {
this.RealPart = R;
this.ImagePart = I;
} public double getRealPart() {
return RealPart;
} public void setRealPart(double realPart) {
RealPart = realPart;
} public double getImagePart() {
return ImagePart;
} public void setImagePart(double imagePart) {
ImagePart = imagePart;
} //Override Object
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Complex)) {
return false;
}
Complex complex = (Complex) obj;
if (complex.RealPart != ((Complex) obj).RealPart) {
return false;
}
if (complex.ImagePart != ((Complex) obj).ImagePart) {
return false;
} return true;
} public String toString() {
String string = "";
if (ImagePart > 0)
string = RealPart + "+" + ImagePart + "i";
if (ImagePart == 0)
string = RealPart + "";
if (ImagePart < 0)
string = RealPart + " " + ImagePart + "i";
return string;
} // 定义公有方法:加减乘除
Complex ComplexAdd(Complex a) {
return new Complex(RealPart + a.RealPart, ImagePart + a.ImagePart);
} Complex ComplexSub(Complex a) {
return new Complex(RealPart - a.RealPart, ImagePart - a.ImagePart);
} Complex ComplexMulti(Complex a) {
return new Complex(RealPart * a.RealPart - ImagePart * a.ImagePart, ImagePart * a.RealPart + RealPart * a.ImagePart);
} Complex ComplexDiv(Complex a) {
Complex d = new Complex();
d.RealPart = (this.RealPart * a.RealPart + this.ImagePart * a.ImagePart) / (a.RealPart * a.RealPart + a.ImagePart * a.ImagePart);
d.ImagePart = (this.ImagePart * a.RealPart - this.RealPart * a.ImagePart) / (a.RealPart * a.RealPart + a.ImagePart * a.ImagePart);
return d; }
}
  1. 测试代码
/**
* Created by zby on 2018/4/16.
*/ import org.junit.*; import static org.junit.Assert.*; public class ComplexTest {
Complex a = new Complex(1, 2);
Complex b = new Complex(1, -4); @Test
public void testAdd() {
assertEquals("2.0 -2.0i", a.ComplexAdd(b).toString());
System.out.println(a.ComplexAdd(b));
} @Test
public void testSub() {
assertEquals("0.0+6.0i", a.ComplexSub(b).toString());
System.out.println(a.ComplexSub(b));
} @Test
public void testMulti() {
assertEquals("9.0 -2.0i", a.ComplexMulti(b).toString());
System.out.println(a.ComplexMulti(b));
} @Test
public void testDiv() {
assertEquals("-0.4117647058823529+0.35294117647058826i", a.ComplexDiv(b).toString());
System.out.println(a.ComplexDiv(b));
}
}
  1. 测试结果


(五)UML图绘制

  • 实验内容

使用WhiteStarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。

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

  • 实验步骤
  1. 打开StarUML后,File->New新建一个文件
  2. 单击Class拖动到画布上,修改类的名称

回车确认

  1. 右键单击类,添加对象和方法(如图所示)

  2. 双击对象或方法的名字可修改,单击小加号可以添加一个新的对象或方法

  3. 点击对象或方法,Properties->Visibility,修改访问权限

  4. 完成


代码实现


PSP时间图

步骤 耗时 百分比
需求分析 20min 6%
设计 30min 9%
代码实现 90min 27.3%
测试 120min 36.4%
分析总结 70min 21%

分析单元测试的好处

  1. 帮助开发人员编写代码,提升质量、减少bug。
  2. 提升反馈速度,减少重复工作,提高开发效率。
  3. 保证你最后的代码修改不会破坏之前代码的功能。
  4. 让代码维护更容易。
  5. 有助于改进代码质量和设计。

参考资料

  1. 实验二《Java面向对象程序设计》的一点说明
  2. 为什么要编写单元测试?单元测试的优势及优点
  3. 实验二 Java面向对象程序设计
  4. Intellj IDEA 简易教程

20165218 实验二 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. 工作中遇到的令人头疼的bug

    工作中我们会遇到形形色色的bug,但是很多bug都可以调试很明显的看出来,这种bug解决起来我们不会那么头疼但是有些却让人头疼而捉急,特别是本地运行一切正常,上传服务器就会出现bug.现在我总结几个我 ...

  2. 人脸辨识,用树莓派Raspberry Pi实现舵机云台追踪脸孔

    影像辨识作为近年最热门的专业技术之一,广泛用于智慧监视器.车电监控.智慧工厂.生物医疗电子等等:其中,人脸辨识是一个很重要的部分,网络上已经有相当多的资源可供下载使用:于是我们使用舵机云台作为镜头旋转 ...

  3. SQLAlchemy 简单笔记

    ORM 江湖##### 曾几何时,程序员因为惧怕SQL而在开发的时候小心翼翼的写着sql,心中总是少不了恐慌,万一不小心sql语句出错,搞坏了数据库怎么办?又或者为了获取一些数据,什么内外左右连接,函 ...

  4. 高可用Kubernetes集群-10. 部署kube-proxy

    十二.部署kube-proxy 1. 创建kube-proxy证书 1)创建kube-proxy证书签名请求 # kube-proxy提取CN作为客户端的用户名,即system:kube-proxy. ...

  5. Amazon 成功的秘訣是…

    從任何的標準去看,今日的 Amazon,都是一家超級成功的企業 — 它的線上書城和其他 B2C 電子商務業務,全球第一,年營業額超過 200 億美金.它的 AWS (Amazon Web Servic ...

  6. Chrome 鲜为人知的秘籍(内部协议)&&Chrome功能指令大全

    楼主以 Chrome 版本 39.0.2171.95 m 为例,耗费2小时的记录: chrome://accessibility 用于查看浏览器当前访问的标签,打开全局访问模式可以查看:各个标签页面的 ...

  7. Bate版本控制报告

    报告beta阶段2周中,项目的版本控制情况,不包括未在coding.net的部分. 包括不限于:check in (不是push)次数; 总词数为29次 check in log(时间.人员.mess ...

  8. Java:有关自定数组的学习

    Java:有关==自定数组==的学习 在 ==<Java程序设计与数据结构教程>== 里我在==P212~P213==页看到一个GradeRange的程序,它用的数组是自定设定的Grade ...

  9. 团队Alpha冲刺(十)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  10. HDU 5465 Clarke and puzzle Nim游戏+二维树状数组

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle  Accepts: 42  Submissions: 26 ...