实验题目

1.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。

2.下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例

3.完成重构内容的练习,下载搭档的代码,至少进行三项重构

4.以结对的方式完成Java密码学相关内容的学习

实验步骤

(1)编码标准

  • 编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。

本次实验题目如下:

public class CodeStandard {
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());
if(buffer.capacity()<20)
buffer.append("1234567");
for(int i=0; i<buffer.length();i++)
System.out.println(buffer.charAt(i));
}
}

在IDEA中使用工具Code->Reformate Code将上面的代码格式化后,得到的结果为:

然后再IDEA中,我还学到Code->Move Line Up和Code -> Move Line Down能够将代码往上/下移动。

(2)添加单元测试用例

  • 搭档的Complex代码为:
/**

 * Created by Administrator on 2017/4/21.

 */
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;
}
}
  • ComplexTest代码为:

  • 添加单元测试用例后为:

  • git log的截图:

(3)重构

重构就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。

重构目标

  • 改进软件设计使软件更容易被理解
  • 帮你找到bug
  • 提高软件的开发速度

重构时机

  • 在添加新功能时进行重构。
  • 在修改bug时进行重构。
  • 在代码复审时进行重构。
  • 到了最后的交付期限,不进行重构

下载的搭档的代码为:

重构后的代码为:

(4)结对学习java密码学内容

上周学习了java关于密码学的内容,在此基础上本周和搭档结对继续学习

首先我们学习了娄老师给的凯撒密码的代码:

public static void main(String args[]) throws Exception{
String s=args[0];
int key=Integer.parseInt(args[1]);
String es="";
for(int i=0;i<s.length( );i++)
{ char c=s.charAt(i);
if(c>='a' && c<='z') // 是小写字母
{ c+=key%26; //移动key%26位
if(c<'a') c+=26; //向左超界
if(c>'z') c-=26; //向右超界
}
else if(c>='A' && c<='Z') // 是大写字母
{ c+=key%26;
if(c<'A') c+=26;
if(c>'Z') c-=26;
}
es+=c;
}
System.out.println(es);
}

在此基础上,我们对该代码进行了改编,最后得到的代码为:

实验心得与体会

在本次实验中,首先了解了IDEA对代码特别方便的运用,这与虚拟机中的vim的命令是相似的;其次git colne了搭档的代码,在这过程中,最难完成的是,git后IDEA会出现各种错,且不太好解决,但实验二添加单元测试用例这是对上周学习的内容的复习。实验三让我了解了重构,重构在编写代码时能够使我们的代码更清晰,更简便。最后结对学习java密码学,这让我学到了结对学习的重要性,因为两个人会有不同的思路,这样能够筛选出好的思路进行编写代码。

我的PSP时间

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

参考资料

20155229实验三 《Java面向对象程序设计实验三 敏捷开发与XP实践 》实验报告的更多相关文章

  1. 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告

    2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...

  2. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  3. 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...

  4. 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  5. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  6. 20165308实验三 敏捷开发与XP实践实验报告

    实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...

  7. 20155220 实验三 敏捷开发与XP实践 实验报告

    20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  8. # 20155224 实验三 敏捷开发与XP实践 实验报告

    20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  9. 20155226 实验三 敏捷开发与XP实践 实验报告

    20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  10. 20155311 实验三 敏捷开发与XP实践 实验报告

    20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

随机推荐

  1. 栋哥你好,让我们回顾最初认识C++的时候(课堂作业)

    计算器的第一步,至今还记记忆犹新,本次的课堂作业,便是那个框架.闲话少叙,代码如下传送门: Main.cpp #include "stdafx.h" #include<ios ...

  2. Vmstat主要关注哪些数据?

    除特殊情况外,一般关注飘红部分 任务的信息(procs) r(running) 在internal时间段里,运行队列中的进程数,即表示正在运行或者正在等待CPU时间的进程数,如果这个参数值超过服务器上 ...

  3. Linux 系统性能监控命令详解

    Linux 系统性能监控命令详解 CPU MEMORY IO NETWORK LINUX进程内存占用查看方法 系统负载过重时往往会引起其它子系统的问题,比如:->大量的读入内存的IO请求(pag ...

  4. [零基础学JAVA]Java SE面向对象部分.面向对象基础(05)

    1.继承 2.多态 3.final 4.重载与覆写 5. this/super 6.抽象类 7.接口 java: class Person{ private String name;    priva ...

  5. 前端构建之--gulp

    gulp相关插件: 1.del / gulp-clean 删除文件,用于清空文件 2.browser-sync 用于自动刷新浏览器 3.gulp-htmlmin 用于压缩html 4.gulp-cle ...

  6. vue2.* 目录结构分析 数据绑定 循环渲染数据 数据渲染02

    一.目录 结构分析 node_modules:项目依赖文件(也可以说是模块) src:开发时所用的资源 assets:静态资源文件 App.vue:根组件(最基础的公共页面) main.js:实例化v ...

  7. maven加速镜像

    <mirror> <id>repo3</id> <mirrorOf>central</mirrorOf> <name>Human ...

  8. JQ中$(window).load和$(document).ready区别与执行顺序

    JQ中的$(document).ready()大家应该用的非常多,等同于$(function(){}),基本每个JS脚本中都有这个函数的出现有时甚至会出现多个,那么另一个加载函数$(window).l ...

  9. ASP.Net GridView 基础 属性和事件

    GridView 控件激发的事件: 我们后期重点看的是RowCommand.RowCreated.RowDataBound这三个事件.

  10. Http_load的安装和使用

    Http_load的安装和使用 http_load基于linux平台的一种性能测工具.以并行复用的方式运行,用以测试web服务器的吞吐量与负载,测试web页面的性能. 安装: 进入工作目录:#cd / ...