oo第四單元總結

一.本單元兩次做業的架構設計  java

第一次做業正則表達式

架構圖以下:算法

 

根據uml類圖元素之間的關係,經過傳入的umlelement的id和parentid建好樹,如上圖所示,例如model(單例模式)下有umlPackage(umlPackage對象中存儲的是parentid不存在的對象),umlPackage下有umlClass和umlInterface等,在MyumlInteraction的方法中,經過工廠模式和本身的類型生成各級對象,並分別存儲在各自的parent對象中,第一次做業的主要部分就是建樹,建好樹後就能夠寫代碼來查詢信息了,其中主要方法就是經過name來找對應的umlClass和umlInterface對象,遞歸查找便可(從model開始);有些部分中間信息能夠保存在相應對象中,下次查詢時就能夠直接獲得結果,例如classCount,umlClass下的屬性和方法等。編程

 

第二次做業設計模式

架構圖以下:安全

 

在第一次做業的基礎上,根據元素之間的關係,增長几個類(即該類對象可能還有下一級類),第一次做業只須要改變Factory,將這些類增長進去,而後在各個等級下的對象中添加可能出現的新增的類便可,比第一次建樹簡單一些,建好樹後,對於狀態圖和順序圖中的查詢操做與第一次相似,先用遞歸找到該對象,而後查詢便可,對於三個模型有效性檢查,R001:針對給定的模型元素容器,不能含有重名的成員;將各個成員找出來,進行比較便可。R002:不能有循環繼承;利用深度優先算法,查找是否有從自身出發,還能回到起點的元素便可;R003:任何一個類或接口不能重複繼承另一個接口;檢查這個規則能夠利用遞歸,從自身出發,先保存父類,再保存父類的祖先,而且保存ancestor(類或接口的祖先)這一中間變量,再對ancestor進行比較便可。多線程

 

二.在四個單元中架構設計及OO方法理解的演進  架構

第一單元:表達式求導框架

第一,二次做業用的是正則表達式判斷所有式子的正確性,沒有面向對象編程的思想,判斷,處理多項式都是在一個類中,第三次做業由於以往的方法行不通了,增長了嵌套,只能分級處理,纔有了點面向對象的概念,將表達式,項,因子分開處理,先保存並判斷再分別進行求導,而不是在一個類中處理所有事情,總體的框架變得清晰了。工具

第二單元:多線程電梯

這個單元主要讓咱們學習如何讓類之間信息安全高效地進行交流,經過三次做業學習到了synchronized機制和怎樣有效使用notify與wait,利用notify和wait來保證cpu計算的效率,利用synchronized來保證線程的安全,處理多線程電梯做業模仿的是生產者-消費者模式,輸入是生產者,電梯是消費者,調度器做爲托盤。經過這三次做業,也學習到了一些設計模式,觀察者模式,單例模式等,對面向對象編程有了更深刻的認識。

第三單元:JML

經過這個單元,學習到了JML規格化語言,方法和類怎麼樣正確地描述,寫出來的代碼如何驗證正確性。這三次做業,是關於建圖和圖中查詢的問題,主要採用了迪傑斯特拉算法和廣度優先算法。經過規格,能確保使一個方法不會變得太複雜,也能將設計與實現分離開,各作各的,不容易產生錯誤,因此,使用規格化語言進行設計符合面向對象編程的思想,對這單元的學習能改變咱們之前寫代碼的風格,讓咱們先設計再寫代碼。

第四單元:UML

這個單元,我採用了工廠模式,在作第二次做業時代碼的可複用性很好,在編程中認識到了接口的重要性,使用接口,可以在增長新的功能或類時,不須要改變已經寫好了的代碼。這個單元的代碼層次十分清晰,思路也很明確,各個類作本身該作的事,這兩次做業的代碼最符合面向對象編程的思想。

 

三.在四個單元中測試理解與實踐的演進

第一單元主要採用讀其餘人代碼,用一些常見的,可能會產生錯誤的多項式來找bug,那時候代碼量還少,也找出了幾個bug;

第二單元首先對多電梯樓層間運行時間,開關門時間和電梯容量等進行測試,而後構造一些特殊的須要換乘的請求對代碼進行測試;還有就是閱讀代碼,根據對共享資源的操做,判斷線程的安全性;

第三單元寫了個自動生成數據的測試器,容易找到bug,但不可以確保是否是同一bug,只能先改好這個bug後再進行下一次測試;

第四單元,主要是經過評測機的測試,以及其餘同窗分享的測試用例。

 

四.課程收穫

oo這門課讓我學會了使用java語言,也學會了怎麼樣用面向對象的思想編程,在命名,代碼規範,設計,測試等方面都有了很大的提升。學期初時還在爲寒假佈置做業擔心,對java徹底不瞭解,但如今可以在寫出千行左右的代碼,輕鬆地使用java進行編程;同時,也學會了面向對象編程,經過面向對象編程,可以優化程序的架構,提升程序魯棒性;之前由於代碼量比較少,不用解決複雜的問題,因此變量的命名十分隨意,但通過這一學期的課程,規範命名對於代碼的理解很重要;之前都是拿着指導書就寫代碼,改了又改,但如今可以先設計好思路,再上手寫,這樣可以高效地寫出代碼;測試也是同樣,之前只經過評測機進行測試,如今可以本身構造測試集,利用一些工具來進行測試,這是一個很大的提高。

 

五.給課程提三個具體改進建議

1.理論課應該多些例子,老師講的一些名詞概念聽不懂,不少東西難以一會兒理解,理論課能學到的東西少了些。

2.UML這個單元學到的東西不是不少,沒之前單元內容的充實。

3.在前幾回做業時,雖然講了接口和繼承,但徹底沒有用到,認爲沒用到接口和繼承也能很好地寫出代碼,我認爲在前幾回做業時就應該提示怎樣使用接口和繼承,並讓咱們感覺到使用的好處。

相關文章
相關標籤/搜索