实验二 Java面向对象程序设计 20175301李锦然实验报告

时间:2021-06-23 02:22:23

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

实验内容

1. 初步掌握单元测试和TDD

2. 理解并掌握面向对象三要素:封装、继承、多态

3. 初步掌握UML建模

4. 熟悉S.O.L.I.D原则

5. 了解设计模式

根据实验提交的规则,把实验为五个部分

面向对象程序设计-1

实验要求:

  • 参考:> http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST
  • 参考:> http://www.cnblogs.com/rocedu/p/6736847.html
  • 提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。

实验步骤:

在IDEA中新建一个工程,然后建立MyUtil类还有检查用的类,下图是最初的类(改了名,问题不大)

实验二 Java面向对象程序设计 20175301李锦然实验报告

然后导入最初的程序

实验二 Java面向对象程序设计 20175301李锦然实验报告

然后看看检验程序结果

实验二 Java面向对象程序设计 20175301李锦然实验报告

果然出错了,检查出错原因是因为不及格的成绩不对啊

实验二 Java面向对象程序设计 20175301李锦然实验报告

修改及格成绩为60,然后继续检测,这次通过了

然后来检测边界情况

实验二 Java面向对象程序设计 20175301李锦然实验报告

看输出是满分出了问题这里输出时faild6遮住了

修改程序然后再检测通过

最终程序:

实验二 Java面向对象程序设计 20175301李锦然实验报告

实验二 Java面向对象程序设计 20175301李锦然实验报告

补一个用junit的,虽然这个实验要求上没有

测试代码如下:

import org.junit.Test;
import junit.framework.TestCase;
public class MyUtilTest extends TestCase {
@Test
public void testNormal() {
assertEquals("不及格", MyUtil.percentage2fivegrade());
assertEquals("及格", MyUtil.percentage2fivegrade());
assertEquals("中等", MyUtil.percentage2fivegrade());
assertEquals("良好", MyUtil.percentage2fivegrade());
assertEquals("优秀", MyUtil.percentage2fivegrade());
}
@Test
public void testExceptions(){//测试出错情况
assertEquals("错误", MyUtil.percentage2fivegrade());
assertEquals("错误", MyUtil.percentage2fivegrade(-));
}
@Test
public void testBoundary(){//测试边界情况
assertEquals("不及格", MyUtil.percentage2fivegrade());
assertEquals("及格", MyUtil.percentage2fivegrade());
assertEquals("中等", MyUtil.percentage2fivegrade());
assertEquals("良好", MyUtil.percentage2fivegrade());
assertEquals("优秀", MyUtil.percentage2fivegrade());
assertEquals("优秀", MyUtil.percentage2fivegrade());
} }

代码全部通过!

实验二 Java面向对象程序设计 20175301李锦然实验报告

面向对象程序设计-2

实验要求:

  • 参考积极主动敲代码,使用JUnit学习Java >http://www.cnblogs.com/rocedu/p/4837092.html
  • 参考>http://www.cnblogs.com/rocedu/p/6736847.html
  • 以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。

实验步骤:

其实我并不喜欢在idea上面编程,但是思考之后确实IDEA更便于发现错误,工具更多,比如这次的junit直接在IDEA中配置就可以了

实验二 Java面向对象程序设计 20175301李锦然实验报告

还有TDD方法第一个例子

实验二 Java面向对象程序设计 20175301李锦然实验报告

然后就开始用JUNIT对StringBufferDemo动手啦

1 正式代码

public class StringBufferDemo{
StringBuffer str=new StringBuffer();
StringBufferDemo(StringBuffer str){
this.str=str;
}
public char charAt(int i){
return str.charAt(i);
}
public int capacity(){
return str.capacity();
}
public int length(){
return str.length();
}
public int indexOf(String buf) {
return str.indexOf(buf);
}
}

2 测试代码

import junit.framework.TestCase;
import org.junit.Test; public class StringBufferDemoTest extends TestCase {
StringBuffer a = new StringBuffer("StringBuffer");//测试12个字符(<=16)
StringBuffer b = new StringBuffer("StringBufferStringBuffer");//测试24个字符(>16&&<=34)
StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");//测试36个字符(>34)
@Test
public void testcharAt(){
assertEquals('S',a.charAt());
assertEquals('B',a.charAt());
assertEquals('r',a.charAt());
}
@Test
public void testcapacity(){
assertEquals(,a.capacity());
assertEquals(,b.capacity());
assertEquals(,c.capacity());
}
@Test
public void testlength(){
assertEquals(,a.length());
assertEquals(,b.length());
assertEquals(,c.length());
}
@Test
public void testindexOf(){
assertEquals(,a.indexOf("Str"));
assertEquals(,a.indexOf("Buff"));
assertEquals(,a.indexOf("er"));
}
}

3 测试结果

实验二 Java面向对象程序设计 20175301李锦然实验报告

ALLPASS

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

实验要求:
参考http://www.cnblogs.com/rocedu/p/6736847.html
对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

实验步骤:

代码:

abstract class Data {
abstract public void DisplayValue();
}
class Integer extends Data {
int value;
Integer() {
value=;
}
public void DisplayValue(){
System.out.println (value);
}
}
class Float extends Data {
float value;
Float() {
value=2.017531F;
}
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 FloatFactory extends Factory {
public Data CreateDataObject(){
return new Float();
}
}
class Document { //Client classes
Data pd;
Document(Factory pf){
pd = pf.CreateDataObject();
}
public void DisplayData(){
pd.DisplayValue();
}
}
//Test class
public class MyDoc {
static Document d,f;
public static void main(String[] args) {
d = new Document(new IntFactory());
d.DisplayData();
f = new Document(new FloatFactory());
f.DisplayData();
}
}

实验二 Java面向对象程序设计 20175301李锦然实验报告

correct

实验二 面向对象程序设计-4

实验要求:

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

参考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)

实验步骤:

代码:

import java.util.Objects;
import java.lang.Integer; public class Complex {
double RealPart;
double ImagePart;
public Complex() {
} public Complex(double R,double I)
{
RealPart = R;
ImagePart = I; }
public double getterRealPart(){
return RealPart;
}
public double getterImagePart(){
return ImagePart;
} 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 s = "";
if(getterRealPart()==&&getterImagePart()==){
s="";
}
else if(getterRealPart()!=&&getterImagePart()==){
s=s+getterRealPart();
}
else if (getterRealPart()==&&getterImagePart()!=){
s=s+getterImagePart()+"i";
}
else
{
if(getterImagePart()<){
s = s+getterRealPart()+getterImagePart()+"i";
}
else {
s = s+getterRealPart()+"+"+getterImagePart()+"i";
} }
return s;
} 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,RealPart*a.ImagePart + ImagePart*a.RealPart);
}
Complex ComplexDiv(Complex a) {
return new Complex((RealPart * a.ImagePart + ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart), (ImagePart * a.ImagePart + RealPart * a.RealPart) / (a.RealPart * a.RealPart + a.RealPart * a.RealPart));
}
}

测试代码

import junit.framework.TestCase;
import org.junit.Test; public class ComplexTest extends TestCase {
Complex b = new Complex(,);
Complex c = new Complex(,-);
@Test
public void testComplexAdd(){
assertEquals("5.0+2.0i",b.ComplexAdd(c)+"");
}
@Test
public void testComplexMulti(){
assertEquals("41.0-1.0i",b.ComplexMulti(c)+"");
}
@Test
public void testComplexDiv(){
assertEquals("-0.034482758620689655-3.625i",b.ComplexDiv(c)+"");
}
@Test
public void testComplexSub(){
assertEquals("1.0+12.0i",b.ComplexSub(c)+"");
} }

这个Div是因为选数不慎,但是已经修改了

实验二 Java面向对象程序设计 20175301李锦然实验报告

全部过关

五:

实验要求:

使用[WhiteStarUML](http://whitestaruml.sourceforge.net/)对实验二中的代码进行建模,发类图的截图,加上学号水印。
参考http://www.cnblogs.com/rocedu/p/6736847.html

类图中只少两个类。

实验步骤:

实验二 Java面向对象程序设计 20175301李锦然实验报告

实验过程中遇到的问题及其解决

1:无论如何junit没有效果总是红字显示我没有junit

后来发现是因为我在一个文件夹里面总是考了两个相同的类(一个用来@TEST)

解决方法:删除一个

2:做TDD例子的时候总是会便用找不到类??

实验二 Java面向对象程序设计 20175301李锦然实验报告

后来发现是类名写错了,,卡了我好久想想觉得好笑