UML單元架構設計 java
第一次UML做業程序員
這一單元的做業是要求咱們對數據之間的聯繫進行解析,重建數據結構來存儲有效信息以方便查詢工做。算法
這一單元我沒有像不少人同樣,以類爲一個單元進行封裝,我是以整個類圖來進行操做的。由於此次做業只是對類圖的查詢,因此我用多個hashmap存儲類圖的信息,在一個類裏面完成了全部的操做。我起初覺得這樣的架構不是很好,但當我作第二次做業的時候,以爲這樣以hashmap存儲全圖信息,也不失爲一種很好的封裝結構。編程
第二次UML做業設計模式
此次做業是上一次做業的擴展,總體架構思路沒有太大變化。我用第一次做業的方法擴展了三個類,分別存儲類圖、狀態圖、順序圖的有效信息。類內部實現自身對應的查詢操做。數據結構
本次做業最難的是實現模型有效性檢查。其中讓我驚豔的是將類的繼承關係,類的實現關係,接口的繼承關係,所有以點線的形式存入圖中的方法。以某一點爲源點,利用dfs算法就可獲得一條路徑。若是加入的節點在visit路徑隊列中已經存在,如果源點則是循環繼承,不然爲重複繼承。在沒有循環繼承以及重複繼承的基礎上,以類爲源點,則其獲得的路徑中包括他所有繼承的類以及他所有實現的接口,以接口爲源點,則其獲得的路徑爲其全部的繼承的接口。這些數據能夠存儲下來,可用於類圖的相關查詢。多線程
OO課程總結架構
1.四個單元中架構設計及OO方法理解的演進 編程語言
OO課程的每一個單元分紅兩到三個階段,後一個階段都是在前一個階段的基礎上進行擴展的。所以一開始有一個良好的架構是很是重要的。工具
好的架構的特色是簡潔、清晰、高內聚、低耦合、易維護、可擴展的。他須要咱們對做業進行抽象。這抽象的過程能夠憑藉不少咱們生活中的經驗或數學方面的知識等。好比電梯那一單元,將咱們要實現的電梯程序,可必定程度上地映射到現實生活中的電梯:現實中的一我的可抽象爲一個請求,每一個電梯開關門的控制數據可映射到電梯的按鈕,電梯運行的算法也能夠聯繫實際狀況中的運行狀態。好比JML格式地鐵那一單元的第三次做業,它的思路就運用了數學知識,問題的核心在於解決換乘次數的統計(其他新增的問題的根本仍是在於換乘統計),經過將一條path連成徹底圖來表達從該path 上的任意兩點間能夠直達。直達則只需通過一條邊,賦予邊權重,計算出兩點間的權值則可知兩點間的換乘次數。而在這一個圖上給邊賦予不一樣的權值,經過相同的計算方法就能夠解決不一樣的問題。不得不說這個模型太巧妙了。因而可知,在生活中咱們就須要學會對事物進行層次劃分與聯繫映射,培養本身的抽象能力與思惟的邏輯性。再者,對於計算機這門專業,數學有着無可替代的重要性,端正本身對待數學的態度,學好數學是必須的。
2.四個單元中測試理解與實踐的演進
OO做業中用到的測試方法基本上可分爲三種:
(1)根據程序特性自我設計測試數據;
(2)生成大量隨機數據進行測試;
(3)經過OpenJML、JMLUnitNG等工具進行自動化測試。
第一種方法效率比較低,但能夠鍛鍊咱們的逆向思惟,培養自身邏輯的嚴密性。這種方法,是咱們在編程的過程當中自我改進修復經常用到的方法。針對程序的處理過程,咱們會意識到哪些地方容易出錯,自我檢查的同時也能夠對他人進行hack。
第二種方法是效率很高的,並且幾乎能覆蓋到全部狀況,但要求能正確編寫數據生成腳本。(這都是大佬用的方法,菜雞不會~)
第三種方法,也是OO課程想培養咱們學會的測試技能,即經過JML工具鏈,自動化地生成測試樣例。我對這方面的瞭解與掌握並非很深刻,只是停留於課程的要求。瞭解了它的簡單操做。這種測試方法的好處在於,測試數據的生成全程自動化,且理論上能覆蓋到全部的狀況。但它的弱勢也是顯而易見的:學習成本高,須要花更多的時間在代碼中編寫JML測試相關的語句,這是有必定難度的。
3.課程收穫
這一個學期的OO課程學習,收穫仍是不少的。
首先,我學會了一門語言,基本掌握了Java的使用。java是一門面向對象編程語言,不只吸取了C++語言的各類優勢,還摒棄了C++裏難以理解的多繼承、指針等概念,所以Java語言具備功能強大和簡單易用兩個特徵。Java語言做爲靜態面向對象編程語言的表明,極好地實現了面向對象理論,容許程序員以優雅的思惟方式進行復雜的編程。
其次,OO結合OS讓我對多線程有了較深刻的理解。我經過查閱大量的博客自學了不少知識。從徹底陌生到慢慢熟悉,基本掌握了多線程間的同步、互斥問題,也瞭解了一些設計模式的知識。
再者,對圖的操做有了進一步的提升。當初學數據結構的時候,圖的部分並無掌握得很好,這學期後兩個單元對圖的操做不少,是來還債的。學習了不少新的算法,並能根據本身的須要進行自我設計。
而後,還學習了UML和JML的相關知識。JML是基於「契約式編程」的一種規格描述語言,相比於天然語言註釋,JML更加嚴謹和清晰。咱們雙向地學習了這一語言,即根據需求撰寫規格,以及根據規格實現代碼。UML經過可視化的圖形形式,幫助開發者對大規模、複雜系統進行建模,這對於設計面向對象的架構具備重要的意義。經過對UML文件的解析,咱們對UML以及面嚮對象語言的特性有了更深的理解。
最後,也是最重要的是,這門課讓我創建了面向對象的思想。面向對象的程序設計語言必須有描述對象及其相互之間關係的語言成分。這些程序設計語言能夠概括爲如下幾類:系統中一切事物皆爲對象;對象是屬性及其操做的封裝體;對象可按其性質劃分爲類,對象成爲類的實例;實例關係和繼承關係是對象之間的靜態關係;消息傳遞是對象之間動態聯繫的惟一形式,也是計算的惟一形式;方法是消息的序列。面向對象不只是一種編程技術,它更是一種思考問題的方式,一種世界觀,一種哲學。在這一學期的課程學習中,我對此有了更深刻的感悟。
課程改進建議