java程序面向对象show,20165309 实验二 Java面向对象程序设计

2017-2018-2 20165309实验二《Java面向对象程序设计》实验报告

一、实验内容

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

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

3. 初步掌握UML建模

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

5. 了解设计模式

二、实验步骤

(一)单元测试

1.三种代码:伪代码、测试代码、产品代码

需求:在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。

先用自然语言写出从意图层面来解决问题的伪代码:

百分制转五分制:

如果成绩小于60,转成“不及格”

如果成绩在60与70之间,转成“及格”

如果成绩在70与80之间,转成“中等”

如果成绩在80与90之间,转成“良好”

如果成绩在90与100之间,转成“优秀”

其他,转成“错误”

然后用Java语言将伪代码“翻译”成产品代码MyUtil.java。

写测试代码MyUtilTest.java来检验产品代码:

JUnit测试用例:

正常情况

错误情况(负数,超过100的数)

边界情况(0,60,70,80,90,100)

在项目上右键选择New->Directory建目录test,右键单击test目录,在弹出的菜单中选择Mark Directory as->Test Sources Root来设置SOURCEPATH环境变量。

测试通过的截图如下:

2a3e027938f0253665248d9efa8995dd.png

完善产品代码。

测试代码和最终的产品代码在代码链接里。

2.测试驱动开发TDD(测试代码->产品代码)

在新目录下创建StringBufferDemo类, 鼠标单击类名旁出现的灯泡状图标,在弹出的菜单中Create Test。

测试StringBufferDemo类的方法charAt()、capacity()、indexOf()、length():

char charAt(int index)返回此序列中指定索引处的 char 值。

int capacity()返回当前容量。

int indexOf(String str)返回第一次出现的指定子字符串在该字符串中的索引。

int length()返回长度(字符数)。

测试结果如下:

d24a2c69ba6a554a8785bd1913e26fe3.png

(二)对设计模式示例进行扩充,让其支持Long类

如果要求支持Long类,Document类要修改构造方法,这违反了OCP原则。封装、继承、多态解决不了问题,这时就需要设计模式了:

class Long extends Data

class LongFactory extends Factory

在MyDoc类中添加测试代码: public class MyDoc {

static Document d;

public static void main(String[] args) {

d = new Document(new LongFactory());

d.DisplayData();

}

}

运行结果如下:

b5818b7eccca7be00208ee9aebe499f3.png

代码在码云链接里。

(三)以TDD的方式开发一个复数类Complex

伪代码: Complex类要输出实部、虚部,并按照a+bi的形式输出复数。

Complex类中有两个变量,实部A和虚部B。

方法:

getA(int a);返回实部

getB(int b);返回虚部

ComplexAdd(Complex c);实现复数相加

ComplexMinus(Complex c);实现复数相减

ComplexMulti(Complex c);实现复数相乘

ComplexDiv(Complex c);实现复数相除

toString(int a,int b);将复数输出成a+bi的格式。

测试结果:

5f30162638632305a1c0a51ee9f57d90.png

产品代码和测试代码在码云链接。

(四)面向对象三要素

抽象

封装、继承与多态

使用UML对实验二中代码进行建模

代码: public abstract class Animal {

private String color;

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

public abstract String shout();

}

public class Cat extends Animal {

public String shout() {

return "喵喵";

}

public String toString() {

return "The Cat's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";

}

}

public class Dog extends Animal

{

public String shout() {

return "汪汪";

}

public String toString() {

return "The Dog's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";

}

}

UML图(由网页ProcessOn制作)

b5cf80a2764d6de4c83fc2693aac6a28.png

三、实验中遇到的问题及解决

问题1:当时安装IDEA的时候选择的都是默认路径,而且也不算是经常用,所以没有找到Junit jar 包。

解决1:右键桌面上的IntelliJ IDEA Ultimate,点进属性里面,复制地址再粘到“+”就方便找到了~

94e545a6b0d3751000f1d2fab808168e.png

问题2:对StringBuffer的了解不够。

解决2:可以参考学习这个网址:www.runoob.com/java/java-stringbuffer.html。

解决3:long型的范围是-2147483648~2147483647

问题4:在设计实现复数类时不知道怎么去拼接字符串。

解决4:尝试concat()方法后仍存在问题,突然又意识到可以直接+....

四、实验收获

这次的实验让我学会了如何去写测试代码,也让我规范了编写代码的习惯。跟着老师的博客教程和蓝墨云上的要求去做的同时,我也意识到了自己对一些基础方面的知识还不够熟悉...得认真看书才是。

步骤

耗时

百分比

需求分析

15min

12.5

设计

20min

16.7

代码实现

40min

33.3

测试

25min

20.8

分析总结

20min

16.7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值