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

一、单元测试

三种代码

知道了伪代码、产品代码、测试代码的关系和用途,并根据老师的例子,按测试代码调试了产品代码。

值得注意的是,测试用例要全面选择,特别是异常用例和边界用例。

TDD(Test Driven Devlopment,测试驱动开发)

安装了Java单元测试工具JUnit进行TDD。体会了TDD编码节奏。并且最终测试结果出现了绿条。

学会了使用JUnit学习Java,并用TDD的方式研究学习了StringBuffer,测试了StringBuffer的几个常用方法(append(),charAt(),capacity())。

二、面向对象三要素

抽象

封装、继承和多态

学会了使用StarUML进行建模,针对最后练习里设计复数类进行OOD设计。老师已经给出了Complex类的整体框架。我在StarUML中画出了Complex类的模型图。

三、设计模式初步

S.O.L.I.D原则

学习理解了S.O.L.I.D原则

  • SRP(Single Responsibility Principle,单一职责原则)
  • OCP(Open-Closed Principle,开放-封闭原则)
  • LSP(Liskov Substitusion Principle,Liskov替换原则)
  • ISP(Interface Segregation Principle,接口分离原则)
  • DIP(Dependency Inversion Principle,依赖倒置原则)

模式与设计模式

知道了模式的重要作用和设计模式在Java中的重要地位。

设计模式示例

根据老师给出的例子体会了OCP原则和DIP原则,初步理解了设计模式,并实例程序扩充,使其支持了short类。

四、练习

使用TDD方式设计实现复数类Complex

对Complex这个类的设计我体会比较深,虽然是根据老师给出的模板来的,但在充实模板的过程中,我体会到一个设计一个类的基本要素和方法。

遇到的问题:在重写toString()时,为了返回一个复数字符串,我首先想到的是进行字符串拼接。于是查找API文档,找到concat()方法,但concat()方法只能拼接字符串,而对于‘+’、‘i’,还要先转为字符串,于是我又在API文档中找到了类方法valueof(),但这样根本不行。最后我突然想到+就可以直接实现字符串连接,果然成功了!toString()代码如下:

 public String toString(){
String s = new String(Double.toString(getterRealPart()));
// s.concat(Double.toString(getterRealPart()));
if(getterImagePart()>0)
s = s + '+';
s = s + Double.toString(getterImagePart());
// s.concat(Double.toString(getterImagePart()));
s = s + 'i';
return s;
}

Complex类完整代码:

public class Complex {
// 定义属性并生成getter,setter
private double RealPart;
private double ImagePart; public void setterRealPart(double realPart) {
this.RealPart = realPart;
}
public void setterImagePart(double imagePart){
this.ImagePart = imagePart;
}
public double getterRealPart(){
return RealPart;
}
public double getterImagePart(){
return ImagePart;
} // 定义构造函数
public Complex(){}
public Complex(double R,double I){
this.RealPart = R;
this.ImagePart = I;
} //Override Object
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(!(obj instanceof Complex)){
return false;
}
Complex complex = (Complex) obj;
if(getterRealPart()!=complex.getterRealPart()){
return false;
}
if(getterImagePart()!=(complex.getterImagePart())){
return false;
}
return true;
}
public String toString(){
String s = new String(Double.toString(getterRealPart()));
// s.concat(Double.toString(getterRealPart()));
if(getterImagePart()>0)
s = s + '+';
s = s + Double.toString(getterImagePart());
// s.concat(Double.toString(getterImagePart()));
s = s + 'i';
return s;
} // 定义公有方法:加减乘除
Complex ComplexAdd(Complex a){
Complex b = new Complex();
b.ImagePart = this.ImagePart + a.ImagePart;
b.RealPart = this.RealPart + a.RealPart;
return b;
}
Complex ComplexSub(Complex a){
Complex b = new Complex();
b.ImagePart = this.ImagePart - a.ImagePart;
b.RealPart = this.RealPart - a.RealPart;
return b;
}
Complex ComplexMulti(Complex a){
Complex b = new Complex();
b.RealPart = this.RealPart * a.RealPart - this.ImagePart * a.ImagePart;
b.ImagePart = this.RealPart * a.ImagePart + this.ImagePart * a.RealPart;
return b;
}
Complex ComplexDiv(Complex a) {
Complex b = new Complex();
b.RealPart = (this.RealPart * a.RealPart + this.ImagePart * a.ImagePart)/(a.RealPart*a.RealPart+a.ImagePart*a.ImagePart);
b.ImagePart = (this.ImagePart * a.RealPart - this.RealPart * a.ImagePart)/(a.RealPart*a.RealPart+a.ImagePart*a.ImagePart);
return b;
}
}

最终每个方法都测试通过了。

PSP时间

步骤 耗时 百分比
需求分析 5 10%
设计 5 10%
代码实现 30 60%
测试 5 10%
分析总结 5 10%

单元测试的好处:

单元测试将复杂的问题分解了。只要我们能保证每一块积木是正确可用的,那我们砌出来的墙,建起来的楼必然也是牢靠的。

最新文章

  1. [masmplus]初次使用报external symbol _start 是配置问题
  2. ooad单例模式-Singleton
  3. CSS计数器的趣味时光
  4. Linq之group子句
  5. 第二十五课:jQuery.event.trigger的源码解读
  6. java web名词解释
  7. linux eclipse cdt make error 127
  8. Mac Mysql5.7.11安装和卸载
  9. Android ListView动态更新数据
  10. Difference Between Primes
  11. nodejs 批处理运行 app.js
  12. linux相关小工具的使用(一)————代码相关工具
  13. hdu4553(线段树)
  14. windows下python web开发环境的搭建
  15. vue引入新版 vue-awesome-swiper填坑
  16. 在linux环境下用中文查询数据库
  17. HDOJ 2005 第几天?
  18. sublime text的扩展插件
  19. OSX系统的sublime配置php执行编译
  20. MySQL实现树状所有子节点查询的方法

热门文章

  1. mac 命令行大杂烩
  2. laravel 获取所有表名
  3. Zabbix应用一:Zabbix安装
  4. 《剑指offer》面试题28:字符串的排列(牛客网版本) java
  5. poj 2185 Milking Grid
  6. 监控Elasticsearch的插件【check_es_system】
  7. Java并发编程原理与实战十九:AQS 剖析
  8. 博主退役了qwq
  9. 【bzoj4942】[Noi2017]整数 压位+线段树
  10. (CoreText框架)NSAttributedString 2