標籤:
北京電子科技學院(BESTI)
實驗報告
課程:資料結構 班級:1352 姓名:何偉欽 學號:20135223
成績: 指導教師:婁嘉鵬 實驗日期: 2015.5.6
實驗密級: 預習程度: 實驗時間:5:30-10:00
儀器組次:23 必修/選修:必修 實驗序號:02
實驗名稱:Java物件導向程式設計
實驗目的與要求:1.初步掌握單元測試和TDD
2.理解並掌握物件導向三要素:封裝、繼承、多態
3.初步掌握UML建模
4.熟悉S.O.L.I.D原則
5.瞭解設計模式
實驗儀器 |
型號 |
數量 |
膝上型電腦 |
戴爾14z-5423 |
1 |
Eclipse |
\ |
\ |
虛擬機器 |
\ |
\ |
實驗步驟
(一)單元測試
(1) 三種代碼
用程式解決問題時,要會寫三種碼:
通過一個例子說明如何寫這三種代碼。
需求:我們要在一個MyUtil類中解決一個百分製成績轉成“優、良、中、及格、不及格”五級製成績的功能。
1.虛擬碼
2.產品代碼
3.測試代碼
測試正常情況
測試出錯情況
測試邊界狀況
(2) TDD(Test Driven Devlopment, 測試驅動開發)
先寫測試代碼,然後再寫產品代碼的開發方法叫“測試驅動開發”(TDD)。
TDD的一般步驟如下:
- 明確當前要完成的功能,記錄成一個測試清單
- 快速完成編寫針對此功能的測試案例
- 測試代碼編譯不通過(沒產品代碼呢)
- 編寫產品代碼
- 測試通過
- 對代碼進行重構,並保證測試通過(重構下次實驗練習)
- 迴圈完成所有功能的開發
TDD的編碼節奏是:
- 增加測試代碼,JUnit出現紅條
- 修改產品代碼
- JUnit出現綠條,任務完成
測試結果出現了一個紅條(red bar),說明測試沒通過,紅條上面匯總了測試情況,運行了一個測試,沒有錯誤,一個測試沒通過。下面原因說的也很清楚:測試代碼第十行傳入55時,期望結果是“不及格”,代碼返回了“錯誤”
修改MyUtil.Java吧,輸入以下代碼,綠條表示程式運行通過
(二)物件導向三要素
(1)抽象
抽象就是抽出事物的本質特徵而暫時不考慮他們的細節。對於複雜系統問題人們藉助分層次抽象的方法進行問題求解;在抽象的最高層,可以使用問題環境的語言,以概括的方式敘述問題的解。在抽象的較低層,則採用過程化的方式進行描述。在描述問題解時,使用面向問題和面向實現的術語。 程式設計中,抽象包括兩個方面,一是過程抽象,二是資料抽象。
(2)封裝繼承與多態
1.封裝實際上使用方法(method)將類的資料隱藏起來,控制使用者對類的修改和訪問資料的程度,從而帶來模組化(Modularity)和資訊隱藏(Information hiding)的好處;介面(interface)是封裝的準確描述手段。
2.繼承指一個類的定義可以基於另外一個已經存在的類,即子類基於父類,從而實現父類代碼的重用。繼承的關鍵在於確認子類為父類的一個特殊類型 。繼承是實現軟體可重用的根基,是提高軟體系統的可擴充性與可維護性的主要途徑,繼承可以實現代碼複用。需要注意的是,繼承更重要的作用是實現多態。
3.多態是指不同的類對象調用同一個簽名的成員方法時將執行不同代碼的現象。多態是物件導向程式設計的靈活性和可擴充性的基礎。 我們再看看上一個類圖,我們可以進一步抽象,把Dog類中的bark()和Cat類中的meow()抽象成一個抽象方法shout(),Dog類和Cat類中覆蓋這個方法
(三)設計模式初步
(1)S.O.L.I.D原則
物件導向三要素是“封裝、繼承、多態”,任何物件導向程式設計語言都會在文法上支援這三要素。如何藉助抽象思維用好三要素特別是多態還是非常困難的,S.O.L.I.D類設計原則是一個很好的指導:
- SRP(Single Responsibility Principle,單一職責原則)
- OCP(Open-Closed Principle,開放-封閉原則)
- LSP(Liskov Substitusion Principle,Liskov替換原則)
- ISP(Interface Segregation Principle,介面分離原則)
- DIP(Dependency Inversion Principle,依賴倒置原則)
(2)模式與設計模式
模式是某外在環境(Context) 下﹐對特定問題(Problem)的慣用解決之道(Solution)。模式必須使得問題明晰,闡明為什麼用它來求解問題,以及在什麼情況下有用,什麼情況下不能起作用,每個模式因其重複性從而可被複用,本身有自己的名字,有可傳授性,能移植到不同情景下。模式可以看作對一個問題可複用的專家級解決方案。 電腦科學中有很多模式:
- GRASP模式
- 分析模式
- 軟體體繫結構模式
- 設計模式:建立型,結構型,行為型
- 管理員模式: The Manager Pool 實現模式
- 介面設計互動模式
- …
這裡面最重要的是設計模式,在物件導向中設計模式的地位可以和面向過程編程中的資料結構的地位相當。
(3)設計模式實樣本
設計模式(design pattern)提供一個用於細化軟體系統的子系統或組件,或它們之間的關係圖,它描述通訊組件的公用再現結構,通訊組件可以解決特定語境中的一個設計問題。
-
(四)練習
使用TDD的方式設計關實現複數類Complex
1.虛擬碼
2.測試代碼
3.產品代碼
4.運行結果
5.統計時間
步驟 |
耗時 |
百分比 |
需求分析 |
5 |
6.25% |
設計 |
10 |
12.5% |
代碼實現 |
50 |
62.5% |
測試 |
10 |
12.5% |
分析總結 |
5 |
6.25% |
總結單元測試的好處:
(1)最佳化程式設計,不斷最佳化程式,使程式更加完善。
(2)讓自己負責的模組功能定義盡量明確,模組內部的改變不會影響其他模組,而且模組的品質能得到穩定的、量化的保證。
(3)設計的程式耦合度也越來越低。每個單元程式的輸入輸出,業務內容和異常情況都會儘可能變得簡單。最後發現自己的編程習慣和設計能力會越來越好
實驗體會:
本次實驗收穫很大,初步掌握單元測試和TDD,並深入理解並在一定程度上掌握了java編程中封裝、繼承、多態的應用。
對UML建模和S.O.L.I.D原則也有了一定程度的瞭解。雖然在實驗過程中遇到不少問題,但最後都能得到很好的解決。但這次實驗花費時間過多,總體來說實驗效率很低。
java程式設計第二次實驗報告