2018-2019-20175205 實驗三敏捷開發與XP實踐《Java開發環境的熟悉》實驗報告

2018-2019-20175205 實驗三敏捷開發與XP實踐《Java開發環境的熟悉》實驗報告

實驗要求

  • 沒有Linux基礎的同窗建議先學習《Linux基礎入門(新版)》《Vim編輯器》 課程
  • 完成實驗、撰寫實驗報告,實驗報告以博客方式發表在博客園,注意實驗報告重點是運行結果,遇到的問題(工具查找,安裝,使用,程序的編輯,調試,運行等)、解決辦法(空洞的方法如「查網絡」、「問同窗」、「看書」等一概得0分)以及分析(從中能夠獲得什麼啓示,有什麼收穫,教訓等)。報告能夠參考範飛龍老師的指導
  • 嚴禁抄襲,有該行爲者實驗成績歸零,並附加其餘懲罰措施。

實驗步驟

(一)編碼標準

  • 編程標準
    • 具備說明性的名字
    • 清晰的表達式
    • 直截了當的控制流
    • 可讀的代碼和註釋
    • 實現這些內容時一致所使用某些規則和慣用法
  • 安裝alibaba插件
    • 打開Settings ->Plugins
      在搜索框輸入alibaba便可看到Alibaba Java Code Guidelines插件,點擊Install進行安裝,而後重啓IDE生效:
      java

    • 使用:在項目名稱上單擊右鍵,在彈出菜單上選擇編碼規約掃描:
      git

    • 出現下圖內容,不規範的地方,有中文提示而且定位到了行,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
      網絡

    • 不容許任何未定義的常量直接出如今代碼中。
    • 全部類都必須添加建立者信息app

  • 規範後的代碼
/**
 * 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
      ide

    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篇

相關文章
相關標籤/搜索