20165218 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计
课程:java程序设计
姓名:赵冰雨
学号:20165218
指导教师:娄嘉鹏
实验日期:2018.4.16
实验密级:Java开发环境的熟悉
实验内容、步骤与体会:
(一)单元测试
- 实验要求
参考http://www.cnblogs.com/rocedu/p/6736847.html
提交最后三个测试用例都通过的截图
- 实验步骤
- 根据伪代码编写产品代码
MyUtil.java
- 新建一个测试代码
MyUtil.java
- 测试多种情况,包括正常情况,异常情况(负分或大于100的乘积),边界情况,并根据测试结果调整产品代码(以上是自己编写测试代码的过程)
- 新建测试文件夹test,并将其改成可作为源代码编译
- 在test文件夹下新建
MyUtilTest.jva
,输入代码:
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));
}
}
运行成功
出现语法错误时
File
->Project Structure
在IDEA安装地址下找到如下三个文件并添加即可
(二)面向对象的三要素
- 实验要求
参考 积极主动敲代码,使用JUnit学习Java
(http://www.cnblogs.com/rocedu/p/4837092.html)
参考http://www.cnblogs.com/rocedu/p/6736847.html
以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图
- 实验步骤
- 编写测试用例代码
/**
* Created by zby on 2018/4/16.
*/
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer();
buffer.append('S');
buffer.append("tringBuffer");
System.out.println(buffer.charAt(1));
System.out.println(buffer.capacity());
System.out.println(buffer.indexOf("tring"));
System.out.println("buffer = " + buffer.toString());
System.out.println(buffer.length());
}
}
- 测试代码
import junit.framework.TestCase;
import org.junit.Test;
/**
* Created by zby on 2018/4/16.
*/
import junit.framework.TestCase;
import org.junit.Test;
import static org.junit.Assert.*;
public class StringBufferTest extends TestCase {
StringBuffer string1 = new StringBuffer("hellojava");//测试9个字符
StringBuffer string2 = new StringBuffer("To be or not to be");//测试18个字符
StringBuffer string3 = new StringBuffer("Quando abbandonare ogni speranza");//测试32个字符
@Test
public void testCharAt() {
assertEquals('h', string1.charAt(0));
assertEquals('e', string2.charAt(4));
assertEquals('a', string3.charAt(7));
}
@Test
public void testCapacity() {
assertEquals(25, string1.capacity());
assertEquals(34, string2.capacity());
assertEquals(48, string3.capacity());
}
@Test
public void testindexOf() {
assertEquals(0, string1.indexOf("he"));
assertEquals(9, string2.indexOf("not"));
assertEquals(7, string3.indexOf("abbando"));
}
@Test
public void testlength() {
assertEquals(9, string1.length());
assertEquals(18, string2.length());
assertEquals(32, string3.length());
}
}
- 如果显示测试失败(如下图),根据提示修改测试代码
- 测试成功
(三)设计模式初步
- 实验内容
参考http://www.cnblogs.com/rocedu/p/6736847.html
对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
用自己的学号%6进行取余运算,根据结果进行代码扩充:
0: 让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
- 实验步骤
- 设计编写代码
Data.java
和MyDoc.java
/**
* Created by zby on 2018/4/16.
*/
abstract class Data {
abstract public void DisplayValue();
}
class Integer extends Data {
int value;
Integer() {
value = 100;
}
public void DisplayValue() {
System.out.println(value);
}
}
class Byte extends Data {
byte value;
Byte() {
value = (byte) 20165218;
}
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 ByteFactory extends Factory {
public Data CreateDataObject() {
return new Byte();
}
}
//Client classes
class Document {
Data data;
Document(Factory factory) {
data = factory.CreateDataObject();
}
public void DisplayData() {
data.DisplayValue();
}
}
public class MyDoc {
static Document d;
public static void main(String[] args) {
d = new Document(new ByteFactory());
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)
- 实验步骤
- 产品代码
/**
* Created by zby on 2018/4/16.
*/
public class Complex {
// 定义属性并生成getter,setter
private double RealPart;
private double ImagePart;
// 定义构造函数
public Complex() {
}
public Complex(double R, double I) {
this.RealPart = R;
this.ImagePart = I;
}
public double getRealPart() {
return RealPart;
}
public void setRealPart(double realPart) {
RealPart = realPart;
}
public double getImagePart() {
return ImagePart;
}
public void setImagePart(double imagePart) {
ImagePart = imagePart;
}
//Override Object
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Complex)) {
return false;
}
Complex complex = (Complex) obj;
if (complex.RealPart != ((Complex) obj).RealPart) {
return false;
}
if (complex.ImagePart != ((Complex) obj).ImagePart) {
return false;
}
return true;
}
public String toString() {
String string = "";
if (ImagePart > 0)
string = RealPart + "+" + ImagePart + "i";
if (ImagePart == 0)
string = RealPart + "";
if (ImagePart < 0)
string = RealPart + " " + ImagePart + "i";
return string;
}
// 定义公有方法:加减乘除
Complex ComplexAdd(Complex a) {
return new Complex(RealPart + a.RealPart, ImagePart + a.ImagePart);
}
Complex ComplexSub(Complex a) {
return new Complex(RealPart - a.RealPart, ImagePart - a.ImagePart);
}
Complex ComplexMulti(Complex a) {
return new Complex(RealPart * a.RealPart - ImagePart * a.ImagePart, ImagePart * a.RealPart + RealPart * a.ImagePart);
}
Complex ComplexDiv(Complex a) {
Complex d = new Complex();
d.RealPart = (this.RealPart * a.RealPart + this.ImagePart * a.ImagePart) / (a.RealPart * a.RealPart + a.ImagePart * a.ImagePart);
d.ImagePart = (this.ImagePart * a.RealPart - this.RealPart * a.ImagePart) / (a.RealPart * a.RealPart + a.ImagePart * a.ImagePart);
return d;
}
}
- 测试代码
/**
* Created by zby on 2018/4/16.
*/
import org.junit.*;
import static org.junit.Assert.*;
public class ComplexTest {
Complex a = new Complex(1, 2);
Complex b = new Complex(1, -4);
@Test
public void testAdd() {
assertEquals("2.0 -2.0i", a.ComplexAdd(b).toString());
System.out.println(a.ComplexAdd(b));
}
@Test
public void testSub() {
assertEquals("0.0+6.0i", a.ComplexSub(b).toString());
System.out.println(a.ComplexSub(b));
}
@Test
public void testMulti() {
assertEquals("9.0 -2.0i", a.ComplexMulti(b).toString());
System.out.println(a.ComplexMulti(b));
}
@Test
public void testDiv() {
assertEquals("-0.4117647058823529+0.35294117647058826i", a.ComplexDiv(b).toString());
System.out.println(a.ComplexDiv(b));
}
}
- 测试结果
(五)UML图绘制
- 实验内容
使用WhiteStarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。
参考http://www.cnblogs.com/rocedu/p/6736847.html
- 实验步骤
- 打开
StarUML
后,File
->New
新建一个文件 - 单击
Class
拖动到画布上,修改类的名称
回车确认
右键单击类,添加对象和方法(如图所示)
双击对象或方法的名字可修改,单击小加号可以添加一个新的对象或方法
点击对象或方法,
Properties
->Visibility
,修改访问权限完成
代码实现
PSP时间图
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 20min | 6% |
设计 | 30min | 9% |
代码实现 | 90min | 27.3% |
测试 | 120min | 36.4% |
分析总结 | 70min | 21% |
分析单元测试的好处
- 帮助开发人员编写代码,提升质量、减少bug。
- 提升反馈速度,减少重复工作,提高开发效率。
- 保证你最后的代码修改不会破坏之前代码的功能。
- 让代码维护更容易。
- 有助于改进代码质量和设计。
参考资料
20165218 实验二 Java面向对象程序设计的更多相关文章
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告
20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...
- 20145113 实验二 Java面向对象程序设计
20145113 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 1.初 ...
- JAVA课程实验报告 实验二 Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
- 20145225唐振远 实验二 "Java面向对象程序设计"
20145225<Java程序设计> 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...
- 20145208 实验二 Java面向对象程序设计
20145208 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...
- 20162311 实验二 Java面向对象程序设计 实验报告
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
随机推荐
- VMware安装的Windows10下Docker的安装
1.前言 开启学习Docker之旅,首先在VMware中安装了windows10,因为Docker for windows要Win10专业或者企业版,现在台式机是win7,不想动主机系统.嘻嘻 不过, ...
- redis 为什么快
redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大. 不过,因为一般的内存操作都是简单存取操作,线程占用时间相对较短,主要问题在io上,因此,redis这种模型是 ...
- PytorchZerotoAll学习笔记(二)--梯度下降之手动求导
梯度下降算法: 待优化的损失值为 loss,那么我们希望预测的值能够很接近真实的值 y_pred ≍ y_label 我们的样本有n个,那么损失值可以由一下公式计算得出: 要使得los ...
- Python3实现机器学习经典算法(一)KNN
一.KNN概述 K-(最)近邻算法KNN(k-Nearest Neighbor)是数据挖掘分类技术中最简单的方法之一.它具有精度高.对异常值不敏感的优点,适合用来处理离散的数值型数据,但是它具有 非常 ...
- pyqt5实现SMTP邮件发送
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'SMTP.ui' # # Created b ...
- AndroidStudio引入AAR依赖
title: AndroidStudio引入AAR依赖 date: 2016-08-10 00:25:57 tags: [aar] categories: [Tool,Gradle] --- 概述 本 ...
- 3.Airflow使用
1. airflow简介2. 相关概念2.1 服务进程2.1.1. web server2.1.2. scheduler2.1.3. worker2.1.4. celery flower2.2 相关概 ...
- Scrum立会报告+燃尽图(十一月二十一日总第二十九次):β阶段第二周分配任务
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- struts常量<constant>说明
1.<constant name="struts.action.extension" value="do" />这个时候访问action都必须加.d ...
- Objective-C Json转Model(利用Runtime特性)
封装initWithNSDictionary:方法 该方法接收NSDictionary对象, 返回PersonModel对象. #pragma mark - 使用runtime将JSON转成Model ...