zoukankan      html  css  js  c++  java
  • 20172303 2017-2018-2 《程序设计与数据结构》实验三报告

    20172303 2017-2018-2 《程序设计与数据结构》实验三报告

    • 课程:《程序设计与数据结构》
    • 班级: 1723
    • 姓名: 范雯琪
    • 学号:20172303
    • 实验教师:王志强
    • 助教:张旭升/刘伟康
    • 实验日期:2018年5月10日
    • 必修/选修: 必修

    实验内容

    敏捷开发与XP实践

    • 1.安装alibaba程序并运行,解决代码规范
    • 2.复习JUnit单元测试
    • 3.使用编码规范扫描规范结对伙伴的代码
    • 4.结合重构与结对伙伴共同学习密码学相关内容

    实验过程及结果

    (一)代码规范

    要求:参考IDEA 简易教程安装alibaba 插件,解决代码中的规范问题。

    1.安装alibaba插件

    打开IDEA,在任务栏中打开Settings → Plugins → Browse repositories。在界面的搜素栏中alibaba,找到Alibaba Java Code Guidelines插件,点击Install进行安装。

    2.代码规范:使用编码规范扫描对老师所给代码进行规范。

    原代码:

    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));
    }
    }
    

    修改后代码:

    public class CodeStandard {
        public static void main(String[] args) {
            final int maxcapacity = 20;
            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() < maxcapacity) {
                buffer.append("1234567");
            }
            for (int i = 0; i < buffer.length(); i++) {
                System.out.println(buffer.charAt(i));
            }
        }
    }
    

    3.在IDEA中使用工具(Code->Reformate Code)把代码重新格式化,并研究一下Code菜单。

    IDEA的Code菜单如下:

    常用功能总结:

    • Override Methods:重载基本类的方法。
    • Implement Methods:完成当前类中接口的方法。
    • Surround With:使用if-else、try-catch、do-while等包装代码段。
    • Comment with Line Comment/Comment with Block Comment:将选定代码变为注释或将选定注释重新变为代码。
    • Reformat Code:使代码按标准格式缩进。

    (二)JUnit测试

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

    • 搭档的Complex代码:
    • 进行JUnit单元测试,共测试了四个方法:ComplexAdd(),ComplexSub(),ComplexMulti(),ComplexDiv().
    • 测试代码:

    (三)重构练习

    要求:完成重构内容的练习,下载搭档的代码,至少进行三项重构。

    • 重构(Refactor):指程序员对已有程序在尽量不改变接口的前提下,进行重新编写代码的工作。
    • Java代码的重构模式主要有三种:重命名方法重构模式、引入解释性变量重构模式、以查询取代临时变量重构模式
      • 重命名方法重构模式建议执行如下的步骤来完成:
        1.建立一个具有新名称的方法
        2.将旧方法的方法体复制进新方法
        3.讲旧方法的方法体修改为调用新方法
        4.将所有引用旧方法的地方修改为引用新方法
        5.删除旧方法
      • 引入解释性变量重构模式步骤相对简单,如下:
        1.声明一个局部变量,并将其初始化为需要替换的表达式部分
        2.对于复杂的表达式,用新的局部变量代替其中需要替换的部分
        3.对于该表达式的其他部分,重复这个过程
      • 以查询取代临时变量重构模式的步骤如下:
        1.找出只赋值了一次的局部变量
        2.将该局部变量声明为final并重新编译(以确保该变量的确只赋值了一次)
        3.复制赋值语句的等号右侧的表达式,并将其修改为一个新方法的方法体
        4.将赋值语句的等号右侧更改为对新方法的调用
        5.将所有对该局部变量的使用替换为对新方法的调用
        6.删除赋值语句以及局部变量的声明
    • 搭档原代码:
    import java.util.Scanner;
    public class Pig { public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            int a = 1;
            int MaxPig = 10;
            int Pig;
            System.out.println("prprpr!");
            System.out.println("噗噗噗噗!!!!");
            System.out.println("bulabula");
            if (a>1) a--;
            System.out.println("请你输入一只Pig的大小:");
            Pig = scan.nextInt();
            if(Pig>MaxPig) System.out.println("你这只猪太大啦!!!!!");
            else System.out.println("你这只猪刚刚好!!!!!"); }
    }
    
    • 修改后:

    (四)密码学相关

    要求:参考Java 密码学算法,结合重构,以结对的方式完成Java密码学相关内容的学习。

    实验过程中遇到的问题和解决过程

    • 问题1:如何在IDEA里看git的commit信息?
    • 问题1解决方法:在IDEA的下标栏中选择Verison Control,之后点击log即可。

    其他(感悟、思考等)

    本周学习了很多很重要的新内容——重构、代码规范和密码学相关内容的代码实现,因为本学期选修了密码科技史这门选修,所以密码学里的很多内容都是了解的,看起来做起来就相对没那么难。而代码规范是我觉得本次实验学的最有意义的事情,对于一个强迫症来说,有一个东西能帮我把代码的编写规范好真是太太太太太太太太棒了!!!!!!!!!

    参考资料

  • 相关阅读:
    [转载]DFT与IDFT
    OFDM符号速率与子载波间隔的关系
    OFDM时域削峰法降峰均比的原理及影响
    OFDM发端硬件实现原理图
    Flask-Script模块
    shutil 模块
    werzeug之LocalProxy源码
    flask启动流程02
    Werkzeug库的routing模块(Rule, Map)
    flask启动流程01
  • 原文地址:https://www.cnblogs.com/PFrame/p/9105587.html
Copyright © 2011-2022 走看看