實驗二 java物件導向程式設計

來源:互聯網
上載者:User

標籤:

一.實驗內容1. 初步掌握單元測試和TDD2. 理解並掌握物件導向三要素:封裝、繼承、多態3. 初步掌握UML建模4. 熟悉S.O.L.I.D原則5. 瞭解設計模式二.實驗要求1.沒有Linux基礎的同學建議先學習《Linux基礎入門(新版)》《Vim編輯器》 課程2.完成實驗、撰寫實驗報告,實驗報告以部落格方式發表在部落格園,注意實驗報告重點是運行結果,遇到的問題(工具尋找,安裝,使用,程式的編輯,調試,運行等)、解決辦法(空洞的方法如“查網路”、“問同學”、“看書”等一律得0分)以及分析(從中可以得到什麼啟示,有什麼收穫,教訓等)。報告可以參考範飛龍老師的指導3. 嚴禁抄襲,有該行為者實驗成績歸零,並附加其他懲罰措施。

4. 請大家先在實驗樓中的~/Code目錄中用自己的學號建立一個目錄,代碼和UML圖要放到這個目錄中,中沒有學號的會要求重做,然後跟著下面的步驟練習。

實驗報告中統計自己的PSP(Personal Software Process)時間

步驟

耗時

百分比

需求分析

1h

30

設計

2h

40

代碼實現

30mins

10

測試

30mins

10

分析總結

30mins

10

 三.實驗步驟(一)單元測試(1) 三種代碼

編程是智力活動,不是打字,編程前要把幹什麼、如何幹想清楚才能把程式寫對、寫好。與目前不少同學一說編程就開啟編輯器寫代碼不同,我希望同學們養成一個習慣,當你們想用程式解決問題時,要會寫三種碼:

  • 虛擬碼
  • 產品代碼
  • 測試代碼

我們通過一個例子說明如何寫這三種代碼。

需求:我們要在一個MyUtil類中解決一個百分製成績轉成“優、良、中、及格、不及格”五級製成績的功能。

1先寫虛擬碼,用特定程式設計語言翻譯一下,就是可用的產品代碼了,當然,我們在這要選用Java.

2測試案例是為某個特殊目標而編製的一組測試輸入、執行條件以及預期結果,以便測試某個程式路徑或核實是否滿足某個特定需求。這裡我們的測試輸入是“50”,預期結果是“不及格”。

3一般代碼在邊界處最容易出錯,我們還沒有測試邊界情況,我們對輸入為“0,60,70,80,90,100”這些邊界情況進行測試,發現邊界情況中輸入100時有一個Bug。我們修改MyUtil.java,把判斷優秀的條件中包含輸入為100的情況。

 

 

(2) TDD(Test Driven Devlopment, 測試驅動開發)

基於TDD,我們不會出現過度設計的情況,需求通過測試案例表達出來了,我們的產品代碼只要讓測試通過就可以了。

1開啟Eclipse,單擊File->New->Java Project建立一個TDDDemo的Java項目

2在TDDDemo項目中,把滑鼠放到項目名TDDDemo上,單擊右鍵,在彈出的菜單中選定New->Source Folder建立一個測試目錄test,

3把滑鼠放到test目錄上,單擊右鍵,在彈出的菜單中選定New->JUnit Test Case建立一個測試案例類MyUtilTest

4在TDDDemo的src目錄中建立一個MyUtil的類,並實現percentage2fivegrade方法,原因是MyUtil類還不存在,類中的percentage2fivegrade方法也不存在

5把滑鼠放到MyUtilTest.java上,單擊右鍵,選擇Run as->JUnit Test

6出現了一個綠條(green bar),說明測試通過

(三)設計模式初步

(1)S.O.L.I.D原則

物件導向三要素是“封裝、繼承、多態”,任何物件導向程式設計語言都會在文法上支援這三要素。如何藉助抽象思維用好三要素特別是多態還是非常困難的,S.O.L.I.D類設計原則是一個很好的指導。

(2)模式與設計模式

模式是某外在環境(Context) 下﹐對特定問題(Problem)的慣用解決之道(Solution)。模式必須使得問題明晰,闡明為什麼用它來求解問題,以及在什麼情況下有用,什麼情況下不能起作用,每個模式因其重複性從而可被複用,本身有自己的名字,有可傳授性,能移植到不同情景下。模式可以看作對一個問題可複用的專家級解決方案。 電腦科學中有很多模式:

GRASP模式

分析模式

軟體體繫結構模式

設計模式:建立型,結構型,行為型

管理員模式: The Manager Pool 實現模式

介面設計互動模式

 最重要的是設計模式,在物件導向中設計模式的地位可以和面向過程編程中的資料結構的地位相當。

(3)設計模式實樣本

設計模式(design pattern)提供一個用於細化軟體系統的子系統或組件,或它們之間的關係圖,它描述通訊組件的公用再現結構,通訊組件可以解決特定語境中的一個設計問題。

 

(四)練習

1使用TDD的方式設計關實現複數類Complex。

//虛擬碼 //複數類 類有虛部實部 複數的加法運算 複數的減法運算 複數的乘法運算 複數的除法運算

 //產品代碼 public class ComplexDemo { // main方法 public static void main(String[] a) {   Complex b = new Complex(2, 5);   Complex c = new Complex(3, -4);   System.out.println(b + "+" + c + "=" + b.add(c));   System.out.println(b + "-" + c + "=" + b.minus(c));   System.out.println(b + "*" + c + "=" + b.multiply(c));   System.out.println(b + "/" + c + "=" + b.divide(c)); } }

// Complex類 class Complex { private double m;// 實部 private double n;// 虛部

public Complex(double m, double n) {   this.m = m;   this.n = n; }

// add public Complex add(Complex c) {   return new Complex(m + c.m, n + c.n); }

// minus public Complex minus(Complex c) {   return new Complex(m - c.m, n - c.n); }

// multiply public Complex multiply(Complex c) {   return new Complex(m * c.m - n * c.n, m * c.n + n * c.m); }

// divide public Complex divide(Complex c) {   double d = Math.sqrt(c.m * c.m) + Math.sqrt(c.n * c.n);   return new Complex((m * c.m + n * c.n) / d, Math.round((m * c.n - n * c.m) / d)); }

public String toString() {   String rtr_str = "";   if (n > 0)    rtr_str = "(" + m + "+" + n + "i" + ")";   if (n == 0)    rtr_str = "(" + m + ")";   if (n < 0)    rtr_str = "(" + m + n + "i" + ")";   return rtr_str; } } //測試代碼

public static ComplexTest{ public static void main(String[] args){ class Complex {

private double m;// 實部 private double n;// 虛部

public Complex(double m, double n) { this.m = m; this.n = n; }

public String toString() { String rtr_str = ""; if (n > 0) rtr_str = "(" + m + "+" + n + "i" + ")"; if (n == 0) rtr_str = "(" + m + ")"; if (n < 0) rtr_str = "(" + m + n + "i" + ")"; return rtr_str;   }

}

}

}

 

四.實驗感想

這次實驗比起實驗一我覺得有難度多了,實驗一的時候並沒有在實驗樓裡面做,所以還不清楚使用的要求,在這次實驗總算是進入實驗樓了,剛開始用的時候不習慣,但用了之後發現其實很方便,這次實驗雖然難,花了很多時間,但這樣比起視頻和課本能學到更多東西。

五.遇到的問題及解決方案

1.實驗樓進去了但實驗2點開沒反應,求助老師之後發現是瀏覽器的問題,換了Firefox之後就好了。

2.UML不知道在哪裡開啟,問了同學之後知道是點終端虛擬機器,然後就出來了。

  

 

 

 

實驗二 java物件導向程式設計

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.