OO學習最終總結

Jisoo·Lisa發表於2020-06-05

0.前言:本次主要是針對第三階段的三次作業以及整個課程學習的總結,這三次作業主要是針對對程式進行重構使得程式可以對功能進行擴充套件的訓練以及對類的設計,所以在此闡述在練習過程中的問題以及感悟。

1.作業總結

  1. 三次作業的難度相差不大,但由於這三次沒有給出參考UML類圖,全部類的設計都需要自己思考設計所以會比給了類圖的相對麻煩一點。前兩個階段的作業主要注重基礎知識的訓練以及理解,如繼承封裝、多型以及類的聚合等等。該階段的三次作業都是自己設計類並且對程式進行重構使得可以對功能進行擴充套件,加深對單一職責原則和“開-閉”原則以及對物件導向過程的理解和體會。層層深入,讓我們從中學習以及理解。

  2.第一次作業的雨刷程式功能擴充套件設計相對比較麻煩的就是功能擴充套件部分,需要用到抽象、介面、繼承,整個類的設計也是利用類的單一職責將每一部分封裝成一個類並且繼承各自的抽象類,且一個類只負責該類的職責,類與類之間的聚合來實現整個過程,加深了我對單一職責和“開-閉”原則的理解。Dial類、Lever、Brush類、Agent類各自繼承自自己的抽象類,如果不用繼承就會發現其實他們之間很多程式碼都是重複的,用了繼承給他們之間建立一個聯絡,這樣就可以減少程式碼的冗餘,而且也能更加體現他們之間的關係,更加符合實際,且能夠對功能進行擴充套件,需求變了只需再new一個新的Agent類就可以了,不會影響之前的需求,這就是“開-閉”原則。接下來的第二次是自己設計類實現統計Java程式中關鍵詞的出現次數,通過這次作業加深了我對於字串的相關方法以及知識點的學習以及運用,還有讓我對於物件導向的設計有了更深的體會。第三次在第二次的基礎上更加麻煩一點,需要使用堆疊以及正規表示式,用正規表示式來判斷表示式的合法性,用堆疊來計算表示式的值,並且對設計做修改,將它們繼承抽象類實現擴充套件性和複用性,這就是對修改關閉,對擴充套件開放的“開-閉”原則。總之,三次作業最主要的就是學會自己設計類,以及運用“開-閉”原則使程式的功能完善且實現擴充套件性。

  3.第一次作業的雨刷程式功能擴充套件設計中總是報空指標和陣列越界的錯誤,這兩個錯誤相信並不少見,經常都能碰見,是真的煩人。所以異常處理的優勢就凸顯出來了,一個異常處理就可以解決,讓他遇到異常跳出繼續執行下面程式碼,不對異常處理,可以規避很多異常情況,非常方便。

  第二次作業的統計Java程式中關鍵詞的出現次數一開始我始終通不過全部關鍵字測試,後來發現我的53個關鍵字中有一個不是關鍵字,也就是關鍵字找錯了一個才導致這個測試點過不了。還有兩種註釋的測試也沒過,幾次檢查發現是少考慮了/**這種情況。最後一個正常測試到最後也過不了,目前還沒發現是哪裡的問題,各種測試都沒有問題,但是就是過不了該測試點,很是無奈。

  第三次作業的表示式求值開始的時候堆疊使用不太好,總是報錯,不然就是出現空棧的錯誤,一次次嘗試,一次次修改,終於能夠正常執行了,由於之前的多次作業都運用過正規表示式判斷,所以在判斷過程花費的時間不多,也相對熟練了一點,總體上也沒有很大問題就寫完了這次作業。

  4.三次花費時間比例為2:6:2。第二次花費時間主要是在最後一個測試點上反覆修正,仍然沒有發現到底問題出在哪。

  5.程式設計首先就得仔細看清楚需求分析,這個很有必要,看的越仔細,後期就會花更少的時間來檢查這方面的問題;其次需要屢清楚你要做的是什麼,怎麼做,需要什麼,怎麼分解成一個個小問題,把這些小問題逐個封裝成單獨的類,再通過介面以及它們之間的聯絡建立相應的關係,完成初步設計,在對其針對單一職責和“開-閉”原則對設計作進一步的調整,達到複用性高,設計嚴謹;再者就是需要提前對異常情況做預判以及處理,亦或者規避,保障程式在任何情況都能正常執行,因為測試的工作總是巨大而且相對片面的,並不能完全檢測出所有的異常情況,所以及時做一些異常處理的規避還是很有必要的。當然保證功能的完整正常還不夠,還需要對程式進行改善,對功能設計分工明確,使得程式碼的能夠實現複用性以及可擴充套件性,減少冗餘。

2.OO設計心得

  1.每一個單獨的部分通過封裝成類,封裝的類可以通過繼承抽象類或者介面來實現多型性。多型必須要求有繼承,抽象類就是為了繼承而生,而它們的基礎都是類的封裝。

  2.單一職責原則:一個類就專注地做一件事。“開-閉”原則:對修改關閉,擴充套件開放,就是當某個類的方法不滿足需求了,不會對其方法進行修改,而是建立一個抽象類讓其繼承於該抽象類,再另外寫一個子類繼承它來實現新的需求。

  3.物件導向的思想就是在解決問題過程中分解成一個個小問題,再把這些小問題作為一個單獨的個體來對它們進行處理,它們有自己的功能和狀態以及與其他個體之間的聯絡,然後它們之間相互作用來解決問題。這樣的設計方法比較符合現實,其實每個大難題都是由一個個小問題組成的,所以只要把它們分解成小問題,再逐個解決就可以了。這也是類似的道理。

  4.類主要還是要堅持單一職責原則,一個類就幹一件事,分工明確才有秩序,不會亂成一團。當然也要考慮到“開-閉”原則,增強程式碼複用性以及擴充套件性,使得設計更加靈活多變。

3.測試的理解與實踐

  1.通過測試可以檢查程式的功能是否能在各種狀況下正常執行,保障功能正常執行,當然測試的目的並不是單純的為了找錯誤,而是通過分析錯誤產生的原因和錯誤的發生趨勢,可以幫助專案管理者發現當前軟體開發過程中的缺陷,以便及時改進,這樣可以保障程式碼的質量以及程式功能的穩定。只有編碼質量有保證,功能才能穩定,才能受到廣大使用者的好評。所以測試是保障編碼質量的重要手段。

  2.使用Junit進行程式的測試是可行的,它可以通過編寫一系列的測試來對專案所有的介面或者方法進行單元測試,啟動後,自動化測試,並判斷執行結果, 不需要人為的干預。只需要檢視最後結果,就知道整個專案的方法介面是否通暢。並且各個測試之間是相互獨立,互不干擾的。所以使用Junit進行測試還是一個不錯的可行方法。

4.課程收穫

   這三個階段的OO程式設計訓練,一次次的加深我對其思想和設計的理解和體會,更加理解物件導向的含義。在練習過程中也會碰到很多問題,逐步認識到自己的不足 。學習到OO程式設計需要始終遵循單一職責原則和“開-閉”原則,這樣可以更好地檢查程式碼的錯誤以及使你設計的程式碼有更好的複用性和擴充套件性,減少程式碼冗餘,保證程式碼的質量。測試也是不能少的,它可以幫你更加全面的檢查程式碼功能問題,減少自己逐篇檢查程式碼邏輯的時間和工作量。

 5.課程學習總結

  課程對每個重要的知識點進行有針對性的學習和訓練,讓我們在訓練中學習理解,能夠學以致用,更好的掌握它們。大體的知識基礎有了後,接下來就是學習新的知識和進一步完善每一次設計,保證程式碼的擴充套件性和靈活性,讓我們對於物件導向有了更深的理解和感悟。該門課程區別於其他課程,是一個需要日積月累的程式碼量堆積起來的,達到一定量才會對OO程式設計有更深一層的理解和感悟,光靠理論知識的堆積是遠遠不夠的,當然也要是有質量的程式碼量才能夠提高自己的程式設計水平。我們在課堂上能夠學到的,學進去的也不太多,仍然需要課後的學習積累以及訓練才能更好的學習該門課程。