实验二 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. 在Notepad++中为Python配置编译环境

    方法1:按下F5 输入d:\Python25\python.exe "$(FULL_CURRENT_PATH)" 其中"d:\Python25\python.exe&qu ...

  2. JVM知识(上)

    目录 什么是JVM? JVM的生命周期 JVM的体系结构 JVM的数据类型 java虚拟机被称为"虚拟",因为它是一个抽象的计算机定义的规范.要运行一个Java程序,需要一个抽象的 ...

  3. Linux 深入理解inode/block/superblock

    基础命令学习目录首页 原文链接:https://blog.csdn.net/Ohmyberry/article/details/80427492 档案系统特性 传统的磁盘与档案系统之应用中,一个分割槽 ...

  4. 原生开发小程序 和 wepy 、 mpvue 对比

    1.三者的开发文档以及介绍: 原生开发小程序文档:点此进入 wepy 开发文档:点此进入 mpvue 开发文档:点此进入 2.三者的简单对比: 以下用一张图来简单概括三者的区别: 小程序支持的是 WX ...

  5. 基础系列(4)—— C#装箱和拆箱

    一 装箱和拆箱的概念 装箱是将值类型转换为引用类型 : 拆箱是将引用类型转换为值类型 : 值类型:包括原类型(Sbyte.Byte.Short.Ushort.Int.Uint.Long.Ulong.C ...

  6. 面试Tips

    面试Tips 面向对象:准备找工作的同学 内容概述:关于面试的一些经验总结,希望能带给你些许帮助.若有描述不准确的地方,欢迎指点建议. 内容提炼:共分为四阶段 1.面试前之静生慧 (1)课本知识过一遍 ...

  7. 从入门到不放弃——OO第一次作业总结

    写在最前面: 我是一个这学期之前从未接触过java的小白,对面向对象的理解可能也只是停留在大一python讲过几节课的面向对象.幸运的是,可能由于前三次作业难度还是较低,并未给我造成太大的困难,接下来 ...

  8. lintcode-422-最后一个单词的长度

    422-最后一个单词的长度 给定一个字符串, 包含大小写字母.空格' ',请返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 注意事项 一个单词的界定是,由字母组成,但不包含任何的空 ...

  9. lintcode-391-数飞机

    391-数飞机 给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机? 注意事项 如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权. 样例 对于每架 ...

  10. SpringMVC项目中获取所有URL到Controller Method的映射

    Spring是一个很好很强大的开源框架,它就像是一个容器,为我们提供了各种Bean组件和服务.对于MVC这部分而言,它里面实现了从Url请求映射控制器方法的逻辑处理,在我们平时的开发工作中并不需要太多 ...