架構設計:java
uml 類圖提供了一個描述類及其關係的視圖。 頂層爲 UMLClass
,UMLInterface
,UMLAssociation
,UMLGeneralization
,
UMLInterfaceRealization
。下一層爲UMLAttribute
, UMLOperation
, UMLParameter
,UMLAssociationEnd
。算法
根據uml類圖的層次結構,將模型抽象爲MyAssociation
, MyClass
, MyInterface
幾個類 。MyUmlInteraction
做爲外部方法接口類,將不一樣的指令都分放到具體的類中去查詢處理。編程
架構設計:安全
除了順序圖以外,第二次做業加入了對uml順序圖和狀態圖的模型處理。順序圖描述了基於消息機制的對象協做關係,具備明確的協做主題。
頂層爲協做對象UMLAttribute
和交互模型UMLInteraction
。下一層爲UMLLifeline
,UMLMessage
,UMLCombinedFragment
。數據結構
由順序圖的層次結構,設計了MyUmlInteraction
類來管理單個模型的圖層創建及指令查詢處理。在MyUmlInteraction
中,多線程
private UmlInteraction interaction; private ArrayList<UmlLifeline> lifelines = new ArrayList<UmlLifeline>(); private HashMap<String, UmlLifeline> name2Lifeline = new HashMap<String, UmlLifeline>(); private HashMap<String, Integer> same2Lifeline = new HashMap<String, Integer>(); private ArrayList<UmlMessage> messages = new ArrayList<UmlMessage>(); private HashMap<String, Integer> target2SourceNum = new HashMap<String, Integer>();
創建了name2Lifeline
, same2Lifeline
, target2SourceNum
映射名字和對象,消息傳遞的發送方和接收方關係的映射。架構
設計MyUmlInteractionContainer
類來管理狀態圖,做爲狀態圖的指令查詢接口。框架
uml狀態圖描述了狀態及其關係,通常用來描述一個特定類/組件的行
爲。頂層結構爲UMLStateMachine
,UMLRegion
。 下一層爲UMLState
, UMLTransition
, UMLEvent
, UMLOpaqueBehavior
單元測試
根據狀態圖的層次結構,我設計了 MyStateMachine
做爲狀態圖的 「 畫布 」。學習
private UmlStateMachine stateMachine; private HashMap<String, UmlState> name2state = new HashMap<String, UmlState>(); private HashMap<String, Integer> sameName2state = new HashMap<String, Integer>(); private UmlRegion region; private HashSet<String> idHashSet = new HashSet<String>(); private HashMap<String, ArrayList<String>> source2target = new HashMap<String, ArrayList<String>>();
MyStateMachine
中設計了 name2state
, sameName2state
, source2target
幾個映射關係,便於根據名字查詢狀態和前繼狀態及後繼狀態的關係。
設計MyStateMacheContainer
類來管理順序圖,做爲順序圖查詢指令的接口。
創建了MyUmlStandardPreCheck
類進行三條規則的預檢查。設定三個不符合規則的集合來拋異常。
private Set<AttributeClassInformation> ruleTwo = new HashSet(); private Set<UmlClassOrInterface> ruleEight = new HashSet(); private Set<UmlClassOrInterface> ruleNine = new HashSet();
類圖:
第一單元
從純c選手走向java小白,前兩次做業都是按照c的方式,面向過程來寫。到了第三次做業,漸漸的有了一些java的基本思想,學了用基本的面向對象的方式抽象類,使得層次架構更清晰。
第一次做業
第二次做業
第三次做業
第二單元
參考了生產者和消費者的交互模型,使用Tray
類來進行電梯和請求隊列的數據交互,也使得我後續一直在糾結所謂的調度器究竟是用來幹什麼的。第二次做業增長了一些需求,考慮到人員id的惟一性,我使用了一個隊列來肯定人員的進出狀況,做爲確認人員是否進出的標準,和第一次做業差異不大。
相比前兩次做業,第三次做業更讓人頭疼,也是我思考程序設計最長的一次做業,基本ddl前一夜纔開始寫。將需求一再簡化,我使用了初始時就已經確認換乘路線的方式,直接複製了三個電梯類來模擬三部電梯的運行狀況。更好的設計應當是抽象出一個統一的電梯類來繼承,擴展性更好。
第一次做業
第二次做業
第三次做業
第三單元
這一單元主要是對規格的理解,按照jml註釋寫代碼。難點在於圖的數據結構算法的考察,如何才能不TLE是我最頭疼的問題(第一次做業用了死亡for循環直接爆炸)。前兩次做業都抽象出了具體的類來模擬圖,還有容器類來進行對圖的管理。最後一次做業就比較亂,因爲我全部的查詢處理方法都放在了圖中,致使代碼行數嚴重超標,不得不提一個類來存放這些方法,擴展性較差。
第一次做業
第二次做業
第三次做業
第四單元
前文已介紹。
經歷了數次做業的(折磨)歷練,我終於對於面向對象的思想有了必定的理解。面向對象的三大特性是封裝,繼承,多態。
多態 :類實例的一個方法在不一樣情形下有不一樣的表現形式,即不一樣的外在行爲。使具備不一樣的內部結構的對象能夠共享相同的外部接口。
以前的博客也分析過面向對象的SOLID五大基本原則,即
接口分離原則:模塊間要經過具體接口分離開,而不是經過類強耦合。
咱們在設計程序的架構的時候應該儘量的遵循面向對象設計的基本原則,使得程序儘量的低耦合,高內聚。同一個模塊內的各個元素之間的聯繫高度緊密,下降各個模塊之間的相互依存度。
「OO竟然出了假期預習做業!」當時聽到這個消息的我只以爲好不容易盼來的假期莫得了。固然我仍是徹底沒有好好預習窩窩,買了本java的教材看了幾頁就拋之腦後,開學前幾天惡補了點基礎知識,草草的交了假期做業。就這樣,開始了從零開始的OO與OS生活。
回顧過去的做業,我開始寫代碼的時間愈來愈晚,思考程序的架構設計和實現算法比起寫代碼的時間要多的多。不知不覺,我已經能夠短期內手擼近千行代碼,比起以前的我至少碼力提高了不少,也掌握了java 的基本思想,學會了面向對象的思惟,掌握了測試代碼的方法,爲學習更深層次的知識打下基礎。
這一學期,窩窩佔據了我很大一部分時間,也帶給了我很多的精神壓力。比起往屆,這屆窩窩體驗更好一些,儘管有些不足,但確實讓我受益良多,祝窩窩越辦越好!