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

实验要求

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

实验步骤

(一)编码标准

  • 编程标准

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

    • 打开Settings ->Plugins

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

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

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

  • 代码出现的规范问题

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

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

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

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

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

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

  • 规范后的代码

/**
* 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

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

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

    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 + /

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

    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

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

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

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

  • 搭档的Complex代码

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

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

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

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


码云链接


总结

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


参考

Code篇

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

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

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

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

    20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...

  3. 2017-2018-2 20165228 实验三《敏捷开发与XP实践》实验报告

    2017-2018-2 20165228 实验三<敏捷开发与XP实践>实验报告 相关知识点 (一)敏捷开发与XP 通过 XP准则来表达: 沟通 :XP认为项目成员之间的沟通是项目成功的关键 ...

  4. 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告

    2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...

  5. 2018-2019-2 20175217 实验三《敏捷开发与XP实践》实验报告

    一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:吴一凡 学号:20175217 指导教师:娄嘉鹏 实验日期:2019年4月25日 实验时间:--- 实验序号:实验三 实验名称:敏捷开 ...

  6. 2018-2019-2 20175227张雪莹《Java程序设计》实验三 《敏捷开发与XP实践》

    2018-2019-2 20175227张雪莹<Java程序设计> 实验三 <敏捷开发与XP实践> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号: ...

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

    一.实验三 敏捷开发与XP实践-1 1.实验要求 -实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成I ...

  8. 20165223 实验三 敏捷开发与XP实践

    目录 一.实验报告封面 二.具体实验内容 (一)敏捷开发与XP实践-1 代码规范格式化 (二)敏捷开发与XP实践-2 添加搭档项目 (三)敏捷开发与XP实践-3 搭档代码重构 (四)敏捷开发与XP实践 ...

  9. 2017-2018-2 20165231 实验三 敏捷开发与XP实践

    实验报告封面 课程:Java程序设计 班级:1652班 姓名:王杨鸿永 学号:20165231 指导教师:娄嘉鹏 实验日期:2018年4月28日 实验时间:15:25 - 17:15 实验序号:实验三 ...

随机推荐

  1. linux 文件属性(转)

    1.  文件类型 - 普通文件 d 目录文件 l 链接文件 b 块设备文件 c 字符型设备文件 s socket文件 p 管道类型文件 块设备文件主要是指慢速设备,比如hd硬盘,数据主要是分块存储,所 ...

  2. LOJ 6270

    最近(一直)有点(很)蠢 按照区间大小排序做区间包含多少区间的话 只用考虑 左端点比当前左端点小的和右端点比当前右端点大的,因为不可能同时满足 关于K,就在做到K的时候减一下就好了,一直傻逼在这了 # ...

  3. CentOS裸机环境下安装php-7.3.1

    安装步骤如下 安装必要的软件 获取源码 编译安装 安装过程可能遇到的一些问题 编译参数详解 安装步骤如下 安装必要的软件 yum install -y autoconf automake libtoo ...

  4. 如何将WORD表格转换成EXCEL表格

    WORD和EXCEL都可以制作表格,但WORD表格与EXCEL表格之间有着很明显的差距,所以在办公中经常会需要将WORD转换成EXCEL,今天小编就教大家一招将WORD表格转换成EXCEL表格. 操作 ...

  5. 简单数据库开发之dao层开发

    数据库 dao层是用来与底层数据库连接的一系列代码,它因上层service层调用而调用底层数据库,因为一般的数据库不会只存在一到几张表格,所以必须定义出dao层的接口协议,方便各种表格的操作. dao ...

  6. oracle 安装介绍

    oracle 分为客户端和服务器 全局数据库是 实例名通常就是所说的服务,就是说数据库和操作系统之间的交互用的是数据库实例名 导入 sql文件 @路径    例如@d:/my.sql [oracle@ ...

  7. JAVA生成(可执行)Jar包的全面详解说明 [打包][SpringBoot][Eclipse][IDEA][Maven][Gradle][分离][可执行]

    辛苦所得,转载还请注明: https://www.cnblogs.com/applerosa/p/9739007.html  得空整理了关于java 开发中,所有打包方式的 一个操作方法, 有基于ID ...

  8. Python append()方法--list

    描述 append()方法:用于向列表末尾添加新的对象. 语法 语法格式:list.append(object) 参数 object:添加到列表末尾的对象,这里的对象可以是一个元素.列表.字典或元组等 ...

  9. python写算法中的栈

    ########### 栈的使用 ############### class StackFullError(Exception): pass class StackEmptyError(Excepti ...

  10. Node.js、npm、vue-cli 的安装配置环境变量

    我安装node.js是为了学习vue,需要用到npm,所以就把node.js安装了,安装node.js会带有npm的安装. 在安装node.js之前,我们需要了解以下三个内容. npm: Nodejs ...