OO第四次博客做業

OO第四次博客做業java

1、總結本單元兩次做業的架構設計  git

(一)第一次UML做業正則表達式

 先po一個類圖來從總體角度看一下類的設計:編程

從類圖能夠看出來,在類的設計上,我除了Main類之外,額外加入了四個類,其中MyUMLInteraction類仍是起到主要的解析做用,而後MyUMLClass、MyUMLInterface和MyOperation都是輔助查詢的類。bash

而後在具體細節實現上,主要就是MyUMLInteraction類承擔了大部分的任務,我使用了200多行代碼來用做構造函數,經過兩個for循環來解析出全部須要的類型,這個類的數據成員是一大堆HashMap用於存儲各類UML圖的類型,方便查找。多線程

而後須要我實現的各個指令的成員函數我都是在這個類中實現的,由於個人各個元素都是直接存儲在各個HashMap中的,因此各類查詢只能直接在這個類具體實現。架構

其餘三個類都是存儲一些須要的信息比較複雜,要單獨統計或者單獨存儲的。函數

(二)第二次UML做業工具

 也先給出一個類圖看一下總體的結構:單元測試

能夠看出來跟第一次的架構設計幾乎徹底同樣。這種簡單粗暴的設計直接致使了個人MyUMLGeneralInteraction類的行數高達1000行(在沒有調整checkstyle以前),由於我全部的方法都是直接在這個類中實現的,而後構造函數也是高達200多行,全部的須要存儲的元素我都幾乎存在了這個類的HashMap中,而後其餘5個類就是輔助查詢的,在遇到一些具體針對某類元素的指令時能夠在構造函數中統計存儲好,方便在方法實現時使用。

架構的細節跟第一次做業幾乎沒有區別,關於類的查詢徹底複製的第一次做業(這個我不知道怎麼使用繼承來複用上次的代碼)。而後剩下的一些指令涉及到圖的比較複雜的指令,我都是使用遞歸實現的,所以也出現了一些難以預料的bug。

2、總結本身在四個單元中架構設計及OO方法理解的演進  

(一)第一單元

第一單元其實主要是摸索麪向對象思惟方式,因此架構設計幾乎是沒有,能把功能分攤到不一樣的class類對於我來講都是一件很是艱難的事情。

我第一次做業就是面向過程的寫法,一main到底,徹底沒有關於類的解析的考慮。

第二次做業天然要重構,個人第二次做業開始考慮將任務分配到Poly和Term中,細分每個部分。

第三次做業也是這個思路,只不過更加複雜,我使用遞歸的方法來完成任務。

感受第一單元我對面向對象的這種編程思想了解的不多,架構設計幾乎是零。

(二)第二單元

到了第二單元,我以爲我在一些同窗發的帖子裏我獲得了一些啓示,尤爲是第三次做業中的三部電梯,我是贊成建模的,在細節上各有不一樣,這是在構造的時候須要考慮的事情,而後調度器、輸入都是單獨的類,將電梯這些所有分開單獨建模,結構上清晰了不少。

其實第二單元是我對OO中的面向對象思惟理解跨越最深的一步,由於第二單元很是適合這種分開建模的方式,使用起來駕輕就熟。

(三)第三單元

第三單元我完成的狀況不是很好,前兩次做業都是一些很細小的地方出問題,而後到了第三次做業的圖,我真的很暈,而後就沒能交上去。

對於第三單元的架構設計,我就是按照課程組的要求來建的類,本身的架構設計考慮不多。

(四)第四單元

實際上第四單元是很是開放的單元,很是適合用來訓練OO編程思惟,可是我本來這方面比較薄弱,而後加上考試之類的,我又比較笨,我寫完就須要不少時間,就沒有花費太多時間在架構設計上。我是採用的很是粗暴的方式(詳情見一中個人這兩次架構設計)。可是對於課程組下發的標程我仔細研究了一下他的架構設計,感受在這裏面學習了不少。感受在第四單元的標程中,我對OO方法的理解在第二單元上又前進了一步。

3、總結本身在四個單元中測試理解與實踐的演進

說實話我對於測試的掌握一直不是很好,這幾個單元的測試方面作得不好。

(一)第一單元

第一單元我以前忙於寫代碼,沒怎麼看同窗們的帖子,怎麼來構造隨機數據,怎麼使用數學工具計算獲得結果,怎麼批量測試。這些是我第一單元快要結束的時候我纔看了這些帖子。從總的四個單元的練習來看,其實這一個單元最適合批量測試本身的程序,最適合鍛鍊本身使用工具測試程序的能力。

然而我第一單元測試本身包括別人的代碼都沒有這麼作,我都是經過看代碼(其實是看正則表達式)來找程序的漏洞。

(二)第二單元

第二單元中的多線程較爲容易產生測試樣例,可是結果判斷我不太會寫。後來意識到指導書中後面有提示結果的有效性有幾條能夠依據來寫測試程序。不過我感受這個單元其實肉眼debug比其餘的方法要使用,就是經過看邏輯上對不對,能夠避免出現一些奇怪的bug。

(三)第三單元和第四單元

第三和第四單元能夠採用老師提過的單元測試的方法,針對每一個方法進行測試,頗有針對性;也可使用JMLUnitNG來自動生成測試樣例對方法進行測試。可是這些方法都是比較有限的,由於這兩個單元的測試樣例和結果判斷不太好本身生成,尤爲是第四單元的UML圖,指令生成倒不是很難,可是結果判斷不是很好判斷。我在這兩個單元本身嘗試了帶包編譯運行,這種方法仍是要本身生成測試樣例,並且還須要至少兩個程序對拍,由於我本身不知道答案,只能經過與別人的對比來判斷程序的正確性。

(四)總結

這從這四個單元的狀況來看,第四單元的時候確定比第一單元的時候對測試的理解更加深入,對於一些方法的掌握也更多。可是自動化測試的方法掌握狀況仍是不太好。

4、總結本身的課程收穫

(一)思惟方式

做爲面向對象課程,我以爲在課程中的最大收穫是get到了一個跟C語言代碼徹底不同的模式的代碼寫法。衆所周知,C語言代碼是面向過程的,而本課程經過java語言向咱們介紹了面向對象的模式,與面向過程的代碼在思惟上其實仍是有很大的差距的。

課程一開始的時候,其實我對於面向對象的編程思想了解的不多,而後第一次做業很簡單,用C風格的java代碼也能夠硬剛出來,而後就感受,哎呀,這個怎麼和C好像沒有什麼太大的區別啊,就只是換了一個語言寫代碼而已。可是到第二次做業的時候,就發現若是還依然使用C那種面向過程的思惟方式,代碼很是的難寫,並且一旦出現新的需求,那真的是酸爽。而面向對象的代碼在重構方面有很大的優點,代碼的可擴展性很是的強。

幾回研討課上同窗們的分享和本身這一個學期面向對象代碼的編寫,讓我瞭解到了面向對象這種思惟方式和代碼編寫方式的優點,感受面向對象的代碼很是適合作一些需求常常變化可是基本的內容又不會變的項目。固然這也不是說面向過程的C很差,這兩種思惟方式各有優缺點。

(二)一些邊邊角角的東西

好比說我學了一門新的語言[笑哭]。。。

還有一個我以爲很重要的就是學以至用吧,咱們OS課上學習了一點編寫腳本的知識,而在OO課上,這個就能夠拿來用做批量對比測試的工具。其實我不會寫評測機,以前的做業基本上都是在理解了代碼的邏輯內容來判斷代碼是否有bug,可是若是大數據量的測試一個一個的在IDEA的cocsole裏比較的話會效率很低,因此這時候有一個腳本就會很是方便。

因爲本人很是的菜,因此我只會使用git bash來編譯和運行java代碼並將結果輸出到文件中而後使用diff來與其餘的人來比較,作不到那些大佬搭的評測機的水平,而後在這麼點東西本身摸索的過程當中仍是遇到了一些玄學的問題,因此我以爲這也鍛鍊了我自學的能力吧。

5、立足於本身的體會給課程提三個具體改進建議

(一)每一個單元尤爲最後一次做業給一個標程

每一個單元都是學習一類新的知識,好比第一單元學習的正則,第二單元學習的多線程等等。每此做業都要花掉我許多時間,而後還有其餘課程的做業,因此我不少時候是沒有時間去詳細地看關於那部分的內容,而後這單元的代碼也不知道能夠有哪些比較規範的寫法。這樣每次都是隻有輸出沒有輸入,就感受每次做業只是完成了做業而已,實際上沒有學習到一些新的東西。

給標程就是但願能夠經過看標程能夠了解一些代碼的書寫規範,尤爲像面向對象的代碼編寫方式是每次做業都要注意的,例如最後一次做業,我有一個類寫了1000多行,由於我不太清楚要怎麼把這些分出去,怎麼繼承上次寫的代碼,等等。還有好比第二單元,我三次做業都是使用的輪詢(sleep)沒有用過notify和wait,我但願能夠有一個標程來做爲新的思路參考,我以爲這樣我能夠學到不少,而不只僅只是完成每次做業。

(二)每一個單元最後能夠給一個總結帖(在你們博客寫完以後)

個人想法其實很簡單,就是就像之前上數分高代之類的數理課,老師在一個單元結束之後會簡單總結一下,這個單元裏咱們學習了哪些知識點,有的時候咱們本身可能一些東西注意不到,老師提點一下本身回去再學習鞏固一下會更好。

做爲與數理徹底不一樣的面向對象的課程,我以爲這個不是學習語言爲主,跟大一的時候學習C語言程序設計不同,這個主要是思惟上的學習。課程組能夠配合標程,至關於給標程加的註釋,標程使用了哪些重要的內容,這些東西在面向對象中對應了什麼重要的東西,好比說使用了什麼模式之類的。

總結帖能夠很簡略的提一下本單元咱們學習的重點內容,好比第一單元的重點內容在於入門面向對象程序設計和正則表達式的學習,而後配合標程能夠介紹一些面向對象裏的經常使用知識。

由於OO理論課不像OS、計組的理論課,介紹理論知識,而後理論知識和上機實踐結合,能夠明確本身要學些什麼。OO就徹底是經過平時的編程做業來本身感悟要學什麼,理論課上的不少東西我聽了感受很是的抽象而後就不太能懂,以致於有的時候我硬剛也能夠經過測試。經過這樣一個帖子,明確咱們這個單元除了代碼還有什麼須要去學習運用的,我以爲比單純只寫代碼會好不少。本身總結當然有用,可是別人尤爲是助教們的總結,能夠給咱們指導做用,和本身的總結不是一種做用。

(三)關於評測機

評測機我以爲是一個測試必備的好工具然而不是每一個人都會寫評測機,關於測試方面雖然不少同窗在研討課上作過度享,可是是一開始的時候,不少東西到了後面就不同了,好比一開始就只是單獨的java文件編譯運行,到後面不只是多個文件,並且會帶包一塊兒編譯運行,而後這之中就會出現不少玄學問題,我又一次嘗試帶包的命令行編譯運行,試了一個下午才發現了一個玄學的問題在哪裏,就這種東西若是別人提醒一下就會好不少,不用花費不少時間在這種實際上沒有太大價值的東西上。

我以爲課程組發評測機是一個不現實的問題[捂臉],可是我但願課程組在測試這方面能夠稍微提醒一下,在關鍵的地方能夠點一下,讓咱們不至於走太多的彎路,畢竟咱們時間少,任務多。我以爲測試也能夠算在這個課程教授的內容裏面,也是一個重要的知識點,因此但願課程組在測試方面能夠官方發一些帖子,在適當的時候能夠提供一些幫助。

相關文章
相關標籤/搜索