实验二 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. DDD实战成绩管理---需求分析

    需求的分析我们采用四色模型.从用户故事中找出MI,然后围绕MI找出其中的role,ppt,des.本次先对两个优先级最高的用户故事进行四色模型建模. 1.用户故事一建模:作为教务处老师,我要建立教学班 ...

  2. OpenCL入门:(二:用GPU计算两个数组和)

    本文编写一个计算两个数组和的程序,用CPU和GPU分别运算,计算运算时间,并且校验最后的运算结果.文中代码偏多,原理建议阅读下面文章,文中介绍了OpenCL相关名词概念. http://opencl. ...

  3. 移动端车牌识别/车牌OCR识别

    周末,小编约了朋友商场shopping. 开车进地下车库时,“滴”的一声,完成车牌录入:开车离开时,扫描二维码,输入车牌,完成停车收费.小编不禁感叹科技改变生活,人工智能给生活带来的便利. 车牌自动识 ...

  4. manjaro i3下 dmenu terminal 和 terminal_hold 打开方式记录

    分别用type为terminal 和 terminal_hold 打开eclipse 用terminal_hold打开,终端和界面分左右显示 用terminal打开,终端和界面分上下显示 除了排列方式 ...

  5. MySQL双主复制

    原文发表于cu:2017-06-12 本文简单介绍MySQL双主复制原理及1个简单是双主复制验证. 一.MySQL双主复制原理 1. 双主复制原理 master-master复制的两台服务器,既是ma ...

  6. JAVA学习笔记--正则表达式

    正则表达式是一种强大而灵活的文本处理工具.使用正则表达式,可以让我们以编程的方式构造复杂的文本,并对输入的字符串进行搜索. 一.基础正则表达式语法(表格来自J2SE6_API) 字符 x 字符 x \ ...

  7. win7重装系统后设置Python2.7环境

    起因 台式机的主板莫名出现问题,显示器画面卡顿不能动,鼠标键盘无反应,在这种情况下只好按住电源键断电.下面重启后,显示器无画面,猜测开机后没有进BIOS.然后就拆机箱,拔下电源线后撬起主板电池几秒再放 ...

  8. 第五次ScrumMeeting博客

    第五次ScrumMeeting博客 本次会议于10月29日(日)22时整在3公寓725房间召开,持续15分钟. 与会人员:刘畅.辛德泰.窦鑫泽.张安澜.赵奕. 1. 每个人的工作(有Issue的内容和 ...

  9. android点击事件的四种方式

    android点击事件的四种方式 第一种方式:创建内部类实现点击事件 代码如下: package com.example.dail; import android.text.TextUtils; im ...

  10. Python 装饰器Decorator(一)

    (一) 装饰器基础知识 什么是Python装饰器?Python里装饰器是一个可调用的对象(函数),其参数是另一个函数(被装饰的函数) 假如有一个名字为somedecorator的装饰器,target是 ...