1. 程式人生 > 實用技巧 >面向物件暑期課程總結

面向物件暑期課程總結

面向物件暑期課程總結

未完成作業原因及改進

在春季學期中,未完成的作業是第三單元第三次作業和第四單元的作業。

第11次作業

未完成原因

在第三單元的前兩次作業中,由於沒有考慮到效能的問題,在儲存資料時使用了Arraylist,導致第二單元強測沒有通過,程式碼重構難度比較大。而且對於圖的一些演算法缺少了解,在圖方面的知識掌握得不是很好,因此並沒有通過這次作業。

改進

UML類圖

難點處理

  • queryMinPath(int id1, int id2):Dijkstra演算法
    • 容器初始化
      • distance:用來儲存目前每個節點到初始節點的最短路徑長度。
      • prev:用來儲存已經瀏覽過的節點。
    • 遍歷並更新各節點到初始節點的最短距離
      • 該節點不在prev中,則distance=父節點的distance+value。
      • 該節點在prev中,且distance>父節點的distance+value,則更新。
      • 該節點在prev中,且distance≤父節點的distance+value,則保持不變。
    • 返回id為id2的節點的distance
  • queryStrongLinked(int id1, int id2)
    • 呼叫isCircle方法進行第一次深度優先遍歷,判斷是否連通,並將訪問過的節點儲存到visited容器中。
    • 進行第二次深度優先遍歷,跳過訪問過的節點,若id為id2的節點為id1的相鄰節點,則跳過其繼續遍歷。

第15次作業

未完成原因

第四單元的程式碼閱讀量比較大,同時也需要充分的理解關於UML圖的知識。當時並沒有完全理解整個程式碼的架構以及各個UML元素的使用方法,所以在實現方面出現了一些困難。

改進

UML類圖

難點處理

  • R001:重名檢查
    • 出現的bug:會對名稱為null的元素進行重名報錯
    • 解決方法:在遍歷元素時遇到名稱為null的元素直接跳過
  • R004:任何一個類不能重複實現同一個介面
    • 出現的bug:在方法執行過程中會出現死迴圈,未查明具體原因
    • 解決方法:重構該方法
    • 重構思路:之前的思路為從介面開始從上到下尋找實現該介面的方法,重構之後改為了從每個方法開始從下到上尋找該方法實現的介面。

收穫和進步

通過暑期課程的學習,我彌補了春季學期知識上的一些漏洞,對於java程式碼的閱讀能力和編寫能力都得到了進一步的鍛鍊。同時,我對自己在資料結構方面的知識進行了查漏補缺,尤其是在圖這部分的知識,通過老師的講解和指點,明白了問題所在和自己應該著重去學習的部分。

對補給站的建議

可以增開每單元前兩次作業的評測。雖然我們在補給站需要完成的作業只有最後一次,但是我們在完成時依然需要和春季學期一樣以遞進的方式完成。增開前兩次作業的評測可以幫助我們提早發現一些bug,從而及時解決。

心得體會

在這門課程中我最大的收穫就是培養了面向物件的設計思維,明白了設計與架構在程式碼工程中的重要性,好的架構可以讓後續的工作變得事半功倍。當然,我也在一次次的作業中鍛鍊了自己對於程式碼的閱讀能力和編寫能力。

在課程中我除了收穫以外,也得到了一些教訓。在春季學期中做事拖拖拉拉的習慣和麵對問題產生的畏難情緒讓我沒能通過後面幾次的作業。以前的知識掌握得不牢固的問題也在越來越難的作業中展現了出來。在之後的學習中要腳踏實地地學習好應該學習的知識,以更好的心態去面對之後遇到的問題。

最後感謝老師和助教們的辛勤付出,也願OO這門課可以越來越好。