課程:Java程序設計 班級:1652 姓名:李天林 學號:20165207
實驗日期:2018年4月16日 實驗序號:二java
根據要求,個人學號07%6=1,我須要對系統進行擴充使之支持Short類。
首先,經過閱讀,我對設計工廠模式,有了必定的理解,其中,Data類是抽象類規定了它的子類有顯示取值的功能,抽象類Factory規定它的子類要生成Data類,生成Data類過程當中經過對子類的上轉型操做來讓返回的子類類具備Data類的子類重寫的方法。
因此要支持Short的話,我應增長Data類的子類Short,再增長Factory類的子類shortFactory。這樣工廠就具有了建立Short類的上轉型對象使之得到顯示short型變量的值的能力。
最後爲了輸出short的值,我還須要在主類中修改使用上面那些類的語句。UML圖大體以下
在程序中添加代碼以下:
測試運行獲得輸出結果5207:設計模式
題目要求的方法包括兩個重載的構造方法complex、四個分別爲加減乘除的方法、以及重寫的兩個方法:輸出複數的方法toString以及判斷是否與另外一個複數相等的方法Equals。按照要求編寫出以下的測試代碼,至關於爲個人complex類給出一個標準:
而後,在complex類中加入要求的這些屬性和方法(中間的調試錯誤的過程記錄在了下面的問題記錄裏):
在提交點4,運行complexTest測試其中的方法結果是否正確。單元測試
以前我在工廠模式中添加short類時,對其用UML圖進行建模
而後下面是實驗二教程中用來講明多態的例子,Dog和Cat分別是抽象類Animal的子類,各自實現了Animal的「叫」的方法測試
(a+bi)/(c+di)
這個分式分子分母同乘(c-di)就可以獲得除法的結果插件
(ac-bd)/(c^2+d^2)+(ad+bc)i/(c^2+d^2)
在程序中我建立了一個新的複數對象b來表示上面分子分母同乘的(c-di)。
在個人測試用例(1+2i)/(3+3i)中,複數對象b就應該表明的是(3-3i)。在上面截下來的運行結果裏能夠看到,第二次assertEquals時,這個b對象就不對了,算出來的結果天然就不是1/6而是0.5。設計
看來還得回去分析程序,在提交剛結束的時候,我以爲問題就出如今我建立新複數對象b的方式上:
我但願b的實部與被除數的實部相等,b的虛部與被除數的虛部相反。因而先把被除數a的引用賦給了b,而後再把b的虛部取相反數。但這種操做其實就是把a當成b操做,a不是在和一個能給本身「有理化」的另外一個和本身不同的複數b相乘,而是在和本身乘。3d
我意識到了操做引用不當給我帶來的問題,再也不使用這種方法建立對象b:
單獨測試了除法,輸出正確,測試也經過了:調試
而後,這是個人與雲班課無緣的提交點4和5的截圖
code
此次影響我實驗完成時間主要有幾個問題,在static的環境裏調用非static的方法,由於新的對象沒有建立時只能經過類名調用static方法,調用非stati是非法的;對對象的引用進行不當的賦值操做致使個人程序沒法正確進行計算;還有就是博客裏面的要求讀的不認真。這幾個問題大多涉及基礎,我對前面幾章的內容自己就掌握不牢或者有些淡忘,提示我要常常複習。另外除了調錯的能力以外,此次實驗我還有一些我認爲有用的收穫,好比用TDD的方式設計程序先給出一個標準,與直接設計程序相比能夠避免設計力度過分或者不夠,以及「工廠」的設計模式來知足S.O.L.I.D的原則orm