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

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

一、实验报告封面

课程:Java程序设计 班级:1653 姓名:杨靖涛 学号:20165327

指导教师:娄嘉鹏 实验日期:2018.4.15

实验时间:15:35 - 17:50 实验序号:

实验名称:Java面向对象程序设计

提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。

实验要求:

1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;

2.完成实验、撰写实验报告,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);

3.实验报告中统计自己的PSP(Personal Software Process)时间;

4.严禁抄袭。

实验内容与步骤

参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST

参考http://www.cnblogs.com/rocedu/p/6736847.html

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

首先要明确程序要实现什么功能?要实现这些功能需要哪些操作?

伪代码从意图层面来解决问题。最终,伪代码是产品代码最自然的、最好的注释。因此,可以利用伪代码来明确以上这些要求。

注:伪代码与具体编程语言无关,不要写与具体编程语言语法相关的语句。

伪代码

  • 百分制转五分制:

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

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

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

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

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

    其他,转成“错误”

用Java语言翻译伪代码,生成产品代码

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.给新建好的test设置环境变量,也就是让IDEA知道这里存的是测试代码。在test上右击然后MakeDirectoryas之后选择testSourceRoot,这样就把这个文件夹设置成了存放测试代码的源文件的文件夹:

3.如下图:创建测试类,在test目录中编写测试代码MyUtilTest,其中的测试用例分为测试正常testNormal测试边界testBoundary测试异常testException三部分:

可利用以下测试代码对写成的产品代码进行测试,检查是否有不完善的地方。

测试代码


import junit.framework.TestCase;
import org.junit.Test; import static org.junit.Assert.*; 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));
}
@Test
public void testException(){
assertEquals("错误",MyUtil.percentage2fivegrade(-58));
assertEquals("错误",MyUtil.percentage2fivegrade(118));
}
@Test
public void testBoundary(){
assertEquals("不及格",MyUtil.percentage2fivegrade(0));
assertEquals("及格",MyUtil.percentage2fivegrade(60));
assertEquals("中等",MyUtil.percentage2fivegrade(70));
assertEquals("良好",MyUtil.percentage2fivegrade(80));
assertEquals("优秀",MyUtil.percentage2fivegrade(90));
assertEquals("优秀",MyUtil.percentage2fivegrade(100));
}
}

运行截图:

提交点二:以TDD的方式研究学习StringBuffer

对老师给的StringBufferDemo产品代码进行改写,并写出StringBuffer中的charAt、length、capcity这几个方法对应的测试代码进行测试。

按照老师给的参考代码中StringBufferDemo中调用的方法,将其更改为我的产品代码。

产品代码:

public class StringBufferDemo{
StringBuffer buffer = new StringBuffer();
public StringBufferDemo(StringBuffer buffer){
this.buffer = buffer;
}
public Character charAt(int i){
return buffer.charAt(i);
}
public int capacity(){
return buffer.capacity();
}
public int length(){
return buffer.length();
}
public int indexOf(String buf) {
return buffer.indexOf(buf);
}
}
  • 首先要理解以上代码中的方法。通过查询API文档,可知:

    • charAt(int i):返回此序列中指定索引处的 char 值。第一个 char 值在索引 0 处,第二个在索引 1 处,依此类推,这类似于数组索引。

    • indexOf(String s):返回输入的子字符串的第一个字母在母字符串的位置。

    • capacity():返回当前容量。容量指可用于最新插入的字符的存储量,超过这一容量就需要再次进行分配。

    • length():返回子浮窗的长度。

了解以上方法之后,需要编写测试代码对它们进行测试。

测试代码:

import junit.framework.TestCase;
import org.junit.Test; public class StringBufferDemoTest extends TestCase {
StringBuffer string1 = new StringBuffer("Students");
StringBuffer string2 = new StringBuffer("Students of class 1653");
StringBuffer string3 = new StringBuffer("Students of class 1653 and class 1652");
@Test
public void testCharAt() throws Exception{
assertEquals('t',string1.charAt(1));
assertEquals(' ',string2.charAt(8));
assertEquals('1',string3.charAt(18));
}
@Test
public void testCapacity() throws Exception{
assertEquals(24,string1.capacity());
assertEquals(38,string2.capacity());
assertEquals(53,string3.capacity());
}
@Test
public void testindexOf() throws Exception{
assertEquals(1, string1.indexOf("tud"));
assertEquals(8, string2.indexOf(" of"));
assertEquals(18, string3.indexOf("1653"));
}
@Test
public void testlength() throws Exception{
assertEquals(8, string1.length());
assertEquals(22, string2.length());
assertEquals(37, string3.length());
}
}

运行截图

提交点三:

参考(http://www.cnblogs.com/rocedu/p/4472842.html)

参考http://www.cnblogs.com/rocedu/p/6736847.html

对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式

用自己的学号%6进行取余运算,根据结果进行代码扩充:

3: 让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

代码:

abstract class Data {
abstract public void DisplayValue();
} class Integer extends Data {
int value;
Integer() {
value=100;
}
public void DisplayValue(){
System.out.println (value);
}
} class Long extends Data {
int value;
Long() {
value=20165327;
}
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 LongFactory extends Factory {
public Data CreateDataObject(){
return new Long();
}
} //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 LongFactory());
d.DisplayData();
}
}

运行截图

提交点四

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

参考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 junit.framework.TestCase;
import org.junit.Test; public class ComplexTest extends TestCase {
Complex a = new Complex(5.0, 6.0);
Complex b = new Complex(-3.0, 4.0); @Test
public void testgetRealPart() {
assertEquals(5.0,a.getRealPart());
assertEquals(-3.0,b.getRealPart());
} @Test
public void testgetImagePart() {
assertEquals(6.0,a.getImagePart());
assertEquals(4.0,b.getImagePart());
} @Test
public void testtoString() {
assertEquals("Complex{RealPart=5.0, ImagePart=6.0}",a.toString());
assertEquals("Complex{RealPart=-3.0, ImagePart=4.0}",b.toString());
} @Test
public void testequals() {
assertEquals(false,a.equals(b));
Complex c = new Complex(a.getRealPart(),a.getImagePart());
assertEquals(true,a.equals(c));
} @Test
public void testComplexAdd() {
assertEquals(2.0,a.ComplexAdd(b).getRealPart());
assertEquals(10.0,a.ComplexAdd(b).getImagePart());
} @Test
public void testComplexSub() {
assertEquals(8.0,a.ComplexSub(b).getRealPart());
assertEquals(2.0,a.ComplexSub(b).getImagePart());
} @Test
public void testComplexMulti() {
assertEquals(-39.0,a.ComplexMulti(b).getRealPart());
assertEquals(2.0,a.ComplexMulti(b).getImagePart());
} @Test
public void testComplexDiv() {
assertEquals(0.36,a.ComplexDiv(b).getRealPart());
assertEquals(-1.52,a.ComplexDiv(b).getImagePart());
}
}

运行截图



提交点五

使用WhiteStarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。

参考http://www.cnblogs.com/rocedu/p/6736847.html

提交点五

使用WhiteStarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。

参考http://www.cnblogs.com/rocedu/p/6736847.html

类图中只少两个类。

实验时间分配

步骤 耗时 百分比
需求分析 20 14.3%
设计 50 35.7%
代码实现 30 21.4%
测试 20 14.3%
分析总结 20 14.3%

2017-2018-2 20165327 实验二 《Java面向对象程序设计》实验报告的更多相关文章

  1. 实验二Java面向对象程序设计实验报告(2)

    实验二 Java面向对象程序设计 实验概述: 课程:程序设计与数据结构 班级:1623班 姓名: 邢天岳 学号:2309 指导老师:娄老师 王老师 实验日期:2017.4.16 实验名称: Java面 ...

  2. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  3. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  4. 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告

    20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...

  5. 20162311 实验二 Java面向对象程序设计 实验报告

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  6. 实验二 Java面向对象程序设计实验报告

    实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验 ...

  7. 20145326《Java程序设计》实验二Java面向对象程序设计实验报告

    20145326<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  8. 20155217 实验二 Java面向对象程序设计 实验报告

    20155217 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模 ...

  9. 20145219 《Java程序设计》实验二 Java面向对象程序设计实验报告

    20145219 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...

  10. 20162305 实验二 Java面向对象程序设计 实验报告

    20162305 实验二 Java面向对象程序设计 实验报告 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D ...

随机推荐

  1. 20145320 《网络渗透》MSF基础应用

    20145320 <网络渗透>MSF基础应用 1.实验后回答问题 exploit 攻击模块,利用发现的安全漏洞或配置弱点对远程目标系统进行攻击.主要分为主动攻击和被动攻击.像我们这次做的实 ...

  2. JavaScript中数组的排序方法:1.冒泡排序 2.选择排序

      //1.选择排序: //从小到大排序:通过比较首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,依此类推,直到所有的数成为有序序列. var arr2=[19, 8, ...

  3. QT笔记之内存管理

    转载:https://blog.csdn.net/myjqc/article/details/8569196 (链接错误解决办法) 我们都知道在C++中,new和delete是成对出现的,那么在QT中 ...

  4. topcoder srm 500 div1

    problem1 link 如果decisions的大小为0,那么每一轮都是$N$个人.答案为0. 否则,如果答案不为0,那么概率最大的一定是一开始票数最多的人.因为这个人每一轮都在可以留下来的人群中 ...

  5. ODAC(V9.5.15) 学习笔记(三)TOraSession(1)

    1. 连接相关 名称 类型 说明 ConnectDialog 执行连接对话框控件 Connected Boolean 连接状态,通过函数Connect和Disconnect连接或关闭数据库连接,并触发 ...

  6. 2-sat相关复习

    2-sat相关复习 noi曾经考过,谁能说得准呢 sat问题 通俗的sat问题表述一般是这样的:有很多个集合,每个集合里面有若干元素,现给出一些取元素的规则,要你判断是否可行,可行则给出一个可行方案. ...

  7. #2718. 「NOI2018」归程 kruskal重构树

    链接 https://loj.ac/problem/2718 思路 我们希望x所在的连通块尽量的大,而且尽量走高处 离线的话可以询问排序,kruskal过程中更新答案 在线就要用kruskal重构树 ...

  8. Redis,Memcache比较

    简单比较: Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储.memcache只支持简单的K/V类型数据, 不过memcache可以缓存其他东西如图片, ...

  9. 【译】第11节---数据注解-TimeStamp

    原文:http://www.entityframeworktutorial.net/code-first/TimeStamp-dataannotations-attribute-in-code-fir ...

  10. git界面里面复制粘贴

    git界面里常用的粘贴方法: 1.Insert键或者Fn+Insert键 2.右键或者shift+右键 Paste 粘贴 3.还有一些设置可以用,在git面板中(或者右键),点击option选项 这里 ...