天天看點

OO第一單元總結OO第一單元總結

OO第一單元總結

1. 基于度量來分析自己的程式架構

  • 第一次作業
    • 第一次作業為簡單多項式的求導,我的設計由SimplePoly, ComuptePoly類組成。ComputePoly通過正則比對單個項,并将其送入SimplePoly中進行合并構造形如a*x^b的簡單項,ComputePoly中定義簡單項構成的Arraylist。求導時,對每一項調用SimplePoly的deriv()方法,傳回其導數項,存儲在一個新的Arraylist中。最終對此Arraylist合并同類項,并逐項調用SimplePoly的toString方法輸出。
    • 類圖
      OO第一單元總結OO第一單元總結
    • 複雜度
      OO第一單元總結OO第一單元總結
  • 第二次作業
    • 第二次作業增加了簡單三角函數sin(x)和cos(x),我的設計如下
      • 簡單函數類:Cosine,Sine, Power 分别定義由字元串作為參數的構造器方法,傳回字元串的求導方法deriv(), 傳回字元串的toString()
      • Item: 執行個體域由前述的三個簡單函數對象及Biginteger型系數組成,接受由加減号作為分割的字元串類型的項作為參數,通過正則解析并送至底層函數類。deriv()方法用于求導: 對形如u*v*w的三個對象的乘積,分别調用他們的deriv() 和toString(),得到字元串類型的三項之和,将這三項分别通過Item的構造器執行個體化,并存儲在一個Arraylist中傳回。
      • Poly: 定義由Item組成的Arraylist: allItem,通過正則對表達式進行拆分,得到的每一項通過送入Item類構造,求導時,周遊allItem,調用Item的deriv()方法,得到其導數組成的arraylist。
    • 類圖
      OO第一單元總結OO第一單元總結
    • 複雜度
      OO第一單元總結OO第一單元總結
OO第一單元總結OO第一單元總結
  • 第三次作業
    • 思路:第三次作業在第二次作業的基礎上增加了表達式因子,并允許因子嵌套在三角函數因子裡面,對此,我增加了factor類作為簡單函數類的父類,并在Sine,Cosine類中定義Expression類型的selfVar作為它的自變量,求導時通過遞歸進行。
    • 類圖
      OO第一單元總結OO第一單元總結
    • 複雜度
      OO第一單元總結OO第一單元總結
OO第一單元總結OO第一單元總結

2. 分析自己程式的bug

  • 第一次作業:在用正則進行拆項之前調用了String.trim()方法,導緻對于表達式開頭或結尾的非法空白字元無法識别
  • 第二次作業:在化簡結果時,為縮短表達式長度,将正項提前,但我在周遊尋找正項之後,忘記判斷是否含有正項,導緻當表達式的導數隻有負項時程式出現IndexOutOfBoundsException
  • 第三次作業:本次作業由于我沒有對結果進行化簡,并且對所有的表達式強制添加括号,在強側和互測階段均未發現bug, 但輸出結果又臭又長,并且幾乎毫無擴充性。

3. 分析自己發現别人程式bug所采用的政策

  • 通過各個層次表達式的形式,構造正确的表達式測試集,并在此測試集上稍作改動構造非法測試集
  • 通過調試,觀察其他同學處理表達式的大緻步驟,重點讀構造器部分

4. Applying Creational Pattern

​ 第三次作業毫無擴充性,且各級求導方法均傳回字元串,應該将輸入與化簡輸出單獨封裝。

轉載于:https://www.cnblogs.com/okawaikoto/p/10610560.html