這個單元寫**的時候在面向過程的方便和物件導向的清晰架構中反覆橫跳,導致最後寫出來的東西亂七八糟。
第一次作業
第一次作業只涉及到了uml的類圖。定義了myclass
、myinte***ce
、myoperation
三個類,儲存attribute等資訊。我的想法是將一條條資訊即乙個個umlelement
分類存放起來,希望達到樹形的資料結構,即class
下有attribute
operation
等。但是實際寫的時候發現這樣有兩個缺點,首先是資料的初始化變得很不方便,比如operation
定義時parent不一定被定義,需要多次遍歷element
才能不出現nullpointererror
,從類圖中也可以看到myclass
中使用到了myoperation
,結構還是比較複雜的;其次是attribute
等作為物件的屬性時,呼叫和修改就沒有那麼方便。
在儲存類與類的關係上,我使用了hashmap,儲存點到點的繼承、實現關係(看上去挺方便的但是為第三次作業的翻車埋下伏筆)還有做不太好的地方是myclass
沒有對umlclass進行繼承或儲存。
第二次作業
第二次作業增加了狀態圖與順序圖,實現的思路與第一次作業類似(奇怪的**又增加了)
這兩張圖中的元素比較少,關係也比較簡單清晰,就沒有自定義類,不過理清楚不同元素之間的關係還是有點複雜的。
第三次作業
這次作業成功在前兩次歷史遺留的基礎上翻了車。有效性檢查這裡感覺還挺麻煩的...
主要問題出在r003和r004上。r003需要輸出所有在環上的點但是並不需要確定每個點在哪個環上,所以對於每個點,只需要找到乙個點滿足這兩個點能互相到達那麼這個點一定在答案集合裡且在答案集合裡的點都滿足這個條件。
在檢查uml009的時候圖中已經沒有迴圈繼承的情況出現了,所以從每個點開始對圖進行一次遍歷即可,如果走到了已經走過的點說明起點出現了重複繼承。
翻車原因是實現的時候漏了一些**...以及沒有考慮到a extends b, b
這樣的情況。
在四個單元的學習中,越來越能get到oo的思想,也學到了不同的架構設計方式。
後兩天個單元使用的是課程組提供的架構,閱讀官方**包也讓我學到了很多。
主要的測試方法就是生成資料+正確性檢查。
生成資料
正確性檢查
單元檢查
這個方法在第三第四單元中有比較好的作用,可以對方法進行逐一測試,以驗證在不同情況下的正確性。
在四個單元中,我的測試其實一直做的不夠充分,有事情比較多的原因也有盲目自信..尤其是第四單元。不過在這四個單元的測試中也學到了很多,從一開始的啥也不會到慢慢的能夠自己生成資料進行檢查,從ctrl c + ctrl v 到cmd到bat...
實驗課有時候感覺對課內沒有特別大的幫助,比如最後一次實驗課,但是電梯單元的實驗就讓我對多執行緒有了更清晰的理解。
感覺公測ddl可以適當往後移一點,互測時間縮短一點,畢竟後來大家都對hack沒啥興趣了
似乎這門課有的人越學越容易,有的人覺得越學越難,或許可以對有困難的同學提供一些幫助,不然就會陷入不會寫就更不想寫的惡性迴圈。比如可以公開一部分官方實現或者優秀作業,我個人非常想看到大佬們是如何優美地實現功能,感覺這樣可以有更多的思考和進步。
在oo中學到了很多,希望oo越來越好!
OO第四單元總結
第一次作業我將umlelement進行分類,新建乙個封裝類uml,用介面和類進行例項化 新建乙個operation類例項化operation元素。在myumlinteraction的初始化,先找到所有的類和介面例項化uml。然後找到所有的方法,例項化operation類,並且將類根據parentid...
OO第四單元總結
從這四個單元來看,除了第三單元對於架構的感受不深,兩外三個單元對架構的要求是比較高的。雖然這三個單元內容主題完全不同,但設計架構的目標是一樣的,就是盡可能地把現實中的邏輯細緻地還原表達出來。所以oo是什麼?j同學在一次研討課上表示oo在他看來就是將資料和方法集中起來封裝,我認為這個表述沒有觸及到oo...
OO第四單元總結
使用乙個類idtree來記錄各個元素之間的父子關係,類myumlinteraction用來實現其餘所有功能。三次作業下來需要實現二十多個方法,類myumlinteraction寫了1000行,架構非常混亂,沒有章法。說白了,這次作業和第三單元一樣,還是圖論,出現了種種問題,暴露出了自己資料結構基礎的...