java实验报告抛物线_2018-2019-2 20175306实验二面向对象程序设计《Java开发环境的熟悉》实验报告...

这篇博客详细记录了作者进行面向对象程序设计的实验过程,包括Java开发环境配置、设计模式的理解与应用、TDD(测试驱动开发)方法在复数类开发中的运用。作者通过创建不同数据类型的子类并进行测试,展示了OCP(开闭原则)和DIP(依赖倒置原则)。在TDD部分,作者实现了复数类的加减乘除操作,并编写了相应的单元测试,确保代码的正确性。此外,作者还分享了解决单元测试中遇到的问题以及对测试重要性的认识。
摘要由CSDN通过智能技术生成

#2018-2019-2 20175306实验二面向对象程序设计《Java开发环境的熟悉》实验报告

##面向对象程序设计-1 ###实验要求:

###实验步骤:

点击New->Directory新建一个test目录,再右键点击设置环境变量,选择Mark Directory->Test Sources Root即可

ad86c5c72fa658a583ade3b00f3b2937.png

f741d3a2305e5157d336bcc6201243ab.png

正常情况:

6a8b40feae47783cccf966b3f4d32413.png

错误情况:

e3b9c95aba2950678e451520cc7de10d.png

边界情况:

f1eeb8d0445b3879ba8963b63f4cd710.png

最终测试结果:

4f2664108238d4987db66e87251941e9.png

##面向对象程序设计-2 ###实验要求:

###实验步骤:

已安装JUnitGenerator V2.0

90afef9fa6f599b31cb24b0a81a1d3b3.png

StringBuffer代码运行结果

9c7eada48eadc0cd6cc5e0616e136482.png

测试结果

689c2c28777e0980836b996c22510d95.png

##面向对象程序设计-3 ###实验要求:

对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式 用自己的学号%6进行取余运算,根据结果进行代码扩充: 0: 让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印 1: 让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印 2: 让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印 3: 让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印 4: 让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印 5: 让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印 ###实验步骤:

OCP原则是OOD中最重要的一个原则,OCP原则的内容是:

软件实体(类,模块,函数等)应该对扩充开放,对修改封闭。

对扩充开放(Open For Extension )要求软件模块的行为必须是可以扩充的,在应用需求改变或需要满足新的应用需求时,我们要让模块以不同的方式工作;

对修改封闭(Closed for Modification )要求模块的源代码是不可改动的,任何人都不许修改已有模块的源代码。

基于OCP,利用面向对象中的多态性(Polymorphic),更灵活地处理变更拥抱变化,OCP可以用以下手段实现:(1)抽象和继承,(2)面向接口编程。

DIP原则的内容是:

高层模块不应该依赖于低层模块。二者都应该依赖于抽象;

抽象不应该依赖于细节。细节应该依赖于抽象;

通过接口或者抽象类,DIP在应用中通过依赖注入的方式实现解耦,重用低级模块,重用实现,解除依赖。

我的是让系统支持Byte类,我不是特别明白怎么进行设计,我是根据支持Float类以及其UML类图进行仿照编写的。 测试代码:

// 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();

}

}

运行结果为:

046295606308c2633fe1f8c60de827bf.png

367d4214d6edec7d6d6ec35a2e90446a.png

##面向对象程序设计-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());

}

}

运行结果截图:

c5c11edb640f40d07c8c0eab5328e4f0.png

类图中至少两个类。

###实验步骤:

d99e4478493612812e6338ad5976dfcb.png

##实验中遇到的问题:

问题一:在单元测试中,@Test是红色的。

解决过程:这是因为没有导入相应的包,根据老师的教程,然后我又查阅了一些资料,找到了解决方案。要按照相同的方法,导入两个Junit的包。

32eeb473ef8150b43656d1c4c1ea7854.png

##总结: 本次实验主要是针对测试,在之前的结对项目中也应用到了测试,所以提前学习了一下,再做实验的时候就感觉比较轻松,遇到的困难也比较少。测试对一个程序来说是至关重要的,可以发现很多问题,合理的运用测试,能够让你的程序更加完美。在制作UML图的时候,我首先运用了老师推荐的软件,但我还是比较习惯使用ProcessOn,因为这是一个网页软件,在网页就可以直接进行编辑,不用下载,非常方便。但是WhiteStarUML毕竟是一款专门制作UML类图的软件,更加专业,总之两者皆有长处,可根据自己的喜好选择适合自己的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值