課程:Java程序設計 班級: 1352 html
姓名:黃衛 學號:20135221java
成績: 指導教師:婁嘉鵬 實驗日期:2015.05.05編程
實驗密級: 預習程度: 實驗時間:8:30~12:30設計模式
儀器組次: 必修/選修:選修 實驗序號:2網絡
實驗名稱:Java面向對象程序設計 編程語言
實驗目的與要求:編輯器
1、實驗內容函數
1. 初步掌握單元測試和TDD工具
2. 理解並掌握面向對象三要素:封裝、繼承、多態單元測試
3. 初步掌握UML建模
4. 熟悉S.O.L.I.D原則
5. 瞭解設計模式
2、實驗要求
1.沒有Linux基礎的同窗建議先學習《Linux基礎入門(新版)》《Vim編輯器》 課程
2.完成實驗、撰寫實驗報告,實驗報告以博客方式發表在博客園,注意實驗報告重點是運行結果,遇到的問題(工具查找,安裝,使用,程序的編輯,調試,運行等)、解決辦法(空洞的方法如「查網絡」、「問同窗」、「看書」等一概得0分)以及分析(從中能夠獲得什麼啓示,有什麼收穫,教訓等)。報告能夠參考範飛龍老師的指導
3. 嚴禁抄襲,有該行爲者實驗成績歸零,並附加其餘懲罰措施。
4. 請你們先在實驗樓中的~/Code目錄中用本身的學號創建一個目錄,代碼和UML圖要放到這個目錄中,截圖中沒有學號的會要求重作,而後跟着下面的步驟練習。
3、實驗步驟
(一)單元測試
(1) 三種代碼
咱們經過一個例子說明如何寫這三種代碼。
需求:咱們要在一個MyUtil類中解決一個百分制成績轉成「優、良、中、及格、不及格」五級製成績的功能。
//僞代碼:
百分制轉五分制:
若是成績小於60,轉成「不及格」
若是成績在60與70之間,轉成「及格」
若是成績在70與80之間,轉成「中等」
若是成績在80與90之間,轉成「良好」
若是成績在90與100之間,轉成「優秀」
其餘,轉成「錯誤」
//產品代碼:
翻譯好的MyUtil.java以下:
public class MyUtil{
public static String percentage2fivegrade(int grade){
//若是成績小於60,轉成「不及格」
if (grade < 60)
return "不及格";
//若是成績在60與70之間,轉成「及格」
else if (grade < 70)
return "及格";
//若是成績在70與80之間,轉成「中等」
else if (grade < 80)
return "中等";
//若是成績在80與90之間,轉成「良好」
else if (grade < 90)
return "良好";
//若是成績在90與100之間,轉成「優秀」
else if (grade < 100)
return "優秀";
//其餘,轉成「錯誤」
else
return "錯誤";
}
}
//測試代碼:
public class MyUtilTest {
public static void main(String[] args) {
// 百分制成績是50時應該返回五級制的「不及格」
if(MyUtil.percentage2fivegrade(50) != "不及格")
System.out.println("test failed!");
else
System.out.println("test passed!");
}
}
(2) TDD(Test Driven Devlopment, 測試驅動開發)
先寫測試代碼,而後再寫產品代碼的開發方法叫「測試驅動開發」(TDD)。TDD的通常步驟以下:
基於TDD,咱們不會出現過分設計的狀況,需求經過測試用例表達出來了,咱們的產品代碼只要讓測試經過就能夠了。 Java中有單元測試工具JUnit來輔助進行TDD,咱們用TDD的方式把前面百分制轉五分制的例子重寫一次,體會一下有測試工具支持的開發的好處。 打開Eclipse,單擊File->New->Java Project新建一個TDDDemo的Java項目:咱們在TDDDemo項目中,把鼠標放到項目名TDDDemo上,單擊右鍵,在彈出的菜單中選定New->Source Folder新建一個測試目錄test,咱們把鼠標放到test目錄上,單擊右鍵,在彈出的菜單中選定New->JUnit Test Case新建一個測試用例類MyUtilTest,
咱們增長第一個測試用例testNormal,注意測試用例前必定要有註解@Test,測試用例方法名任意,輸入如下代碼:
import org.junit.Test;
import junit.framework.TestCase;
public class MyUtilTest extends TestCase {
@Test
public void testNormal() {
assertEquals("不及格", MyUtil.percentage2fivegrade(55));
assertEquals("及格", MyUtil.percentage2fivegrade(65));
assertEquals("中等", MyUtil.percentage2fivegrade(75));
assertEquals("良好", MyUtil.percentage2fivegrade(85));
assertEquals("優秀", MyUtil.percentage2fivegrade(95));
}
}
輸入完畢
紅叉說明代碼存在語法錯誤,緣由很簡單,MyUtil類還不存在,類中的percentage2fivegrade方法也不存在,咱們在TDDDemo的src目錄中新建一個MyUtil的類,並實現percentage2fivegrade方法
如今測試代碼沒有語法錯誤了,咱們把鼠標放到MyUtilTest.java上,單擊右鍵,選擇Run as->JUnit Test
測試結果出現了一個綠條(green bar),說明測試經過了。
TDD的編碼節奏是:
(二)面向對象三要素
(1)抽象
(2)封裝、繼承與多態
(三)設計模式初步
(1)S.O.L.I.D原則
面向對象三要素是「封裝、繼承、多態」,任何面向對象編程語言都會在語法上支持這三要素。如何藉助抽象思惟用好三要素特別是多態仍是很是困難的,S.O.L.I.D類設計原則是一個很好的指導:
(四)練習
1使用TDD的方式設計關實現複數類Complex。
2.實驗報告中統計本身的PSP(Personal Software Process)時間
步驟 |
耗時 |
百分比 |
需求分析 |
30min |
12.5% |
設計 |
60min |
25% |
代碼實現 |
60min |
25% |
測試 |
60min |
25% |
分析總結 |
30min |
12.5% |
3. 實現要有僞代碼,產品代碼,測試代碼。
4.總結單元測試的好處
實驗截圖
(三)設計模式初步
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,依賴倒置原則)
OCP是OOD中最重要的一個原則,OCP的內容是:
software entities (class, modules, function, etc.) should open for extension,but closed for modification.
軟件實體(類,模塊,函數等)應該對擴充開放,對修改封閉。
3、遇到的問題及解決方法
出現的問題:
1.在單元測試的編寫中,因爲網絡信號不穩定,並且虛擬機運行很是慢,以至此次實驗很是耗費時間,只能慢慢一步一步截圖
2.此次實驗中因爲得知實驗樓截圖只能截4張,所以選擇用本身的截圖工具進行截圖
3測試代碼的編寫過程當中由於不太熟悉程序,編寫因此測試代碼出現了不少問題,花費了不少時間去修改。
4、實驗收穫
本次實驗讓我更進一步的瞭解了java這一門課程的難度,對於我這種「差生」可能學習起來仍是有一點吃力的。
此次實驗讓我體會到了面向對象的編程工具和麪向對象的編程工具之間的區別,面向對象咱們經過封裝對象,能夠經過建模的方式進行代碼編寫,這樣可使咱們將更大的精力用在類的設計而非代碼編寫上。
(三)設計模式初步
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,依賴倒置原則)
OCP是OOD中最重要的一個原則,OCP的內容是:
software entities (class, modules, function, etc.) should open for extension,but closed for modification.
軟件實體(類,模塊,函數等)應該對擴充開放,對修改封閉。
3、遇到的問題及解決方法
出現的問題:
1.在單元測試的編寫中,因爲網絡信號不穩定,並且虛擬機運行很是慢,以至此次實驗很是耗費時間,只能慢慢一步一步截圖
2.此次實驗中因爲得知實驗樓截圖只能截4張,所以選擇用本身的截圖工具進行截圖
3測試代碼的編寫過程當中由於不太熟悉程序,編寫因此測試代碼出現了不少問題,花費了不少時間去修改。
4、實驗收穫
本次實驗讓我更進一步的瞭解了java這一門課程的難度,對於我這種「差生」可能學習起來仍是有一點吃力的。
此次實驗讓我體會到了面向對象的編程工具和麪向對象的編程工具之間的區別,面向對象咱們經過封裝對象,能夠經過建模的方式進行代碼編寫,這樣可使咱們將更大的精力用在類的設計而非代碼編寫上。
(三)設計模式初步
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,依賴倒置原則)
OCP是OOD中最重要的一個原則,OCP的內容是:
software entities (class, modules, function, etc.) should open for extension,but closed for modification.
軟件實體(類,模塊,函數等)應該對擴充開放,對修改封閉。
3、遇到的問題及解決方法
出現的問題:
1.在單元測試的編寫中,因爲網絡信號不穩定,並且虛擬機運行很是慢,以至此次實驗很是耗費時間,只能慢慢一步一步截圖
2.此次實驗中因爲得知實驗樓截圖只能截4張,所以選擇用本身的截圖工具進行截圖
3測試代碼的編寫過程當中由於不太熟悉程序,編寫因此測試代碼出現了不少問題,花費了不少時間去修改。
4、實驗收穫
本次實驗讓我更進一步的瞭解了java這一門課程的難度,對於我這種「差生」可能學習起來仍是有一點吃力的。
此次實驗讓我體會到了面向對象的編程工具和麪向對象的編程工具之間的區別,面向對象咱們經過封裝對象,能夠經過建模的方式進行代碼編寫,這樣可使咱們將更大的精力用在類的設計而非代碼編寫上。