2011年3月2日 星期三

SCEA chap3 - OOAD(2)

UML  - Elements Used in UML

  1. Class--就如同字面般的定義,class是個描述單一抽象化的模組,而object 則是此模組的實體,面對早就熟到不能再熟的class members, ex: name ,attributes , methods(operation)

  2. Interface--介面可以說是一連串的操作的集合,呈現出一組必要的實作規範(規格)出來,讓實作的子類別去完成實作內容。

  3. Package--package是用來組織化(群組化)一些相依性較高的元件,有點類似資料夾的概念存在,可以巢狀的存在,在外部的(Outer Packages)我們稱之為domains。

  4. Collaboration--用來定義不同的角色之間藉由其內容、相依關係、關聯、以及物件的互動關係,要使用collaboration時,role必須被綁定到class裡面才行,表示是該class的操作是由此role來進行,相關細節得看後續的圖例。

  5. Use Case--用來呈現一個完整的功能需求說明,可以大到是一組系統功能概觀,或者是小到單一一個class的內涵。在use case 當中有兩種類型分別為: essential / real.
    Essential類型的主要是把腦袋裡所想的給簡單的標記出來,不過度將 實際的實作細節展示出來,此時的設計選擇適比較抽象化的,尤其是對於使用者操作介面更甚。而Real use cases則是描述了整個功能流程中的整體實作細節。由此兩此觀之可以很肯定的說,Essential Use Case在專案開發初期是個很重要的作業,目標是能夠先期規劃出相關的系統企業流程,而Real Use Case則是在實作階段比較重要,藉由詳細的描述出在essential use case階段的內涵,讓後續的實作能更完整。 

    Use case 都會有個  stereotype關鍵字放在name的上方!!

  6. Component--component呈現了一個模組或者是可部屬的系統的部分資訊,他封裝了大部分的實作細節,只提供介面參考,通常是被佈署在node上面...(細節須再看UML圖例)

  7. Node--node 是一個比較具體化的物件去程線系統運作中需要的資源,通常會描述包含類似有memory,processing capability(處理能力),也可以是呈現HR or 處理資源

  8. State--直接參考UML圖例說明比較快


Relationships Used in UML

雖然這段有根其他OOAD書籍重疊,但加減再翻看看是否有無個人遺忘的部分。




  • Generalization (一般化關係,也就是inheritance)(is-a) - 就是一個class的特別版本,通常呈現方式會以實線搭配一個箭號到父類別

  • Association ( 結合關係 ) - 主要是說明使用到其他物件的services,呈現方式會以實線去連結到有相依的物件,並以一個開放的箭頭(箭頭是可有可無的)去標示出來相依的對象。association的表示法是實線加上箭頭,有兩個重點,navigability和multiplicity,navigability就是箭頭指的方向,指別的class的,表示負責維護association關係,在此class中有data member存著被指class的reference(pointer),multiplicity則是上面的數字,離自己class比較遠的,表示對方class和自己class之間的關係

  • Aggregation (聚合關係) - 有 whole-part的概念存在(has-a), 一個物件擁有其他的物件 - 呈現方式是以一個空心的菱形方塊以及一條實線,方塊的一方是整體。

  • Composition (組合關係) - 有 whole-part的概念存在(has-a),在物件生命周期當中是同時依存的-呈現的方式是實心菱形方塊及一條實線,方塊的一方是整體,若任何一方不存在則一同消失。

  • Refinement (重新定義?) - 一個重新定義版本的class,有時候是想要同時擁有整併兩個以上的物件功能,用<<refines>> or<<implements>>來標記,在命名上通常會把兩個以上已經獨立存在的物件名稱併起來,ex:   Bank ,  Robber  , --> Bank-Robery,在圖例上,會用一條虛線搭配末端是黑色實心圓點,圓點端則是這個重新定義過的物件。

  • Dependency - 從一項類別拉出一條帶箭頭的虛線到另一項類別、不帶標示文字,表示一項類別依賴另一項類別提供的功能。


在進入到diagram之前,綜整一下容易誤解的資訊,所謂的association可以想像成是類似ERD那般,主要呈現描述的是關聯,通常可以透過交易模式的概念去呈現其主體內含,由交易事件、人、地、物等多個參與個體來看,就不會一直陷入到底程式碼是如何呈現的問題,而 Aggregation/Composition則是has-a的概念,程式中比較容易淺顯易懂的概念就是物件含有另一個物件為其Instance member。In composition, whole has responsibility of preventing garbage collection of part.composition必須是在constructor階段就設置完成,要碼就一起等待被gc,要碼就一起還活著。

State Diagram - 參考UML 圖例

Activity Diagram - 看過很多次了跳過

Collaboration Diagram  ,Deployment Diagram ..這些都可以在後續J2ee pattern當中去看

沒有留言: