实验报告
课程: | Java程序设计 | 班级: | 1353 | 姓名: | 苏正生 | 学号: | 2015333 | |||||||||
成绩: |
| 指导教师: | 娄家鹏 | 实验日期: | 2015.5.6 | |||||||||||
实验密级: |
| 预习程度: |
| 实验时间: | 3:20~5:00 | |||||||||||
仪器组次: |
| 必修/选修: | 必修 | 实验序号: | 实验二 | |||||||||||
实验名称: | Java面向对象程序设计 | |||||||||||||||
实验目的: 1.掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装、继承、多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式
| ||||||||||||||||
实验仪器:
| ||||||||||||||||
实验内容:
一、 单元测试和TDD
源代码1:
public class MyUtil{
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 "错误";
}
}
源代码2:
import org.junit.Test;
import junit.framework.TestCase;
public class MyUtilTest extends TestCase {
@Test
public void testNormal() {
assertEquals("不及格", MyUtil.percentage2fivegrade(55));
assertEquals("及格", MyUtil.percentage2fivegrade(65));
assertEquals("中等", MyUtil.percentage2fivegrade(75));
assertEquals("良好", MyUtil.percentage2fivegrade(85));
assertEquals("优秀", MyUtil.percentage2fivegrade(95));
}
}
二、 面向对象三要素
(1)抽象(2)封装、继承与多态
实验记录:
实验代码1:
public class AnimalTest {
public static void main(String[]args){
Dog d=new Dog();
d.setColor("Yellow");
getInfo(d);
Cat c=new Cat();
c.setColor("Black");
getInfo(c);
}
public static void getInfo(Dog d){
System.out.println(d.toString());
}
public static void getInfo(Cat c){
System.out.println(c.toString());
}
}
实验代码2:
package dog;
public class DogTest {
public static void main(String[] args){
Dog g=new Dog();
g.setColor("Yellow");
getInfo();
}
public static void getInfo(Dog d){
System.out.println(d.toString());
}
}
实验代码3:
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 Dog extends Animal{
public String shout(){
return "汪汪";
}
public String toString(){
return "The Dog's color is " + this.getColor() +", and it shouts "+ this.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() + "!";
}
}
三、设计模式初步
设计模式(design pattern)提供一个用于细化软件系统的子系统或组件,或它们之间的关系图,它描述通信组件的公共再现结构,通信组件可以解决特定语境中的一个设计问题。
实验过程:
实验代码:
// 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); } } // Pattern Classes abstract class Factory { abstract public Data CreateDataObject(); }class IntFactory extends Factory { public Data CreateDataObject(){ return new Integer(); } } //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 IntFactory()); d.DisplayData(); } } 四.使用TDD的方式设计并实现复数类Complex 总结
时间
步骤 | 耗时 | 百分比 |
需求分析 | 15分钟 | 5.5% |
设计 | 15分钟 | 5.5% |
代码实现 | 90分钟 | 33.3% |
测试 | 120分钟 | 44.4% |
分析总结 | 30分钟 | 12% |
单元测试的好处:
“软件的很多错误都来源于程序员对模块功能的误解、疏忽或不了解模块的变化。如何能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证?单元测试就是一个很有效的解决方案。”
没错,通过单元测试,不仅可以完善自己的编程逻辑和细节,而且对于代码的完善性和可靠性有了更好的提高。特别是编程过程中,代码模块和测试模块共同成长起来的过程,让整个编程更有逻辑性和严密性。
总结:本次实验,从单元测试,工程——包——类,封装、继承、接口等多方面对java编程能力进行了提高,不仅对于相关软件有了全新的认识,而且对于自己的编程习惯有了更好的优化。虽然从实验楼转战windows平台,再通过虚拟机最终完成,耗时有点过长,但是在编程能力的提高的同时,也锻炼了自己的耐性和韧劲。实验过程中,和老师、同学交流,也对于java有了新的认识。
20135333苏正生
2015年5月7日