java面向对象程序设计实验一_20155336 《Java程序设计》实验二 (Java面向对象程序设计)实验报告...

20155336 《Java程序设计》实验二 (Java面向对象程序设计)实验报告

实验内容

初步掌握单元测试和TDD

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

初步掌握UML建模

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

了解设计模式

实验步骤

伪代码->用特定编程语言翻译成产品代码->测试代码验证

(一)单元测试

(1)伪代码

百分制转五分制:

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

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

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

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

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

其他,转成“错误”

(2)产品代码

public class MyUtil{

public static String percentage2fivegrade(int grade){

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

if (grade < 60)

return "不及格";

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

else if (grade < 70)

return "及格";

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

else if (grade < 80)

return "中等";

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

else if (grade < 90)

return "良好";

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

else if (grade < 100)

return "优秀";

//其他,转成“错误”

else

return "错误";

}

}

(3)测试代码XXXXTest

/**

* Created by lovelysong on 17-4-21.

*/

public class MyUtilTest {

public static void main(String[] args) {

///测试出错情况

if(MyUtil.percentage2fivegrade(-10) != "错误")

System.out.println("test failed 1!");

else if(MyUtil.percentage2fivegrade(115) != "错误")

System.out.println("test failed 2!");

//测试正常情况

if(MyUtil.percentage2fivegrade(55) != "不及格")

System.out.println("test failed!");

else if(MyUtil.percentage2fivegrade(65) != "及格")

System.out.println("test failed!");

else if(MyUtil.percentage2fivegrade(75) != "中等")

System.out.println("test failed!");

else if(MyUtil.percentage2fivegrade(85) != "良好")

System.out.println("test failed!");

else if(MyUtil.percentage2fivegrade(95) != "优秀")

System.out.println("test failed!");

//测试边界情况

if(MyUtil.percentage2fivegrade(0) != "不及格")

System.out.println("test failed 1!");

else if(MyUtil.percentage2fivegrade(60) != "及格")

System.out.println("test failed 2!");

else if(MyUtil.percentage2fivegrade(70) != "中等")

System.out.println("test failed 3!");

else if(MyUtil.percentage2fivegrade(80) != "良好")

System.out.println("test failed 4!");

else if(MyUtil.percentage2fivegrade(90) != "优秀")

System.out.println("test failed 5!");

else if(MyUtil.percentage2fivegrade(100) != "优秀")

System.out.println("test failed 6!");

else

System.out.println("test passed!");

}

}

(4) 测试结果

07cd7fd079751178.png

TDD(Test Driven Devlopment, 测试驱动开发)

测试代码→产品代码

TDD的一般步骤如下:

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

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

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

4:编写产品代码

5:测试通过

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

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

IDEA中使用JUnit:安装插件 → 新建一个空类MyUtil1 → 创建JUnit3的测试用例 → 增加一个测试用例testNormal

d9bc879c2a881a03.png

在操作的过程中遇到TestCase、junit和@Test是红色的问题

8a2b9dda98e391c9.png

de9ff85c19bb1d45.png

需要在IDEA中的项目(模块)中加入junit.jar包和junit-4.12.jar两个包。

eb38fa95eb4079e9.png

面向对象三要素:封装、继承、多态

1.抽象——函数

2.封装、继承与多态:

面向对象分析(OOA):根据抽象关键的问题域来分解系统,关注是什么(what):提供符号设计系统的面向对象的实现过程,用非常接近问题域术语的方法把系统构造成“现实世界”的对象,关注怎么做(how),通过模型来实现功能规范。

面向对象设计(OOD):在设计的基础上用编程语言(如Java)编码

封装带来模块化(Modularity)和信息隐藏(Information hiding)的好处;接口(interface)是封装的准确描述手段。

public class Dog {

private String color;

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

public String bark(){

return "汪汪";

}

public String toString(){

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

}

}

Dog类通过使用类和访问控制(private,public)隐藏了属性color,开放了接口setColor(),getColor(),bark()和toString。

用UML展示

dc71eb69f7ee33fe.png

设计模式

1.S.O.L.I.D原则

SRP(Single ResponsibilityPrinciple,单一职责原则)

OCP(Open-Closed Principle,开放-封闭原则)

LSP(Liskov Substitusion Principle,Liskov替换原则)

ISP(Interface Segregation Principle,接口分离原则)

DIP(Dependency Inversion Principle,依赖倒置原则)

2.设计模式:创建型,结构型,行为型

3.设计模式实例

让系统支持Byte类

abstract class Data {

abstract public void DisplayValue();

}

/*class Byte {

byte value;

public Byte(){

value=15;

}

public void DisplayValue(){

System.out.println(value);

}

}*/

class Document {

Byte pi;

public Document(){

pi = new Byte();

}

public void DisplayData(){

pi.DisplayValue();

}

}

class Byte extends Data {

byte value;

Byte() {

value=15;

}

public void DisplayValue(){

System.out.println (value);

}

}

// Pattern Classes

abstract class Factory {

abstract public Data CreateDataObject();

}

class ByteFactory extends Factory {

public Data CreateDataObject(){

return new Byte();

}

}

public class MyDoc1{

static Document d;

public static void main(String [] args) {

d = new Document();

d.DisplayData();

}

}

运行结果如下:

a9d26e12319af675.png

二、实验过程中遇到的问题

问题一:在IDEA中的项目(模块)中加入junit.jar包后,@Test和junit依然是红色的,如图所示

e0958234abbfbda4.png

解决方案: 还需要添加junit-4.12.jar路径

c52e16efe2f460f6.png

问题二

看过老师的要求后发现自己之前提交的不合格,设置测试类时出现这样的编译错误

a5c6887714ada21a.png

7bc11e78347bbbee.png

解决方案: 发现是自己的产品代码有问题,在询问了同学后进行修改,修改如下:

public class MyUtil1{

public static String percentage2fivegrade(int grade){

//如果成绩小于0,转成“错误”

if ((grade < 0))

return "错误";

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

else if (grade < 60)

return "不及格";

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

else if (grade < 70)

return "及格";

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

else if (grade < 80)

return "中等";

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

else if (grade < 90)

return "良好";

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

else if (grade <= 100)

return "优秀";

//如果成绩大于100,转成“错误”

else

return "错误";

}

}

运行结果如下:

07cd7fd079751178.png

三、实验感想和体会

其实单元测试不仅能保证项目进度还能优化你的设计。有些开发者会说,写单元测试代码太费劲了,比写业务代码还麻烦。可是如果强迫开发者

必须写单元测试代码的时候。聪明且又想‘偷懒’的开发人员为了将来可以更方便地编写测试代码。唯一的办法就是通过优化设计,尽可能得将业

务代码设计成更容易测试的代码。慢慢地开发者就会发现。自己设计的程序耦合度也越来越低。每个单元程序的输入输出,业务内容和异常情况

都会尽可能变得简单。最后发现自己的编程习惯和设计能力也越来越能够轻松驾驭。

四、实验PSP (Presonal Sowftware Process)时间

| 步骤 | 耗时 | 百分比 |

| 需求分析 |5 | 6.25% |

| 设计 | 10 | 12.5% |

| 代码实现 | 50 | 62.5% |

| 测试 | 10 | 12.5% |

| 分析总结 | 5 | 3.25% |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值