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

时间:2024-01-02 16:12:50

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

实验要求

  • 没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程
  • 完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
  • 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

实验步骤

(一)编码标准

  • 编程标准

    • 具有说明性的名字
    • 清晰的表达式
    • 直截了当的控制流
    • 可读的代码和注释
    • 实现这些内容时一致所使用某些规则和惯用法
  • 安装alibaba插件

    • 打开Settings ->Plugins

      在搜索框输入alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDE生效:

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

    • 使用:在项目名称上单击右键,在弹出菜单上选择编码规约扫描:

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

    • 出现下图内容,不规范的地方,有中文提示并且定位到了行,alibaba把问题分为block/critical/major三个等级,有些规则可以一键修复。我才发现自己的代码问题这么多。。。

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

  • 代码出现的规范问题

    • 在if/else/for/while/do语句中必须使用大括号,即使只有一行代码,避免使用if(conditions)statement;

    • 所有的覆写方法,必须加@Override注解,例如,getObject()get0bject()的问题,一个是字母O,一个是数字0,加@Override可以准确判断是否覆盖成功,另外,如果过在抽象类中对方法签名进行修改,其实现类会马上编译报错。

    • 抽象类命名使用Abstract或Base开头

    • 方法名,参数名,成员变量,局部变量都统一使用lowerCamelCase,必须遵循驼峰形式,为此还学会了如何批量修改变量名.在变量名上进行rename操作,所有的同名变量都会自动更改。快捷键:ALT+SHIFT+R

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

    • 不允许任何未定义的常量直接出现在代码中。

    • 所有类都必须添加创建者信息

  • 规范后的代码

/**
* CodeStandard
*
* @author HY20175205
* @date 2019/4/28
*/
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());
int n = 20;
if (buffer.capacity() < n){
buffer.append("1234567");
} for (int i = 0; i < buffer.length(); i++){
System.out.println(buffer.charAt(i));
} }
}
  • code菜单

    1. Override Methods ( 重写覆盖方法 ) Ctrl + O

    2. Implements Methods ( 实现接口方法 ) Ctrl + I

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

    3. Gengrate ( 用于生成Construct、Getter/Setter、toString等) Alt + Insert

    4. Surround With (使用if-else、for、while等语句包装代码段) Ctrl+Alt+T

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

    5. SmartType ( 智能选择并实现 ) Ctrl + Shift + 空格

    6. Cyclic Expand Word ( 循环往上选择单词 ) Alt + /

    7. Cyclic Expand Word (Backwrad)( 循环往下选择单词 ) Alt + Shift + /

    8. Expand ( 方法展开 ) Ctrl + 加号

    9. Collapse ( 方法折叠 ) Ctrl + 减号

    10. Expand Recursively ( 同上,方法展开 ) Ctrl + Alt + 加号

    11. Collapse Recursively ( 同上,方法折叠 ) Ctrl + Alt + 减号

    12. Expand All ( 全部方法展开 ) Ctrl + Shift + 加号

    13. Collapse All ( 全部方法折叠 ) Ctrl + Shift + 减号

    14. Expand doc comments ( 展开Java doc注释 )

    15. Collapse doc comments ( 折叠Java doc注释 )

    16. Insert Live Template ( 选择Live Templates模板 ) Ctrl + J

    17. Surround with Live Template ( 选择Live Templates模板 ) Ctrl + Alt + J

    18. Comment with Line Comment ( 行注释 ) Ctrl + /

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

    19. Comment with Block Comment ( 块注释 ) Ctrl + Shift + /

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

    20. Reformat Code ( 格式化代码 ) Ctrl + Alt + L

    21. Show Reformat File Dialog ( 弹出格式化弹框 ) Ctrl + Alt + Shift + L

    22. Optimize Imports ( 去除未引用的包导入声明 ) Ctrl + Alt + O

    23. Rearrange Code ( 重新整理代码 )

  • 代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,Java中的一般的命名规则有:

    • 要体现各自的含义
    • 包、类、变量用名词
    • 方法名用动宾
    • 包名全部小写,如:io,awt
    • 类名第一个字母要大写,如:HelloWorldApp
    • 变量名第一个字母要小写,如:userName
    • 方法名第一个字母要小写:setName
  • 标识符名字应当直观且可以拼读

  • 标识符的长度,一般全局变量用具有说明性的名字,局部变量用短名字:单字符的名字,常见的如i,j,k等用作局部变量。

(二)版本控制

  • 版本控制提供项目级的 undo(撤销) 功能,不至于因为失误而重头再来
  • 版本控制允许多人在同一代码上工作, 不会发生诸如一个人覆盖了另一个人编辑的代码,导致那个人的修改无效这样的情况。
  • 版本控制系统保存了过去所作的修改的历史记录。
  • 版本控制系统还支持在主线上开发的同时发布多个软件版本。
  • 版本控制也是项目级的时间机器,你可以选择任何一个时间, 精确地查看项目在当时的情况。

(三)重构

  • 概念:重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
  • 修改软件的四种动机:
    • 增加新功能
    • 原有功能有BUG
    • 改善原有程序的结构
    • 优化原有系统的性能
  • 需要重构的地方
    • 代码重复
    • 方法过长
    • 参数列过长
    • 条件逻辑过度复杂
    • 分支语句
  • 一个完整的重构流程应包括
    • 从版本控制系统代码库中Check out code
    • 读懂代码(包括测试代码)
    • 发现bad smell
    • Refactoring
    • 运行所有的Unit Tests
    • 往代码库中Check in code

(四)下载搭档的代码,至少进行三项重构

  • 在码云上把自己的学习搭档加入自己的项目中

    • 管理 -> 添加仓库成员 -> 邀请用户

      2018-2019-20175205 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告
  • 搭档的Complex代码

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

  • 重构1:所有类都必须添加创建者信息

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

  • 重构2:所有的覆写方法,必须加@Override注解

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

  • 重构3:方法名,参数名,成员变量,局部变量都统一使用lowerCamelCase

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

  • 重构4:在if/else/for/while/do语句中必须使用大括号,即使只有一行代码

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


码云链接


总结

本次实验学习的内容是如何写出更规范的代码,以前的写程序的过程中经常忽略这一点,往往认为只要运行结果正确的代码就是完整的好代码,经过这次实验我发现,代码往往是给别人看的,添加一些必要的解释说明和格式规范使自己的程序更加容易让别人理解,而且自己再回头查阅的时候也不至于抓不住重点。


参考

Code篇