zoukankan      html  css  js  c++  java
  • 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 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%

    参考资料

  • 相关阅读:
    Spring_HelloWorld
    【日记想法】2017年终总结
    【运维技术】从零开始搭建开发使用的Kafka环境
    【运维技术】windows安装apache服务器,实现域名对应端口的解析跳转
    【软件安装】Xshell + XFtp
    【运维技术】node项目使用strongloop进行部署相关教程
    【运维技术】CentOS7上从零开始安装LAMP安装织梦DedeCMS教程
    【运维技术】CentOS7上从零开始安装阿里RocketMQ版本:release-4.0.1【亲测哈哈】
    【运维技术】VM虚拟机上使用centos7安装docker启动gogs服务教程【含B站视频教程】
    【读书笔记】Junit实战
  • 原文地址:https://www.cnblogs.com/fyhtvxq/p/6822219.html
Copyright © 2011-2022 走看看