实验三 敏捷开发与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. fixed

    之前我们见的fixed就是固定在低端.后来我遇到一个问题 如果  这样写: div{ position: fixed; left: 0; bottom: 0; } 内容吧div撑开,有多少算多少 di ...

  2. Python+Selenium之HTMLTestRunner

    下载 HTMLTestRunner 模块 下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 保存路径:将下载的HTMLTestRunne ...

  3. 抓包来看ftp状态码

    1.quit退出 客户端输入退出命令: 退出的抓包数据交换过程: 2.用户登录,输入正确用户名和错误用户名都是返回331请求输入密码,这里不再将错误用户名的抓包数据交换过程截图. 数据交换过程: 服务 ...

  4. .NET平台常用框架整理

    基于.NET平台常用的框架整理   转自:http://www.cnblogs.com/hgmyz/p/5313983.html 首先谢谢楼主,以后备用 自从学习.NET以来,优雅的编程风格,极度简单 ...

  5. java的访问修饰符

    Java中通过访问控制符(default,private,public,protected)来控制对类.变量.方法.构造方法的访问. 下表说明了4中修饰符的访问权限: 修饰符 当前类 同一包内 子孙类 ...

  6. document.write与document.getElementById.innterHTML的区别

    <html> <head> <meta charset="utf-8"> <script> var tmp = "< ...

  7. e.target和e.event和event.srcElement

    e.target 是目标对象,e.event是目标所发生的事件,event.srcElement捕获当前事件作用的对象 1. $(function(){ $("li:has(ul)" ...

  8. ActiveReport报表更改连接字符串及参数

    PageReport pr = new PageReport (new FileInfo("报表路径")); //报表路径如../Order/OrderSale.rdlx if(p ...

  9. sass继承

    @extend sass中,选择器继承可以让选择器继承另一个选择器的所有样式,并联合声明.使用选择器的继承,要使用关键词@extend,后面紧跟需要继承的选择器. scss.style css.sty ...

  10. ezdpl:完全依赖脚本和ssh的自动化部署方案

    ezdpl是easy deployment的简写,使用简单的ssh和shell脚本来部署.升级.回滚和重新配置linux服务器. 重要提示:警告:这个项目还处于测试过程中,请仔细阅读说明,并且自己承担 ...