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

实验内容

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

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

3. 初步掌握UML建模

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

5. 了解设计模式

根据实验提交的规则,把实验为五个部分

面向对象程序设计-1

实验要求:

  • 参考:> http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST
  • 参考:> http://www.cnblogs.com/rocedu/p/6736847.html
  • 提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。

实验步骤:

在IDEA中新建一个工程,然后建立MyUtil类还有检查用的类,下图是最初的类(改了名,问题不大)

然后导入最初的程序

然后看看检验程序结果

果然出错了,检查出错原因是因为不及格的成绩不对啊

修改及格成绩为60,然后继续检测,这次通过了

然后来检测边界情况

看输出是满分出了问题这里输出时faild6遮住了

修改程序然后再检测通过

最终程序:

补一个用junit的,虽然这个实验要求上没有

测试代码如下:

import org.junit.Test;
import junit.framework.TestCase;
public class MyUtilTest extends TestCase {
@Test
public void testNormal() {
assertEquals("不及格", MyUtil.percentage2fivegrade());
assertEquals("及格", MyUtil.percentage2fivegrade());
assertEquals("中等", MyUtil.percentage2fivegrade());
assertEquals("良好", MyUtil.percentage2fivegrade());
assertEquals("优秀", MyUtil.percentage2fivegrade());
}
@Test
public void testExceptions(){//测试出错情况
assertEquals("错误", MyUtil.percentage2fivegrade());
assertEquals("错误", MyUtil.percentage2fivegrade(-));
}
@Test
public void testBoundary(){//测试边界情况
assertEquals("不及格", MyUtil.percentage2fivegrade());
assertEquals("及格", MyUtil.percentage2fivegrade());
assertEquals("中等", MyUtil.percentage2fivegrade());
assertEquals("良好", MyUtil.percentage2fivegrade());
assertEquals("优秀", MyUtil.percentage2fivegrade());
assertEquals("优秀", MyUtil.percentage2fivegrade());
} }

代码全部通过!

面向对象程序设计-2

实验要求:

  • 参考积极主动敲代码,使用JUnit学习Java >http://www.cnblogs.com/rocedu/p/4837092.html
  • 参考>http://www.cnblogs.com/rocedu/p/6736847.html
  • 以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。

实验步骤:

其实我并不喜欢在idea上面编程,但是思考之后确实IDEA更便于发现错误,工具更多,比如这次的junit直接在IDEA中配置就可以了

还有TDD方法第一个例子

然后就开始用JUNIT对StringBufferDemo动手啦

1 正式代码

public class StringBufferDemo{
StringBuffer str=new StringBuffer();
StringBufferDemo(StringBuffer str){
this.str=str;
}
public char charAt(int i){
return str.charAt(i);
}
public int capacity(){
return str.capacity();
}
public int length(){
return str.length();
}
public int indexOf(String buf) {
return str.indexOf(buf);
}
}

2 测试代码

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(){
assertEquals('S',a.charAt());
assertEquals('B',a.charAt());
assertEquals('r',a.charAt());
}
@Test
public void testcapacity(){
assertEquals(,a.capacity());
assertEquals(,b.capacity());
assertEquals(,c.capacity());
}
@Test
public void testlength(){
assertEquals(,a.length());
assertEquals(,b.length());
assertEquals(,c.length());
}
@Test
public void testindexOf(){
assertEquals(,a.indexOf("Str"));
assertEquals(,a.indexOf("Buff"));
assertEquals(,a.indexOf("er"));
}
}

3 测试结果

ALLPASS

实验二 Java面向对象程序设计-3

实验要求:
参考http://www.cnblogs.com/rocedu/p/6736847.html
对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

实验步骤:

代码:

abstract class Data {
abstract public void DisplayValue();
}
class Integer extends Data {
int value;
Integer() {
value=;
}
public void DisplayValue(){
System.out.println (value);
}
}
class Float extends Data {
float value;
Float() {
value=2.017531F;
}
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 FloatFactory extends Factory {
public Data CreateDataObject(){
return new Float();
}
}
class Document { //Client classes
Data pd;
Document(Factory pf){
pd = pf.CreateDataObject();
}
public void DisplayData(){
pd.DisplayValue();
}
}
//Test class
public class MyDoc {
static Document d,f;
public static void main(String[] args) {
d = new Document(new IntFactory());
d.DisplayData();
f = new Document(new FloatFactory());
f.DisplayData();
}
}

correct

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

实验要求:

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

参考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 java.util.Objects;
import java.lang.Integer; public class Complex {
double RealPart;
double ImagePart;
public Complex() {
} public Complex(double R,double I)
{
RealPart = R;
ImagePart = I; }
public double getterRealPart(){
return RealPart;
}
public double getterImagePart(){
return ImagePart;
} 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 s = "";
if(getterRealPart()==&&getterImagePart()==){
s="";
}
else if(getterRealPart()!=&&getterImagePart()==){
s=s+getterRealPart();
}
else if (getterRealPart()==&&getterImagePart()!=){
s=s+getterImagePart()+"i";
}
else
{
if(getterImagePart()<){
s = s+getterRealPart()+getterImagePart()+"i";
}
else {
s = s+getterRealPart()+"+"+getterImagePart()+"i";
} }
return s;
} 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,RealPart*a.ImagePart + ImagePart*a.RealPart);
}
Complex ComplexDiv(Complex a) {
return new Complex((RealPart * a.ImagePart + ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart), (ImagePart * a.ImagePart + RealPart * a.RealPart) / (a.RealPart * a.RealPart + a.RealPart * a.RealPart));
}
}

测试代码

import junit.framework.TestCase;
import org.junit.Test; public class ComplexTest extends TestCase {
Complex b = new Complex(,);
Complex c = new Complex(,-);
@Test
public void testComplexAdd(){
assertEquals("5.0+2.0i",b.ComplexAdd(c)+"");
}
@Test
public void testComplexMulti(){
assertEquals("41.0-1.0i",b.ComplexMulti(c)+"");
}
@Test
public void testComplexDiv(){
assertEquals("-0.034482758620689655-3.625i",b.ComplexDiv(c)+"");
}
@Test
public void testComplexSub(){
assertEquals("1.0+12.0i",b.ComplexSub(c)+"");
} }

这个Div是因为选数不慎,但是已经修改了

全部过关

五:

实验要求:

使用[WhiteStarUML](http://whitestaruml.sourceforge.net/)对实验二中的代码进行建模,发类图的截图,加上学号水印。
参考http://www.cnblogs.com/rocedu/p/6736847.html

类图中只少两个类。

实验步骤:

实验过程中遇到的问题及其解决

1:无论如何junit没有效果总是红字显示我没有junit

后来发现是因为我在一个文件夹里面总是考了两个相同的类(一个用来@TEST)

解决方法:删除一个

2:做TDD例子的时候总是会便用找不到类??

后来发现是类名写错了,,卡了我好久想想觉得好笑

最新文章

  1. ERROR 1045 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: NO)
  2. python 脚本中使用了第三方openpyxl 打包程序运行提示ImportError:cannot import name __version__
  3. angular源码分析:angular中各种常用函数,比较省代码的各种小技巧
  4. Git中文版教程
  5. 《zw版&#183;Halcon-delphi系列原创教程》 只有2行代码的超市收款单ocr脚本
  6. linux设备驱动归纳总结(五):4.写个简单的LED驱动【转】
  7. 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序的处理方式
  8. XposedNoRebootModuleSample 不需要频繁重启调试的Xposed 模块源码例子
  9. Python开发—Ajax系列
  10. UCOS 内存管理理解 创建任务
  11. 谷歌chrome 插件(扩展)开发——进阶篇(c#本地程序和插件交互)下
  12. pip install PIL The _imagingft C module is not installed
  13. flask(二)之Jinja2模板与Flask-WTF
  14. java之map的基本介绍
  15. hibernate创建构架
  16. Centos7 LVM扩充存储空间
  17. 子序列匹配(search,find_end,search_n)
  18. 如何解决markdown中图片上传的问题
  19. IO多路复用的机制:select、poll、epoll
  20. 数据库SQL优化(百万级数据库优化方案)

热门文章

  1. The xp_cmdshell proxy account information cannot be retrieved or is invalid. Verify that the &#39;##xp_cmdshell_proxy_account##&#39; credential exists and contains valid information.
  2. Bootstrap table 行编辑导航
  3. C# -- 使用 Task 执行多线程任务
  4. 我的第一个python web开发框架(39)——后台接口权限访问控制处理
  5. 我的第一个python web开发框架(36)——后台菜单管理功能
  6. 前端之BOM
  7. 移动端和PC端弹出遮罩层后,页面禁止滚动的解决方法及探究
  8. redis5.0.4多实例安装
  9. 闲谈2-sat问题
  10. python_while