实验题目

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 UpCode -> 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. 如何查看SharePoint Server的版本信息

    可以通过查看注册表来得你当前运行的是SharePoint 2010的哪个版本,具体步骤如下: 1. 登录到安装了SharePoint Central Administration 的服务器. 2. 点 ...

  2. echo 与 od -x 与 %!xxd 命令

    echo 与 od -x 与 %!xxd 命令 echo 命令 -n 选项  可以使其不带换行符od -x 命令可以查看文件的16进制表示%!xxd 可以在vim编辑器中dump成16进制表示

  3. [DBSDFZOJ 多校联训] 就

    就 背景描述 一排 N 个数, 第 i 个数是 Ai , 你要找出 K 个不相邻的数, 使得他们的和最大. 请求出这个最大和. 输入格式 第一行两个整数 N 和 K. 接下来一行 N 个整数, 第 i ...

  4. Python 变量和数据类型

    变量的定义与赋值 Python 是动态语言,我们不需要为变量指定数据类型,只需要输入变量名和值就行了.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 此外 Python 允许你同时为多个变 ...

  5. oracle 查看主外键约束

    select a.constraint_name, a.table_name, b.constraint_name from user_constraints a, user_constraints ...

  6. 配置Ceph集群为OpenStack后端存储

    配置Ceph存储为OpenStack的后端存储 1  前期配置 Ceph官网提供的配置Ceph块存储为OpenStack后端存储的文档说明链接地址:http://docs.ceph.com/docs/ ...

  7. Hadoop学习笔记---HDFS

    Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐 ...

  8. kendo ui - grid 数据表格系列

    kendo-ui 官网:https://www.telerik.com/documentation 初始化 grid: 引入文件: <link rel="stylesheet" ...

  9. R中的apply族函数和多线程计算

    一.apply族函数 1.apply  应用于矩阵和数组 # apply # 1代表行,2代表列 # create a matrix of 10 rows x 2 columns m <- ma ...

  10. 创建DBLink----Oracle和mysql

    Oracle: DROP PUBLIC DATABASE LINK NM_HN; CREATE PUBLIC DATABASE LINK NM_HN CONNECT TO XZXT IDENTIFIE ...