20155229实验三 《Java面向对象程序设计实验三 敏捷开发与XP实践 》实验报告
实验题目
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实践 》实验报告的更多相关文章
- 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告
		
2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...
 - 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
		
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
 - 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
		
20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...
 - 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
		
20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
 - 20162311 实验三 敏捷开发与XP实践 实验报告
		
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...
 - 20165308实验三 敏捷开发与XP实践实验报告
		
实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...
 - 20155220  实验三 敏捷开发与XP实践 实验报告
		
20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
 - # 20155224 实验三 敏捷开发与XP实践 实验报告
		
20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
 - 20155226 实验三 敏捷开发与XP实践 实验报告
		
20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
 - 20155311 实验三 敏捷开发与XP实践 实验报告
		
20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
 
随机推荐
- codeforces 803G Periodic RMQ Problem
			
codeforces 803G Periodic RMQ Problem 题意 长度为\(1e5\)的数组复制\(1e4\)次,对新的数组进行区间覆盖和区间最小值查询两种操作,操作次数\(1e5\). ...
 - linux性能系列--内存
			
一.啥是内存呢? 回答:内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁.计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大. 内存(Memory)也被称为内存储器, ...
 - ZooKeeper教程(一)----Centos7下安装ZooKeeper(单机版)
			
1.下载源码 官网下载地址: http://mirrors.hust.edu.cn/apache/zookeeper/ 选择最新的版本进行下载 这里选择3.4.10进行下载: wget http:// ...
 - 【Java虚拟机结构(第1部分)数据类型】摘要
			
<Java虚拟机规范(Java SE 7版)>作者:Tim Lindholm.Frank Yellin.Gilad Bracha.Alex Buckley 摘要:第二章 Java虚拟机结构 ...
 - Spring(十)之自定义事件
			
编写自定义事件的简单流程如下: (1)编写CustomEvent.java package com.tutorialspoint; import org.springframework.context ...
 - 利用JDK自带工具keyTool生成安全证书
			
前言:说一下最近做的工作,主要利用iText给网页中生成好的html报表转化为pdf格式的文件,并且在其中加入水印,数字签名等等,这部分主要介绍安全证书的目的就是为了做数字签名部分用的. 下面利用jd ...
 - 奇妙的CSS3—导航栏下划线跟随效果
			
先来看一下效果: 1.基本效果就是这样的 ,鼠标悬停,下划线划入.鼠标离开,下划线划出 2.下划线的划入是有方向的,从左侧划入悬停,下划线由左向右伸长.从右侧划入,下划线由又往左伸长 实现思路 1.导 ...
 - version 1.5.2-04 of the jvm is not suitable for this product. version:1.6 or greater is required
			
这里仅仅说明一个可能造成该问题的解决办法,也是我遇到的原因. 这句话的意思是说,eclipse须要至少1.6版本号或以上的JVM ,而你仅仅有1.5.2版本号的JVM.想想就认为非常奇怪,我装的但是J ...
 - MySQL Workbench 6.3CE 菜单汉化 xml
			
找了很多 CSDN都要积分 直接自己搞了个 MySQL8.0亲测可以 https://pan.baidu.com/s/1Mwbye2tUj2u3RMdR_oW7rQ
 - 查询优化百万条数据量的MySQL表
			
转自https://www.cnblogs.com/llzhang123/p/9239682.html 1.两种查询引擎查询速度(myIsam 引擎 ) InnoDB 中不保存表的具体行数,也就是说, ...