实验三 敏捷开发与XP实践

安装alibaba 插件,解决代码中的规范问题

  • 根据老师的教程:打开Settings ->Plugins -> Browse repositories...在搜索框输入alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDEA生效

  • 在IDEA左目录栏里右键.java文件图标,选择编码约规扫描,然后根据下方报错里修改自己的代码格式。

  • 规范例代码截图

  • 学习Code菜单

    • 使用Code->Reformate Code,将代码格式化
    • 由于代码有限,我上网查找并简单实践学习了Code菜单的功能,以下是学习笔记:

与搭档互相加入项目

  • 在码云中自己项目下管理—>开发者区,邀请搭档加入自己的项目。现在两人就可以互相修改对方的项目啦!这相当于我们在开发一个软件或者公用一些代码时方便两人一起协作开发,并且Git commit时提交的提示信息的作用也显现出来。互相可以了解代码的作用,或者自己对代码做了什么修改,让搭档一目了然。
  • 接着就是连接搭档的码云地址。
    • 一开始我陷入了误区,在自己的大文件夹下新建文件夹连接搭档的项目,然后失败了,这样新建出来的文件任然属于我自己的子项目。
    • 正确的操作是:建立一个与自己主文件夹平行的文件夹用来存储搭档的代码。git clone上搭档的地址以后,只要git push一下,代码就轻松down下来了。
  • 修改与编辑操作
    • 与原来对自己的项目操作相同,改好后主要以标注修改内容,git push上码云就行。
  • 实验截图:

重构

  • 我们来看看可以在哪些方面对代码进行重构:

    • 重命名:对类,接口,方法,属性等重命名,以使得更易理解
    • 抽取代码:将方法内的一段代码抽取为另一个方法,以使得该段代码可以被其他方法调用,这是重构中很重要很常用的,此举可以极大的精炼代码,减少方法的代码行数
    • 封装字段:将类的某个字段转换成属性,可以更加合理的控制字段的访问
    • 抽取接口:将类的某些属性,方法抽取组成个接口,该类自动实现该接口
    • 提升方法内的局部变量为方法的参数:这主要是在写代码的过程中会使用到
    • 删除参数:将方法的一个或多个参数删掉
    • 重排参数:将方法的参数顺序重新排列

      实际应用中,用的最多的是1、2、3,我们可以在写代码的时候有意识的运用代码重构,这样当我们完成编码时代码的质量也能得到保证。
  • 对搭档代码进行重构

  • 参考了学长学姐的博客进行修改。

  • 实验截图如下:

Java与密码学学习

体验加解密---凯撒密码

凯撒密码的加密算法极其简单。其加密过程如下:

在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变换:

c≡m+k mod n (其中n为基本字符个数)

同样,解密过程可表示为:

m≡c+k mod n (其中n为基本字符个数)

重构后的代码为:

public class Caesar{
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);
// 是小写字母
c = getC(key, c);
es+=c;
}
System.out.println(es);
}
private static char getC(int key, char c) {
if(c>='a' && c<='z') {
//移动key%26位
c = move(key, c);
if(c<'a') {
//向左超界
c = changeCplus(c);
}
if(c>'z') {
//向右超界
c = changeCminus(c);
}
}
// 是大写字母
else if(c>='A' && c<='Z') {
c = move(key, c);
if(c<'A') {
c = changeCplus(c);
}
if(c>'Z') {
c = changeCminus(c);
}
}
return c;
}
private static char changeCminus(char c) {
c -= 26;
return c;
}
private static char changeCplus(char c) {
c += 26;
return c;
}
private static char move(int key, char c) {
c+=key%26;
return c;
}
}
  • 实验结果截图:

Java摘要算法- MD5

使用Java计算指定字符串的消息摘要。

java.security包中的MessageDigest类提供了计算消息摘要的方法,

首先生成对象,执行其update()方法可以将原始数据传递给该对象,然后执行其digest( )方法即可得到消息摘要。具体步骤如下:

(1) 生成MessageDigest对象

MessageDigest m=MessageDigest.getInstance("MD5");

分析:和2.2.1小节的KeyGenerator类一样。MessageDigest类也是一个工厂类,其构造器是受保护的,不允许直接使用new MessageDigist( )来创建对象,而必须通过其静态方法getInstance( )生成MessageDigest对象。其中传入的参数指定计算消息摘要所使用的算法,常用的有"MD5","SHA"等。若对MD5算法的细节感兴趣可参考http://www.ietf.org/rfc/rfc1321.txt。

(2) 传入需要计算的字符串

m.update(x.getBytes("UTF8" ));

分析:x为需要计算的字符串,update传入的参数是字节类型或字节类型数组,对于字符串,需要先使用getBytes( )方法生成字符串数组。

(3) 计算消息摘要

byte s[ ]=m.digest( );

分析:执行MessageDigest对象的digest( )方法完成计算,计算的结果通过字节类型的数组返回。

(4) 处理计算结果

必要的话可以使用如下代码将计算结果s转换为字符串。

String result="";
for (int i=0; i<s.length; i++){
result+=Integer.toHexString((0x000000ff & s[i]) | 0xffffff00).substring(6);
}

重构代码:

import java.security.*;
public class DigestPass{
public static void main(String[ ] args) throws Exception{
String x = getString(args[0]);
MessageDigest m=MessageDigest.getInstance("MD5");
m.update(x.getBytes("UTF8"));
byte[] s = getDigest(m);
String result="";
for (int i=0; i<s.length; i++){
result+= getString(s[i]).substring(6);
}
System.out.println(result);
}
private static String getString(byte b) {
return Integer.toHexString((0x000000ff & b) |
0xffffff00);
}
private static byte[] getDigest(MessageDigest m) {
return m.digest();
}
private static String getString(String arg) {
return arg;
}
}
  • 实验结果截图:

实验总结

本次实验主要学会了如何在IDEA中规范代码,如何邀请搭档加入自己的项目,还明白了如何进行内容的重构。在邀请搭档加入自己项目的过程中,我们在互相加入各自2018java的项目的基础上重新建了一个项目,这样方便共同传送文件,避免误删等偶然性失误。与此同时,通过学习Java密码学算法的博客,了解了凯撒密码和摘要算法——MD5,以及如何进行秘钥的共享的知识。在IDEA中有些功能不能成功运行,然后就到Ubuntu中进行操作,虽然过程有些曲折,但总的收获很大。

20165322 实验三 敏捷开发与XP实践的更多相关文章

  1. 20145213《Java程序设计》实验三敏捷开发与XP实践

    20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...

  2. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  3. JAVA课程实验报告 实验三 敏捷开发与XP实践

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  4. 20145225《Java程序设计》 实验三 "敏捷开发与XP实践"

    20145225<Java程序设计> 实验三 "敏捷开发与XP实践" 实验报告 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 git 上 ...

  5. 20145215实验三 敏捷开发与XP实践

    20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...

  6. 20145325张梓靖 实验三 "敏捷开发与XP实践"

    20145325张梓靖 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 git上传中遇到的问题 使用 git 相互更改代码 实现代码的重构 git ...

  7. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  8. 2018-2019-20175205 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告

    2018-2019-20175205 实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>&l ...

  9. 20175314 实验三 敏捷开发与XP实践

    20175314 实验二 Java面向对象程序设计 一.实验内容 XP基础 XP核心实践 相关工具 二.实验步骤 (一)代码格式化 创建"175314.exp3"项目,在该项目下创 ...

随机推荐

  1. PIE SDK栅格拉伸渲染

    1. 功能简介 栅格数据拉伸渲染是对指定的波段进行图像拉伸,并设置拉伸之后的颜色带,根据像元值和颜色带进行数据渲染. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 实例化拉伸渲染对象示例 ...

  2. PIE SDK灾前灾后对比

    灾前灾后对比功能是GIS软件中常用的功能之一,指利用多时相获取的覆盖同一地表区域的遥感影像及其它辅助数据来确定和分析地表变化.它利用计算机图像处理系统,对不同时段目标或现象状态的变化进行识别.分析:它 ...

  3. java将list<T>导出为xls文件

    一.action层 /** * 导出list */ @SuppressWarnings("unchecked") public void exportBatch() { reque ...

  4. mysql 命令笔记

    添加密码 mysqladmin -uroot -p password 123456 创建用户只能在10.0.0.0网段下访问数据库grant select,create,insert,update o ...

  5. HashMap和Hashtable的实现原理

    HashMap和Hashtable的底层实现都是数组+链表结构实现的,这点上完全一致 添加.删除.获取元素时都是先计算hash,根据hash和table.length计算index也就是table数组 ...

  6. 向一个GitHub repository添加协作者

    第一步: 在协作者的机器(就是你的电脑啦)上创建一个ssh key (使用命令ssh-keygen) 第二步: 创建一个github账户 第三步: 把public-key添加到你的github用户账户 ...

  7. 最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础

    最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础,加油吧 距离去北京还有23天

  8. Android 软件自动更新功能实现的方法

    相信所有的用户都遇到过软件提醒更新的情况,下面就将实现此功能 首先看一下程序目录结构 步骤: 1.新建一个类UpdateManger,用于显示提示更新 详细出处参考:http://www.jb51.n ...

  9. 动态添加LInk的分析

    动态创建HyperLink超链接: 1.如果添加HyperLink的代码只写在Button中,则只会显示最后一次添加的内容.所以必须在Pageload中添加. 2.首次载入: PageLoad    ...

  10. 使用vue-router切换页面时,获取上一页url以及当前页面url

    今天在实现一个小功能的时候,遇到一个问题,使用vue-router获取上一页面的url信息,我尝试了多种方式,发现使用vue-router的canDeactivate钩子实现这个功能最为方便,现在将我 ...