zoukankan      html  css  js  c++  java
  • 20145207 《Java 程序设计》实验三 (敏捷开发与XP实践)实验报告

     《Java 程序设计》实验三 (敏捷开发与XP实践)实验报告

    目录

    • 改变
    • 敏捷开发与XP实践实验要求
    • 实验成果
    • 课后思考

    改变

        修改了之前仅仅是贴了图片,连代码都没粘的状态。增加了自己的思考以及做实验的过程以及代码的详细内容。最后:这些都是我重新做了一遍的结果。

    敏捷开发与XP实践实验要求

    • 一、编码标准

      任务一:在IDEA中使用工具(Code->Reformate Code)格式化代码,并学习Code菜单的功能

    • 二、敏捷开发与XP

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

    • 三、重构

      任务三:下载搭档的代码,至少进行三项重构

    • 附:练习

      任务四:以结对的方式完成Java密码学相关内容的学习,结合重构、git、代码标准等

    实验成果

    一、编码标准

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

    • 规定的规范缩进:
    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));
    }
    }

    代码没有层次感,快捷键Reformate Code改成下面这种格式就好多了:

    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));
        }
    }
    • Java中的一般的命名规则:

      • 要体现各自的含义
      • 包、类、变量用名词
      • 方法名用动宾
      • 包名全部小写,如:io,awt
      • 类名第一个字母要大写,如:HelloWorldApp
      • 变量名第一个字母要小写,如:userName
      • 方法名第一个字母要小写:setName

    任务一:在IDEA中使用工具(Code->Reformate Code)格式化代码,并学习Code菜单的功能

    IDEA中的Code菜单如下:

    例子上文有

    可以发现其中的功能十分丰富,同时很多功能都可以通过快捷键实现。现将几个比较常用的功能总结如下:

    • Override Methods(Ctrl+O):重载基本类的方法;
    • Implement Methods(Ctrl+I):完成当前类 implements 的(或者抽象基本类的)接口的方法;
    • Generate(Alt+Insert):创建类里面任何字段的 getter 与 setter 方法;
    • Surround With(Ctrl+Alt+T):使用if-elsetry-catchdo-while等包装代码段;

    二、敏捷开发与XP

    结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做单元测试,一起做集成测试,一起写文档等。

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

    直接下的其他人的代码进行测试

    三、重构

    重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。

    我们要修改软件,万变不离其宗,无非就是四种动机:

    • 增加新功能;
    • 原有功能有BUG;
    • 改善原有程序的结构;
    • 优化原有系统的性能 。

    IDEA主要提供了以下重构功能:(附加:我重构用的最好,改别人代码在自己上面的名字用重构不要太方便)

    那么,哪些地方需要重构呢?有臭味道(Bad Smell)的代码。这个概念非常宽泛,不仅包括代码重复,还有方法过长参数列过长条件逻辑过度复杂分支语句等等方面。通过重构,我们可以实现代码的优化。

    任务三:下载搭档的代码,至少进行三项重构

    进行如下修改重构代码如下:

    课后思考

    自己增加的练习部分:

    Java安全体系结构总共分为4个部分:

    • JCA( Java Cryptography Architecture, Java加密体系结构):JCA提供基本的加密框架, 如证书、 数字签名、消息摘要和密钥对产生器。
    • JCE( Java Cryptography Extension, Java加密扩展包):JCE在JCA的基础上作了扩展, 提供了各种加密算法、 消息摘要算法和密钥管理等功能。JCE的实现主要在javax.crypto包( 及其子包) 中
    • JSSE( Java Secure Sockets Extension, Java安全套接字扩展包):JSSE提供了基于SSL( Secure Sockets Layer,安全套接字层) 的加密功能。 在网络的传输过程中, 信息会经过多个主机(很有可能其中一台就被窃听) , 最终传送给接收者, 这是不安全的。这种确保网络通信安全的服务就是由JSSE来提供的。
    • JAAS( Java Authentication and Authentication Service, Java鉴别与安全服务):JAAS提供了在Java平台上进行用户身份鉴别的功能。

    进行了学习之后,我与搭档选择了实现MD5算法,以结对的方式完成了代码编写的工作。

    首先,我们一起学习了java.security包中的MessageDigest类,以及类中的方法,包括update()digest()等。

    大致了解了MD5算法需要用到的方法框架后,我编写了伪代码:

    /**
    * 伪代码:
    * 
    * MD5算法:把一个任意长度的字节串变换成一定长的十六进制数字串
    * 具体步骤:(1)生成MessageDigest对象
    *(2)传入需要计算的字符串
    *(3)计算消息摘要
    *(4)处理计算结果
    */

    编写了产品代码:

    import java.security.MessageDigest;
    
    public class DigestPass{
        public static String md5Encode(String inStr) throws Exception {
            MessageDigest md5 = null;
            try {
                md5 = MessageDigest.getInstance("MD5");
            } catch (Exception e) {
                System.out.println(e.toString());
                e.printStackTrace();
                return "";
            }
    
            byte[] byteArray = inStr.getBytes("UTF-8");
            byte[] md5Bytes = md5.digest(byteArray);
            StringBuffer hexValue = new StringBuffer();
            for (int i = 0; i < md5Bytes.length; i++) {
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16) {
                    hexValue.append("0");
                }
                hexValue.append(Integer.toHexString(val));
            }
            return hexValue.toString();
        }
    }

    编写了测试代码对产品代码进行测试:

    public static void main(String args[]) throws Exception {
            String str = new String("amigoxiexiexingxing");
            System.out.println("原始:" + str);
            System.out.println("MD5后:" + md5Encode(str));
        }

    遇到的问题:

    IDEA错误:错误: 非法字符: 'ufeff' 解决方案|错误: 需要class, interface或enum

    这是因为:IDEA可以自动把UTF-8+BOM文件转为普通的UTF-8文件,但Android Studio需要重新转一下。所以需要将编码格式UTF-8+BOM文件转为普通的UTF-8文件。

    解决方法为:在右下角,将编码改为GBK,再转为UTF-8即可。

    学习反思及总结

       平时写的博客确实不够认真,实验全部重新修改,以上。

  • 相关阅读:
    lix
    docker-desktop: error during connect
    安装Docker Desktop报错WSL 2 installation is incomplete.
    索引二倒排索引和正排索引
    公众号资料分享
    docker使用物理机gpu运行模型
    使用arthas定位java问题
    pytorch设置gpu
    pytorch模型初始化
    【转】OpenGL图形渲染管线、VBO、VAO、EBO、 TBO概念及用例
  • 原文地址:https://www.cnblogs.com/20145207lza/p/6819123.html
Copyright © 2011-2022 走看看