標籤:
Java實驗報告二:Java物件導向程式設計
實驗要求:
1. 初步掌握單元測試和TDD2. 理解並掌握物件導向三要素:封裝、繼承、多態3. 初步掌握UML建模4. 熟悉S.O.L.I.D原則5. 瞭解設計模式
實驗內容
(一)單元測試(二)物件導向三要素(三)設計模式初步(四)練習
實驗過程
(一)單元測試(1) 三種代碼
編寫程式需要用到虛擬碼、產品代碼、測試代碼。
(2) TDD(Test Driven Devlopment, 測試驅動開發)
定義:先寫測試代碼,然後再寫產品代碼的開發方法
一般步驟如下:
- 明確當前要完成的功能,記錄成一個測試清單
- 快速完成編寫針對此功能的測試案例
- 測試代碼編譯不通過(沒產品代碼呢)
- 編寫產品代碼
- 測試通過
- 對代碼進行重構,並保證測試通過(重構下次實驗練習)
- 迴圈完成所有功能的開發
TDD模式測試代碼的編寫和調試結果
(二)物件導向三要素(1)抽象
抽象能力是指"去粗取精、化繁為簡、由表及裡、異中求同"的能力。
程式設計中,抽象包括兩個方面,一是過程抽象,二是資料抽象。
(2)封裝、繼承與多態
物件導向(Object-Oriented)的三要素包括:封裝、繼承、多態。包括物件導向分析(OOA)、物件導向設計(OOD)、物件導向編程實現(OOP)。
OOA關注是什麼(what),OOD關注怎麼做(how),OOP在設計的基礎上用程式設計語言(如Java)編碼。
1、封裝
定義:將資料與相關行為封裝在一起以實現資訊就隱藏。
封裝實際上使用方法(method)將類的資料隱藏起來,控制使用者對類的修改和訪問資料的程度,從而帶來模組化(Modularity)和資訊隱藏(Information hiding)的好處;介面(interface)是封裝的準確描述手段。 Dog類通過使用類和存取控制(private,public)隱藏了屬性color,開放了介面setColor(),getColor(),bark()和toString。
利用UML軟體設計Dog類、Cat類和Animal類,並在eclipse中實現。
2、建模語言UML
UML是一種通用的建模語言,我們實驗中使用umbrello進行建模,Windows中推薦大家使用 StarUML。
過程抽象的結果是函數,資料抽象的結果是抽象資料類型(ADT),類可以作具有繼承和多態機制的ADT。資料抽象才是OOP的核心和起源。
利用UML軟體為Animal測試程式建模,並通過eclipse實現。
(三)設計模式初步(1)S.O.L.I.D原則
1、SRP(Single Responsibility Principle,單一職責原則)
內容:決不要有一個以上的理由修改一個類。對象提供單一職責的高度封裝,對象的改變僅僅依賴於單一職責的改變。
2、OCP(Open-Closed Principle,開放-封閉原則)
內容:軟體實體(類,模組,函數等)應該對擴充開放,對修改封閉。
對擴充開放,要求軟體模組的行為必須是可以擴充的,在應用需求改變或需要滿足新的應用需求時,我們要讓模組以不同的方式工作;
對修改封閉,要求模組的原始碼是不可改動的,任何人都不許修改已有模組的原始碼。
OCP的實現手段:(1)抽象和繼承,(2)面向介面編程。
3、LSP(Liskov Substitusion Principle,Liskov替換原則)
內容:子類必須可以被其基類所代;使用指向基類的指標或引用的函數,必須能夠在不知道具體衍生類別物件類型的情況下使用它。
核心思想是父類型對象可以被子類型對象所取代。
4、ISP(Interface Segregation Principle,介面分離原則)
內容:客戶不應該依賴他們並未使用的介面(介面的功能不要太多)
5、DIP(Dependency Inversion Principle,依賴倒置原則)
內容:高層模組不應該依賴於低層模組,二者都應該依賴於抽象;抽象不應該依賴於細節,細節應該依賴於抽象 。
(2)模式與設計模式
模式是某外在環境下﹐對特定問題的慣用解決方案,可以看作對一個問題可複用的專家級解決方案。
(3)設計模式實樣本
1、四個基本要素:
模式名:描述模式,便於交流,存檔
問題:描述何處應用該模式
解決:描述一個設計的組成元素,不針對特例
結果:應用該模式的結果和權衡
2、抽象原廠模式
容易出現過度設計的問題
只是對於整形資料來說的
(四)練習1使用TDD的方式設計關實現複數類Complex。2.實驗報告中統計自己的PSP(Personal Software Process)時間
| 步驟 |
耗時 |
百分比 |
| 需求分析 |
|
|
| 設計 |
|
|
| 代碼實現 |
|
|
| 測試 |
|
|
| 分析總結 |
|
|
(1)虛擬碼:
1. A = a(實數部分) + bi(虛數部分);
2.相加
實數部分與實數部分相加,虛數部分與虛數部分相加
3.相減
實數部分與實數部分相減,虛數部分與虛數部分相減
4.相乘
A*B=ac-bd+(ad+bc)i
A=a+bi, B=c+di
5.顯示一個複數
虛部為負數情況,不顯示前面的加號
(2)產品代碼:
————尚未完成————
Java實驗報告二:Java物件導向程式設計