2018-2019-20175203 实验二 《Java面向对象程序设计》实验报告

实验要求

  • 没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程
  • 完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
  • 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

实验步骤

(一)单元测试

(1)三种代码

  • 伪代码:从意图层面来解决问题
  • 产品代码:实现预期功能
  • 测试代码:测试预期功能

(2)单元测试:对类实现的测试

单击file > new > project之后一路next即可,由于本次实验需要junit,我就先在实验前对其进行安装,唯一需要注意的是要导出在下载文件的时候的那俩文件(junit开头的那俩)才能使用,那么教训就来了,千万别把它的下载文件夹放的太深!!!这样你每建一个新项目就要找十多个文件夹才能找到。。。。(当然你也可以亡羊补牢,在第一次找到之后就把那个IDEA—U文件夹导出来)

接下来就是本次实验了,这个不得不说老师给的太详细了(如果你是用蓝墨云的链接进入的而不是直接在博客里打开的话,,,(博客里直接打开好多图片都损毁了))只要顺着老师的过程往下走就顺理成章的出来了,要提的一句就是点击public类名称再点击小灯泡create test选择Junit3即可新建test类

*错误情况

*边界情况

*通过测试截图

注意测试前一定要有注解@test

(3)以 TDD的方式研究学习StringBuffer

这里需要安装·Junit,由于在前文提到就不再过多赘述了,然后说一下TDD,在我看来就是一种逆向思维,原始的是先通过作出程序产品再进行检测,其实这个往往是会出现遗漏的,但是将其逆向就变得干净有效了,这个有点像食品安全检测,现制定一个检测标准(即test类)所有的食品(产品代码)放到里边进行测试,不通过就不让生产(测试不通过,重新写),这样往往对漏洞能有较全面的筛查。

根据实验要求编写代码

import junit.framework.TestCase;
import org.junit.Test;
public class StringBufferDemoTest extends TestCase {
StringBuffer buffer = new StringBuffer("StringBuffer");
@Test
public void testcharAt(){
assertEquals('S',buffer.charAt(0));
}
@Test
public void testcapacity(){
assertEquals(28,buffer.capacity());
}
@Test
public void testindexof(){
assertEquals(1,buffer.indexOf("tring"));
}
@Test
public void testtoString(){
assertEquals("StringBuffer",buffer.toString());
}
}

测试截图

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

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

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

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

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

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

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

我的学号为5203即选则支持Short类

*实验代码

// 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);
}
}
class Short extends Data {
short value;
Short() {
value = 5203;
}
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 ShortFactory extends Factory {
public Data CreateDataObject(){
return new Short();
}
}
//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 ShortFactory());
d.DisplayData();
}
}

*运行截图如下

(4)以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)

以TDD的方式进行开发,即先进行测试代码的编写,如下:

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());
}
}

接下来是产品代码开发

public class Complex {
public double getRealPart() {
return RealPart;
} public double getImagePart() {
return ImagePart;
} double RealPart;
double ImagePart; public void setRealPart(double realPart) {
RealPart = realPart;
} public void setImagePart(double imagePart) {
ImagePart = imagePart;
} public Complex(){}
public Complex(double R,double I){
this.ImagePart = I;
this.RealPart = R;
} @Override
public String toString() {
return "Complex{" +
"RealPart=" + RealPart +
", ImagePart=" + ImagePart +
'}';
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Complex complex = (Complex) o;
return Double.compare(complex.getRealPart(), getRealPart()) == 0 &&
Double.compare(complex.getImagePart(), getImagePart()) == 0;
} Complex ComplexAdd(Complex a) {
return new Complex(this.RealPart + a.RealPart,this.ImagePart + a.ImagePart);
}
Complex ComplexSub(Complex a){
return new Complex(this.RealPart - a.RealPart,this.ImagePart - a.ImagePart);
}
Complex ComplexMulti(Complex a){
return new Complex(this.RealPart*a.RealPart-this.ImagePart*a.ImagePart,
this.ImagePart*a.RealPart+this.RealPart*a.ImagePart);
}
Complex ComplexDiv(Complex a){
double scale = a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart();
Complex b = new Complex(a.getRealPart() / scale, - a.getImagePart() / scale);
return this.ComplexMulti(b);
}
}

*测试截图

(5)使用StarUML对实验二中的代码进行建模

这里要先道个歉,,,由于之前着急提交蓝墨云而且自己的电脑还没下这个软件,就草草的用别人的电脑做了一个,,,但是后来发现线上的processon也挺好用的,截图如下

2018-2019-20175203 实验二 《Java面向对象程序设计》的更多相关文章

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

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

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

    20165336 实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:康志强 学号:20165336 指导教师:娄嘉鹏 实验日期:2018年4月16日 ...

  3. 2017-2018-2 20165215 实验二 Java面向对象程序设计

    20165215 实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:张家佳 学号:20165215 指导教师:娄嘉鹏 实验日期:2018年4月16日 ...

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

    20165308 实验二 Java面向对象程序设计 实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:张士洋 学号:20165308 指导教师:娄嘉鹏 ...

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

    实验二 Java面向对象程序设计 课程:java程序设计 姓名:赵冰雨 学号:20165218 指导教师:娄嘉鹏 实验日期:2018.4.16 实验密级:Java开发环境的熟悉 实验内容.步骤与体会: ...

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

    实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:贾海粟 学号:20165202 指导教师:娄嘉鹏 实验日期:2018年4月16日 实验时间:15:3 ...

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

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

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

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

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

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

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

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

随机推荐

  1. linux使用pigz多线程压缩

    因为tar zip是单线程的压缩,压缩起来很慢,这个使用使用pigz工具辅助就会使用多线程了. 安装 sudo apt install pigz 压缩 tar cvf - test.txt | pig ...

  2. 跨域资源共享(CORS)-漏洞整理

    绕过方法整理 绕过 - 仅对域名校验 #POC #"Access-Control-Allow-Origin: https://xx.co & Access-Control-Allow ...

  3. Mac007--Mysq服务端&客户端安装

    一.安装Mysql服务端与Navicat Premium客户端 参见博客:https://blog.csdn.net/wtdask/article/details/79025674 安装mysql服务 ...

  4. 搭建用例管理平台phpstudy+testlink代替Apache+MySQL+PHP环境,以及testlink搭建环境报错修复

    公司需要搭建一个用例管理平台,环境搭建Apache+MySQL+PHP环境 哇一看就是需要花很长时间去搭建环境,本来我也在用这样的笨方法,不小心被公司开发看到,经人家一提点,哎呀妈呀发现自己以前的方法 ...

  5. “希希敬敬对”Alpha版本发布说明

    Alpha版本的所有功能如下: 1.完成根据贴吧关键字检索的功能,通过用户输入的关键词或URL地址链接到对应的贴吧页面,并爬取到该贴吧前10页的相关数据.2.对爬取到的数据进行分析和整合,实现获取该贴 ...

  6. NGUI的button的创建的问题(Button Script)

    一,我们可以给了label,sprite等添加button事件 我们先添加一个label在UI_Root上,然后选中该label,右键-Attach-Box Collider,添加,当你添加完了Box ...

  7. BUUCTF--新年快乐

    测试文件:https://buuoj.cn/files/bbf9f68a97fd551edec384914d4f3fbe/93c43c5c-3d4d-4d17-a9a1-4ffb65ebb2fb.zi ...

  8. markdown语法规则

    标题 标题是每篇文章最常用的格式,在markdown中如果要定义标题的话,只要在这段文字之前加#号就可以了. # 一级标题 ## 二级标题 ### 三级标题 以此类推,总共六级标题,建议在#号之后加上 ...

  9. 安卓构架组件——概述 Android Architecture Components

    谷歌官文文档地址:https://developer.android.google.cn/topic/libraries/architecture 安卓构架组建是库的集合:帮助你设计健壮的.易测试的. ...

  10. vue不是内部或外部命令的解决方法

    1.在nodejs的安装目录下,找到vue.cmd,将此路径加到环境变量中,我是通过nvm管理node版本的,路径是C:\Users\hy\AppData\Roaming\nvm\v6.10.0,关闭 ...