20155323刘威良第二次实验 Java面向对象程序设计

实验内容

  1. 初步掌握单元测试和TDD

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

  3. 初步掌握UML建模

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

  5. 了解设计模式

实验要求

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

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

  1. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

  2. 请大家先在实验楼中的~/Code目录中用自己的学号建立一个目录,代码和UML图要放到这个目录中,截图中没有学号的会要求重做,然后跟着下面的步骤练习。

实验步骤

(一) 三种代码

伪代码:

百分制转五分制:

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

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

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

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

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

其他,转成“错误”

产品代码:

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 "错误";

}

}

测试代码:

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!");

}

}

运行截图:

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

TDD的一般步骤如下:

  • 明确当前要完成的功能,记录成一个测试列表
  • 快速完成编写针对此功能的测试用例
  • 测试代码编译不通过(没产品代码呢)
  • 编写产品代码
  • 测试通过
  • 对代码进行重构,并保证测试通过(重构下次实验练习)
  • 循环完成所有功能的开发

实验代码:

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

}

}

测试类代码:

import junit.framework.TestCase;

import org.junit.Test;

public class StringBufferDemoTest extends TestCase {

StringBuffer a = new StringBuffer("StringBuffer");//测试12个字符(<=16)

StringBuffer b = new StringBuffer("StringBufferStringBuffer");//测试24个字符(>16&&<=34)

StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");//测试36个字符(>=34)

@Test

public void testcharAt() throws Exception{

assertEquals('S',a.charAt(0));

assertEquals('g',a.charAt(5));

assertEquals('r',a.charAt(11));

}

@Test

public void testcapacity() throws Exception{

assertEquals(28,a.capacity());

assertEquals(40,b.capacity());

assertEquals(52,c.capacity());

}

@Test

public void testlength() throws Exception{

assertEquals(12,a.length());

assertEquals(24,b.length());

assertEquals(36,c.length());

}

@Test

public void testindexOf() throws Exception{

assertEquals(0,a.indexOf("Str"));

assertEquals(5,a.indexOf("gBu"));

assertEquals(10,a.indexOf("er"));

}

}

运行截图:

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

题目: 让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,

实验代码:

import java.lang.*;

abstract class Data {

abstract public void DisplayValue();

}

class Integer extends Data {

int value;

Integer() {

value=100;

}

public void DisplayValue(){

System.out.println (value);

}

}

class Double extends Data{

double value;

Double()

{

value=100.0;

}

public void DisplayValue(){

System.out.println(value);

}

}

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 Double();
}
} class Document {
Data pd;
Document(Factory pf){
pd = pf.CreateDataObject();
}
public void DisplayData(){
pd.DisplayValue();
}
} public class MyDoc {
static Document d;
public static void main(String[] args) {
d = new Document(new ShortFactory());
d.DisplayData();
}
}

运行截图:

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

实验代码:

public class MyComplex {

private double m;

private double n;

public double getm(double m)

{

return m;

}

public double getn(double n)

{

return n;

}

public void setm(double m)

{

this.m=m;

}

public void setn(double n)

{

this.n=n;

}

public MyComplex(double m, double n) {

this.m = m;

this.n = n;

}

public MyComplex add(MyComplex c) {

return new MyComplex(m + c.m, n + c.n);

}

public MyComplex minus(MyComplex c) {

return new MyComplex(m - c.m, n - c.n);

}

public MyComplex multiply(MyComplex c) {

return new MyComplex(m * c.m - n * c.n, m * c.n + n * c.m);

}

public MyComplex ComplexDiv(MyComplex c)

{

return new MyComplex((mc.m+nc.n)/((c.mc.m)(c.nc.n)),(nc.m-mc.n)/((c.mc.m)(c.nc.n)));

}

public String toString() {

String str = new String();

if (this.n>=0)

{

str=m+"+"+n+"i";

}

else str=m+"-"+(-n)+"i";

return str;

}

public boolean equals(MyComplex c)

{

if(this.mc.m&&this.nc.n)

return true;

else

return false;

}

}

测试类代码:

import junit.framework.TestCase;

import org.junit.Test;

public class MyComplexTest extends TestCase {
MyComplex a = new MyComplex(1, 2);
MyComplex b = new MyComplex(1, -4);
MyComplex c = new MyComplex(19, 0);
MyComplex d = new MyComplex(0, -3);
MyComplex e = new MyComplex(1, 0);
MyComplex f = new MyComplex(1, 0);
@Test
public void testadd()
{
assertEquals("2.0-2.0i",a.add(b).toString());
assertEquals("1.0-1.0i",a.add(d).toString());
}
@Test
public void testminus()
{
assertEquals("0.0+6.0i", a.minus(b).toString());
assertEquals("-18.0+2.0i", a.minus(c).toString());
}
@Test
public void testmultiply()
{
assertEquals("9.0-2.0i", a.multiply(b).toString());
assertEquals("19.0+38.0i", a.multiply(c).toString());
}
@Test
public void testComplexDiv()
{
assertEquals("-0.4375+0.375i",a.ComplexDiv(b).toString());
assertEquals("1.1875+4.75i",c.ComplexDiv(b).toString());
}
@Test
public void testequals()
{
assertEquals(false,a.equals(b));
assertEquals(true,e.equals(f));
}
}

运行截图:

(五)使用StarUML对实验二中的代码进行建模,发类图的截图

截图:

20155323刘威良第二次实验 Java面向对象程序设计的更多相关文章

  1. java的第二个实验——JAVA面向对象程序设计

    java的第二个实验——JAVA面向对象程序设计 北京电子科技学院 实     验    报     告 课程:Java程序设计 班级:1352 姓名:林涵锦 学号:20135213 成绩:      ...

  2. 20155323刘威良第一次实验 Java开发环境的熟悉(Linux + IDEA)

    20155323刘威良第一次实验 Java开发环境的熟悉(Linux + IDEA) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序 ...

  3. Java第二次实验报告——Java面向对象程序设计

    北京电子科技学院(BESTI) 实    验    报    告 课程名称:java程序设计实验      班级:1352         姓名:洪韶武      学号:20135219 成绩:   ...

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

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

  5. 2018-2019-2 实验二 Java面向对象程序设计

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

  6. 2017-2018-2 20165327 实验二 《Java面向对象程序设计》实验报告

    20165327<Java程序设计>实验二 <Java面向对象程序设计>实验报告 实验二 <Java面向对象程序设计> 一.实验报告封面 课程:Java程序设计 班 ...

  7. 2017-2018-2 20165228 实验二《Java面向对象程序设计》实验报告

    2017-2018-2 20165228 实验二<Java面向对象程序设计>实验报告 相关知识点 三种代码 伪代码:注释,与具体编程语言无关 产品代码:由伪代码翻译而来的具体编程语言语法相 ...

  8. 2017-2018-2 20165315 实验二《Java面向对象程序设计》实验报告

    2017-2018-2 20165315 实验二<Java面向对象程序设计>实验报告 一.实验内容及步骤 1.初步掌握单元测试和TDD 单元测试 任务一:三种代码 用程序解决问题时,要学会 ...

  9. 20155323刘威良《网络对抗》Exp9 Web安全基础

    20155323刘威良<网络对抗>Exp9 Web安全基础 实践目的 理解常用网络攻击技术的基本原理. 实践内容 Webgoat实践下相关实验. 实践过程 开启WebGoat WebGoa ...

随机推荐

  1. 布隆过滤器(Bloom Filter)简要介绍

    一种节省空间的概率数据结构 布隆过滤器可以理解为一个不怎么精确的 set 结构,当你使用它的 contains 方法判断某个对象是否存在时,它可能会误判.但是布隆过滤器也不是特别不精确,只要参数设置的 ...

  2. codeforces 963A Alternating Sum

    codeforces 963A Alternating Sum 题解 计算前 \(k\) 项的和,每 \(k\) 项的和是一个长度为 \((n+1)/k\) ,公比为 \((a^{-1}b)^k\) ...

  3. olivehc--百度开源的cdn cache

    github 地址:http://git.baidu.com/olivehc/olivehc 主要是为了方便管理,百度cdn承载了全百度40%的流量,但是cdn团队只有几个人(一次培训中提到只有4个) ...

  4. 理解活在Iphone中的那些App (一)

    关于一个app的生命 干IOS开发两年多了,如果把大学中的时间也算上,编程也有六年了.这些时间中,从一个懵懵懂懂的学徒,变成一个还算熟练的码农,也多多少少有一点反思.于是,边促成了理解活在Iphone ...

  5. 记录智能指针使用shared_ptr使用错误

    shared_ptr为智能指针,今天一次在使用shared_ptr时,错误的将其初始化方式写为shared_ptr<T> test = shared_ptr<T>(),随后导致 ...

  6. mac使用指南--软件安装部分

    最近因为开发需要,换了个mac,发现和Windows下面的操作和习惯真是千差万别啊,在这里记录一下,有需要的也可以参考一下. 安装前强烈建议根据个人习惯设置好触控板!!!什么单击双击选中拖拽的统统设好 ...

  7. Redis.md

    rpm 包安装 CentOS 系列系统安装redis可以通过第三方提供的rpm包进行安装: # yum install -y epel-release # yum install -y redis 源 ...

  8. Python version 3.6 required, which was not found in the registry错误解决

    问题: 安装pywin32出现Python version 3.6 required, which was not found in the registry错误解决 解决: 建立一个文件 regis ...

  9. [19/04/18-星期四] Java的动态性_动态编译(DynamicCompiler,Dynamic:动态的,Compiler:编译程序)

    一.概念 应用场景:如在线评测系统,客户端编写代码,上传到服务器端编译运行:服务器动态加载某些类文件进行编译 /*** * */ package cn.sxt.jvm; import java.io. ...

  10. 【金融123】ISDA协议

    http://blog.sina.com.cn/s/blog_799af92f0100ur03.html http://www.nafmii.org.cn/ NAFMII 官方文档 NAFMII_Ma ...