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

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

实验内容

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

    实验步骤

    (一)单元测试

    (1) 三种代码: 伪代码、产品代码、测试代码。

    伪代码与具体编程语言无关,伪代码从意图层面来解决问题,最终,伪代码是产品代码最自然的、最好的注释。

    产品代码



    增加对负数下测试:



    我们对输入为“0,60,70,80,90,100”这些边界情况进行测试:



    我们发现边界情况中输入100时有一个Bug。我们修改MyUtil.java,把判断优秀的条件中包含输入为100的情况

    修改bug后测试:

TDD

先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。

TDD的一般步骤如下:

1、明确当前要完成的功能,记录成一个测试列表

2、快速完成编写针对此功能的测试用例

3、测试代码编译不通过(没产品代码呢)

4、编写产品代码

5、测试通过

6、对代码进行重构,并保证测试通过(重构下次实验练习)

7、循环完成所有功能的开发

TDD的编码节奏是:

1、增加测试代码,JUnit出现红条

2、修改产品代码

3、JUnit出现绿条,任务完成

(由于提前阅读了老师的学习指导,直接选择了绿条正确做法。)

做法如截图

实验2-3

步骤:来自http://www.cnblogs.com/rocedu/p/6736847.html

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

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

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

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

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

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

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

这是两个很好的提交,增加的代码和测试结果一目了然:

// Server Classes

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=1;

}

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 pd;

Document(Factory pf){

pd = pf.CreateDataObject();

}

public void DisplayData(){

pd.DisplayValue();

}

}

//Test class

public class MyDoc {

static Document d;

public static void main(String[] args) {

d = new Document(new ByteFactory());

d.DisplayData();

}

}

测试结果如下:

实验2-4:以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)

实验步骤:

产品代码

public class Complex{

private double r;

private double i;

public Complex(double r, double i) {
this.r = r;
this.i = i;
} public static double getRealPart(double r) {
return r;
} public static double getImagePart(double i) {
return i;
} public Complex ComplexAdd(Complex a) {
return new Complex(r + a.r, i + a.i);
}
public Complex ComplexSub(Complex a) {
return new Complex(r - a.r, i - a.i);
}
public Complex ComplexMulti(Complex a) {
return new Complex(r * a.r - i * a.i, r * a.i + i * a.r);
}
public Complex ComplexDiv(Complex a) {
return new Complex((r * a.i + i * a.r)/(a.i * a.i + a.r * a.r), (i * a.i + r * a.r)/(a.i * a.i + a.r * a.r));
} public String toString() {
String s = " ";
if (i > 0)
s = r + "+" + i + "i";
if (i == 0)
s = r + "";
if (i < 0)
s = r + " " + i + "i";
return s;
}

}

测试代码:

import junit.framework.TestCase;

import org.junit.Test;

public class ComplexTest extends TestCase {

Complex c1 = new Complex(1, 2);

Complex c2 = new Complex(2, 2);

Complex c3 = new Complex(2,0);

@Test

public void testgetRealPart() throws Exception {

assertEquals(-1.1, Complex.getRealPart(-1.1));

assertEquals(6.0, Complex.getRealPart(6.0));

assertEquals(0.0, Complex.getRealPart(0.0));

}

@Test

public void testgetImagePart() throws Exception {

assertEquals(-1.1, Complex.getImagePart(-1.1));

assertEquals(6.0, Complex.getImagePart(6.0));

assertEquals(0.0, Complex.getImagePart(0.0));

}

@Test

public void testComplexAdd() throws Exception {

assertEquals("3.0+4.0i", c1.ComplexAdd(c2).toString());

assertEquals("3.0+2.0i", c1.ComplexAdd(c3).toString());

assertEquals("4.0+2.0i", c2.ComplexAdd(c3).toString());

}

@Test

public void testComplexSub() throws Exception {

assertEquals("-1.0", c1.ComplexSub(c2).toString());

assertEquals("-1.0+2.0i", c1.ComplexSub(c3).toString());

assertEquals("0.0+2.0i", c2.ComplexSub(c3).toString());

}

@Test

public void testComplexMulti() throws Exception {

assertEquals("-2.0+6.0i", c1.ComplexMulti(c2).toString());

assertEquals("2.0+4.0i", c1.ComplexMulti(c3).toString());

assertEquals("4.0+4.0i", c2.ComplexMulti(c3).toString());

}

@Test

public void testComplexComplexDiv() throws Exception {

assertEquals("0.75+0.75i", c1.ComplexDiv(c2).toString());

assertEquals("1.0+0.5i", c1.ComplexDiv(c3).toString());

assertEquals("1.0+1.0i", c2.ComplexDiv(c3).toString());

}

}

测试结果:

实验2-5:对实验2代码进行建模结果如下:

#20175201 实验二: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. 了解设计 ...

  10. 20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计

    20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 ...

随机推荐

  1. java 网站用户在线和客服聊天

    注:本文来源于<java 网站用户在线和客服聊天> 这是应用到项目中的一个例子. 实现原理是将信息存储到Application域里面.然后使用Struts2 Action 用json格式的 ...

  2. linux无法联网使用yum提示cannot find a valid baseurl for repobase7x86_64

    每次安装新镜像时会遇到物理机有网络新安装的linux中却无法与物理机通信(不能连网),只能玩一些预装功能.命令,无法使用各种常用工具(特别是MINI版连ifconfig都没有o(╥﹏╥)o),下面记录 ...

  3. Accumulation Degree

    #include<cstdio> #include<cstring> #define INF 0x7fffffff using namespace std; ; inline ...

  4. C# .Net List<T>中Remove()、RemoveAt()、RemoveRange()、RemoveAll()的区别,List<T>删除汇总

    在List<T>中删除主要有Remove().RemoveAt().RemoveRange().RemoveAll()这几个方法.下面一一介绍使用方法和注意点. 我们以List<st ...

  5. c++sort函数的使用总结

    sort类函数: 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序 partial_ ...

  6. leetcode刷题第一日<两数和问题>

    开始就用到了c++的哈希表是真的恶心,首先学习一波基础知识 https://blog.csdn.net/u010025211/article/details/46653519 下面放下大佬的代码 cl ...

  7. KaliLinux常用服务配置教程DHCP服务工作流程

    KaliLinux常用服务配置教程DHCP服务工作流程 DHCP服务工作流程如图1.1所示. 具体的工作流程如下所示: (1)DHCP客户端以广播的方式发出DHCP Discover报文. (2)所有 ...

  8. css-tips

    div的height:100%有作用 其父元素设置height:100% 包括html,body

  9. Do-Now—团队冲刺博客四

    各个成员今日完成的任务 侯泽洋:完成奖励页面设计,完成奖励从云端拉取到本地:完成奖励从云端拉取到本地 周亚杰:冲刺博客,个人中心设计(未完成) 王志伟:积分页面设计:积分页面设计 仇夏:树苗成长过程设 ...

  10. python一些语法糖用法

    @修饰符 '@'符号用作函数修饰符是python2.4新增加的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行.也就是说@A def f(): 是非法的. 只可以在模块或类定义层内对函数 ...