什麼是元件(Component)?
- 將某一個元素,視為 “整體(whole)” 時,觀察該元素的外顯行為與內在特徵。
- 元件 = 介面 + 實現介面的類別(不一定是只有一個)。
- 元件的觀點
- 外部觀點(黑箱式) – 凸顯該元件所提供(provide)與所需求(required)的介面(interface)。
- 內部觀點(白箱式) – 元件內部結構(internal structure) “組成元素” 的關係。
元件與合成結構(Composite Structure)圖
- 將焦點關注在某一個元件(Component)
- 元件外顯的介面(interface)。
- 元件內部組件(part)的連結關係。
- 介面係由內部的那個組件所委託(delegate)實做的。
- UML 2.0 新增最有價值的新視圖;也可以視為是早期 UML 類別圖中對“黑色菱形”的合成關係的一種擴充、延伸、升級。
元件的內部結構描述
- 內部相互連結(interconnected)組件(part)的結構(Structure)。
- 系統執行期間(run-time)內部相互連結的個體(instances)結構。
- 例,一艘小型動力艇,內部係由一具引擎及一至四個推進器組成並履行小艇推進的功能。
範例—利用兩種不同的呈現方式展示 Order 元件與其介面
元件的 “提供” 與 “需求” 介面
- 元件所提供給 Client 端使用的介面稱為 “可提供介面(provided interface)”;元件所要求的介面稱為 “需求介面(required interface)”。
- 例,Order 元件提供(provided)給 Client 端(如 Customer) “新增/移除 訂購細項”、”完成訂購”、”提供訂購追蹤資訊” 等介面;而需要(required) “Retrieve Products”、”Retrieve tracking info” 等介面。
- UML 2.0 ,圓球(ball)圖示(icon)表提供介面;凹槽(socket)圖示表需求介面。
“Ball and Socket” 的說明
- 例,Order 介面需要“Retrieve Products”介面;而 Inventory 元件提供了“Provide Products”介面。兩者構成了“ball and socket”關係。
連接埠–元件與外部環境的互動點(interaction point)
- 利用 “連接埠(port)” 可以將介面(包括需求與可提供介面)群組起來,成為一組邏輯的互動關係。
- 透過 port,元件可以提供服務給外部的環境;也可以向外部環境要求服務。
- 元件與其外部環境互動(interaction)的 “存取點(access point)”。
- 例,將 “Mouse” 視為是一個介面,透過 usb 接頭,可以連至(plug-into) PC 所提供的 “USB 埠”,而可以操作使用滑鼠。
元件內部結構組成元素的說明
- 組件(part)提供或需要某個介面的實做,兩者之間的連線關係,稱為委託連接器(delegating connector)。
- 組件與組件之間的關連(association),稱為連接器(connector)。
- 利用多重性(multiplicity),可以秀出某個組件會有多少個個體(instances)。
OK…謝謝你的回答,我想辦法去盡量”感受”他的含義好了,呵呵
Hi 學習中:
1. 是的,剛好相反,畫錯了,謝謝您的提醒。
2. 那個 “port” 不是那麼重要,請注意,透過 UML 只是一種想法的表達與呈現,可不要對 uml elements 太過 “走火入魔”。
而若是執著想確實瞭解 UML 元素的每一個 “精確” 定義與用法,那就要研讀 “UML Specification” 了,可以到 OMG 的網站下載規格書。
還有,若當想回歸 UML 元素的定義與說明,建議除了規格書外,三巨頭的 “UML User Guide” 也是相當值得參考的書籍。
您好,先謝謝你的回答,針對1、2兩點,還有一些疑問:
1、圖中的ball跟socket好像畫反了,Order是「需要」RetrieveProduct這個interface,所以應該是socket才對?
2、查了好多資料,大家對port的解釋好像都有點模糊。不過感覺是一個把interface group起來的概念沒錯。然而,如果不真正了解這個element的含意,好像連要把哪幾個interface放在同一個port都搞清呢@@。另外,還有網頁說明port是一個有type的element,總覺得越來越不知道他到底是啥了
Hi 學習中:
1. 是的,沒有錯,你的解釋是對的,也與圖的表達沒有衝突。
2. Port 只是 Logical group for interfaces, 在程式碼中,比較會在某一個 Interface 的宣告中,一組所定義的 methoed 宣告。
3. 最好不要用程式碼中的 “delegate” 來解釋這個字眼。
4. 也可以,滑鼠透過 usb 介面與 PC 連結。該圖的例子只是凸顯滑鼠需要透過 “Port” 來與 PC 連結。
您好,有幾個疑問想請教一下:
1、RetrieveProduct好像應該是Inventory類別提供的介面才對?Order接到訂單後,利用Inventory提供的介面去取貨或查庫存。
2、一直對這個UML新的Diagram有點一知半解。其中的Port,如果實作為真的程式碼,會是什麼東西呢?應該不會是真的指http的「80 port」吧@@
3、另外delegate跟c#中的delegate概念是一樣的嗎?(在c#中類似指函式指標)
4、滑鼠那個例子中,usb好像應該是interface才對?任何外接式裝置,只要遵守usb interface來實作usb連接頭,就可以跟電腦溝通。