20165203 实验三 敏捷开发与XP实践

20165203 实验三 敏捷开发与XP实践

任务一:

1.实验要求

实验三 敏捷开发与XP实践 (http://www.cnblogs.com/rocedu/p/4795776.html), Eclipse的内容替换成IDEA

参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安装alibaba 插件,解决代码中的规范问题。

在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下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));
}
}  

2.实验过程:

(1)学习了娄老师的博客,以下几点很重要:

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

②Java中的一般的命名规则有:

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

(2)IDEA的Code菜单学习:

Code菜单中内容颇为丰富,而且很多功能都可以通过快捷键实现,大大方便了我们编程。

Code菜单截图如图所示:

自认为比较常用的功能:

  • Override Methods(Ctrl+O):重载基本类的方法。(起初,自己特意到扇贝单词查了这个短语的意思,为“覆盖方法”,自己猜到应该是“重载方法”,又尝试了一下,结果验证正确)

  • Implent Method(Ctrl+l):编写当前类implements的接口方法

  • Generate(Alt+Insert):创建所选中字段的getter与setter方法

  • Surround With(Ctrl+Alt+T):使用语句包装代码段,例如if-else,try-catch,do-while

  • Unwrap\Remove:移除本类中所有代码段。

  • Comment with Line Comment:注释所选代码行

  • Comment with Block Comment:在光标所在位置插入注释。

  • Reformat Code:将代码按格式缩进字符。

任务二:

在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;

提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。

搭档的Complex代码:

搭档的Complex测试码:

任务三:

学习(http://www.cnblogs.com/rocedu/p/4795776.html), Eclipse的内容替换成IDEA

完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。

看了娄老师给的教程后,Refactor的功能很丰富,它帮我们规范了代码,使代码更易懂,更上升了一个档次。

搭档的代码如下:

搭档代码出现的问题:

  • Student类中封装不明显。
  • 主类的名字不符合命名规则。
  • 主类中的输出语句不符合DRY规则。

修改后如下:

任务四:

参考 http://www.cnblogs.com/rocedu/p/6683948.html,以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。

提交学习成果码云链接和代表性成果截图,要有学号水印。

我们选择的是凯撒密码:
我们的分工是我负责加密部分,搭档负责解密部分。
加密部分的伪代码如下:

输入明文  
输入密钥  
进行移位转换  
输出密文

我根据伪代码写出产品代码:

import java.util.Scanner;

public class CaesarE {
    public static void main(String[] args) {
        System.out.print("请输入明文:");
        Scanner a=new Scanner(System.in);
        String b=a.nextLine();
        System.out.print("请输入秘钥:");
        Scanner c=new Scanner(System.in);
        int key=c.nextInt();
        Encrypt(b, key);
    }

    public static void Encrypt(String str,int k){
        String s="";
        for (int i = 0; i < str.length(); i++) {
            char c=str.charAt(i);
            if(c>='a'&&c<='z'){
                c+=k%26;
                if(c<'a')
                    c+=26;
                if(c>'z')
                    c-=26;

            }else if(c>='A'&&c<='Z'){
                c+=k%26;
                if(c<'A')
                    c+=26;
                if(c>'Z')
                    c-=26;
            }
            s+=c;
        }
        System.out.println(str+" 加密为: "+s);
    }
}  

我和搭档的产品代码运行结果如下:

实验过程中遇到的问题:

Q1:在学习任务一时,在打开Code时,菜单里的许多项都不认识,感觉无从下手。

A1:
法一:
我在扇贝单词中查询单词意思,然后再猜一下。
比如,对于override Methods,经过查询为覆盖方法,自然就为重载类的基本方法了。

法二:
就是尝试点击,看看会出什么结果,根据结果推出作用,典型的就为Surround With,尝试点击,出现如图所示结果:
自然就是用if-else try-catch do-while等包装代码段了。

Q2:在IDEA中,一开始没有找到在Elicpes中的Generate toString()
A2:后来,自己在Code中的Generate中也发现了toString(),也可以用的。

实验体会

本次实验给了我和搭档充足的合作机会,我们体会了一次比较大的合作,的确,人多力量大,众人拾柴火焰高,这些都让我们体会到了结对编程的意义,

步骤 耗时 百分比
需求分析 12min 10%
设计 10min 8%
代码实现 48min 40%
测试 40min 34%
分析总结 10min 8%
posted @ 2018-04-28 13:09  I~Justice  阅读(144)  评论(1编辑  收藏  举报