1. 程式人生 > >【UML 建模】UML建模語言入門 -- 靜態圖詳解 類圖 物件圖 包圖 靜態圖建模實戰

【UML 建模】UML建模語言入門 -- 靜態圖詳解 類圖 物件圖 包圖 靜態圖建模實戰

發現個好東西思維導圖, 最近開始用MindManager整理部落格

.

作者 :萬境絕塵 

.



一. 靜態圖概述



1. 靜態圖引入


(1) 圖的分類

圖的分類 : 圖分為結構行為圖動態行為圖,結構行為圖包括 用例圖類圖,物件圖,元件圖,配置圖; 動態行為圖 包括狀態圖,活動圖,時序圖,協作圖;

(2) 靜態圖內容

靜態圖概念 :類圖,物件圖,包圖 是靜態圖;

靜態圖內容 : 靜態圖顯示系統的靜態結構, 顯示事物種類的內部結構, 事物種類之間的相互關係;

(3) 靜態圖性質

靜態圖永久性 : 靜態圖可能包含描述暫時行為, 但是靜態圖不顯示暫時性資訊;

靜態圖不包括動態行為 : 靜態圖將行為的實體描述成離散的模型元素

, 但是不包括動態行為細節; 靜態圖將這些行為實體看做是被類所指定擁有使用的物體, 這些實體的動態行為細節由互動檢視狀態檢視描述; 
靜態圖是基礎 : 靜態圖描述動態互動的事物, 是建立其它圖的基礎;



2. 類圖 


類圖概念 : 類圖描述系統中類的靜態結構;
類圖作用 : 定義系統中的類, 表示類之間的關係(關聯, 依賴, 聚合等), 描述類的內部結構(屬性, 方法等);
類圖有效期 : 類描述的是靜態關係, 在整個系統的生命週期都是有效的.
分析系統層次方法 : 分析用例 和 問題, 就可以得到相關的類, 然後將邏輯上相關的類封裝成包, 分成包以後就能很好的體現系統的結構.

3. 物件圖


物件圖概念
: 物件圖是類圖的例項, 與類圖的標示幾乎完全相同;
物件圖與類圖區別 : 物件圖顯示類圖的多個物件例項, 物件圖是類圖的例項;
物件圖生命週期 : 物件存在生命週期, 物件圖的生命週期就是物件存在的過程, 物件圖只在系統的某一段時間存在;


4. 包圖



包圖的組成 : 包是由組成; 
包圖作用 : 包圖可以表示包與包之間的關係, 用來描述系統的分層結構



二. 類圖 

1. 類圖基本概述


建模起點 : 系統建模時, 通常從構造系統的基本事物開始, 包括構造這些基本事物的 基本屬性行為;
通過關係認識系統 : 構造好基本事物之後, 考慮這些事物之間的 關係, 這樣系統分析師就可以 從結構上對該系統有清晰的認識;
類圖是基礎
: 類圖是面向物件系統建模中最基礎的圖, 是其它圖的基礎,狀態圖,協作圖,元件圖,配置圖在類圖的基礎上進一步描述系統的其它方面特性.


2. 類圖的概念和內容



類圖概念 : 類圖是描述,介面,協作 以及它們之間的關係的圖, 顯示系統中類的靜態結構;
類圖如何描述系統 : 類圖可以根據系統中各個類之間的關係描述系統的靜態圖, 一個靜態圖中可以包括多個類圖;

結構模型視覺化的實現 : 靜態圖可以包括許多類圖, 靜態圖構造系統的詞彙關係, 結構模型的視覺化就是通過類圖來實現的;

類圖元素(7個) :,介面,協作,依賴關係,泛化關係,實現關係,關聯關係;

類圖中的通用元素 : 類圖中還可以包含註解,約束, UML建模任何圖都可以含有 註解 約束;

模型元素聚集 : 類圖中可以包含子系統, 這使得模型元素聚集成了更大的模組




3. 類圖的用途



描述軟體系統靜態結構圖, 支援系統功能需求, 系統分析師以支援軟體系統的功能需求為目的設計靜態圖;


(1) 對系統詞彙建模



構造邊界 : UML建模之初, 就要構造系統詞彙, 這些詞彙可以描述系統邊界, 哪些在邊界之內, 哪些在邊界之外;
類圖描述邊界 : 系統最基本的元素構造邊界的時候確定, 系統分析師用類圖描述詞彙它們的職責;


(2) 對簡單協作建模



事物總有協同類 : 類之間都有相互關係相互影響, 孤立的類很少存在, 類總是與其它類協同工作;
類圖描述協同 : 視覺化和詳述 詞彙中事物協同工作方式;


(3) 對邏輯資料庫模式建模



資料庫模式 : 設計資料庫時, 使用資料庫模式來描述資料庫的概念設計; 
類圖描述資料庫 : 資料庫模式建模是資料庫概念設計的藍本, 可以使用類圖對這些資料庫模式進行建模.


4. 類(類圖元素)







(1) 類的概述







類是核心 : 類是面向物件組織系統的核心; 類是對一組具有相同屬性,操作,關係語義行為的物件描述,物件是類的具體實現;
類的組成 : 類中定義了一組狀態行為
-- 狀態 : 屬性關聯 描述狀態, 屬性通常沒有身份的資料值, 如數字, 字串; 關聯是有身份的物件之間的關係表示
-- 行為 : 行為由操作來描述,方法是操作的實現;
類狀態機 : 類的狀態機描述物件的生命週期;


類在UML中表示
-- 名稱部分(Name) : 在頂端存放;
-- 屬性部分(Attribute) : 在中間存放屬性,屬性型別(AttributeType),初始值(InitialValue);
-- 方法部分(Operation) : 底部存放操作,引數表(arg:ArgumentType),返回值(ReturnType);


(2) 類名稱(ClassName)







類名稱分類 :簡單名稱,路徑名稱;
-- 簡單名 : 不包含冒號的單獨名稱叫簡單名;
-- 路徑名 : 用包名做字首的類名叫做路徑名;





(3) 屬性(Attribute)






屬性語法 : [可見性]屬性名[ :型別][ =初始值][{屬性字串}];
-- 注意 : [] 中的內容可有可無;


可見性 : 屬性的可見性只有公有(Public + ),私有(Private - ),受保護(Protected # ), UML中不存在預設, 如果沒有顯示任何符號, 就表示沒有定義該屬性;
-- 公有 : 用 "+" 表示, 可以在此類的外部使用檢視該屬性;
-- 私有 : 用 "-" 表示, 不可以從外部類中訪問該屬性;
-- 保護 : 用 "#" 表示, 常與 泛化 特化 一起使用;


屬性名 : 類中屬性名不能重複;
-- 屬性名約定 : 單個單詞名小寫, 多個字母屬性名 第一個單詞小寫, 其餘單詞首字母大寫,駝峰命名;


型別 : 屬性可以有型別, 該型別用來說明屬性是什麼資料型別;
-- 簡單型別 : 程式語言中定義的 整型, 布林型, 浮點型等;
-- 任意型別 : UML中屬性型別可以使任意型別, 當型別是系統中的其它類的時候.
-- 物件狀態 : 當一個類的屬性被完整的定義之後, 該類任何狀態由這些屬性的特定值決定;


初始值 : 物件建立設定屬性初值;
-- 初始值作用 : ①保持完整性, 防止非法值破壞系統完整性; ② 為使用者提供易用性;


屬性字串 : 屬性字串用來指定關於屬性的其它資訊, 不一定是是屬性值, 如果希望新增一個屬性定義規則, 但是沒地方新增, 可以寫在屬性字串中;


類屬屬性 : 相當於靜態屬性, 該屬性被該類的所有物件共享; 類屬屬性帶有一條下劃線; 


(4) 操作(Operation)






操作服務分類 : 類的操作提供的服務可以分為兩類, 一類是操作的結果引起物件狀態的變化, 一類是為服務請求者提供返回值;


操作語法 : [可見性]操作名[( 引數表 )][ : 返回型別][ { 屬性字串 } ]
-- 注意 : [] 中的內容可有可無;


可見性 : 主要包括 公有(Public +), 私有(Private -), 受保護(Protected #), 包內公有(Package ~);
-- 公有 : 用 "+" 表示, 只要呼叫物件能訪問操作所在的包, 就能訪問公有操作;
-- 私有 : 用 "-" 表示, 同一個類的物件才能呼叫私有的操作;
-- 保護 : 用 "#" 表示, 子類物件才可以呼叫受保護操作;
-- 包內 : 用 "~" 表示, 同一個包內的物件才可以呼叫包內公有的操作;


操作名 : UML中預設駝峰式命名;


引數表 : 按順序排列的屬性 定義 操作輸入; 
-- 定義方式 : 引數定義方式 "名稱 : 型別", 多個引數用逗號隔開; 
-- 預設值 : 引數可以有預設值, 如果沒有提供預設值, 引數將使用指定的預設值;


返回型別 : 可選, 大部分程式語言支援一個返回值型別, 如果沒有返回型別, 程式語言注意加上 void;


屬性字串 : 如果需要加入預定義之外的資訊, 可以在屬性字串中新增; 預定義資訊就是前面的 可見性, 引數表, 返回型別等;


(5) 職責(Responsibility)







定義位置 : 在操作部分下面還可以指定職責, 職責是類或其它元素的契約或義務;
宣告職責 : 建立一個類, 宣告這個類所有物件具體的相同種類的狀態 和 相同種類的操作, 在較高層次上, 還要宣告這些屬性和操作要完成的職責和特性;
職責的表述 : 職責可以寫成自由形式的文字, 可以是短語, 句子, 或短文;




5. 介面(類圖元素)







介面定義 : 在沒有給出物件的實現狀態的情況下對物件的描述;


介面作用
-- 邊界清晰 : 擁有良好介面的類具有清晰的邊界
-- 職責均衡 : 並能成為系統中職責均衡分佈的一部分; 


類和介面的區別與聯絡
-- 區別 : 介面包含操作, 不包含屬性, 沒有對外界可見的關聯; 
-- 聯絡 : 一個類可以實現多個介面, 所有的類都可以實現介面中的操作; 


---介面與類的關聯關係 : 介面 與 實現介面的類 通過一條實線連線;






---介面與類的依賴關聯 : 使用該介面的類 通過 依賴關係 與 介面關聯, 依賴關係是帶箭頭的虛線; 
---- 依賴介面操作 : 如果依賴類僅依賴於指定介面的操作, 那麼依賴箭頭指向介面;
---- 依賴實現類 : 如果依賴類依賴於介面實現類, 那麼依賴箭頭指向介面的實現類;






顯示介面中的操作 : 介面使用普通類矩形符號, 只是在介面名稱上方有 <<interface>>. 






6. 關係(類圖元素)

(1) 依賴關係








1> 依賴概述



某種形式依賴 : 一個元素(生產者)的某些改變可能會影響 或者 提供訊息給其它元素(客戶), 客戶以某種形式依賴於生產者;  





依賴表示方式 : 依賴用帶箭頭虛線表示, 箭頭指向生產者;
方法引數依賴 : 在類A中的方法引數是類B物件, 引數B的改變, 使A隨之改變, 這樣類A依賴於類B; 例如 TV 中change()方法傳入頻道channel, 頻道改變, 電視狀態改變, 這樣TV依賴於channel;





2> 使用依賴(Usage)



使用依賴 : 關鍵字<<use>>, 宣告一個模型元素A需要用到已存在的另一個模型元素B (即在A中定義一個B成員變數), 這樣才能正確實現使用者的功能, 使用依賴的方式包括了 呼叫依賴,例項化依賴,引數依賴 和傳送依賴; 
-- 呼叫依賴 : 關鍵字<<call>>, 一個類呼叫其它類的操作;
-- 引數依賴 : 關鍵字<<parameter>>, 宣告一個操作和它的引數之間的關係, 客戶類的操作使用提供者類的物件, 客戶類的操作使用提供者類的引數;
-- 傳送依賴 : 關鍵字<<send>>, 宣告訊號傳送者 和訊號接收者之間的關係;
-- 例項化依賴 : 關鍵字<<instantiate>>, 宣告用一個類的方法建立另一個類的例項,客戶類的操作返回提供者類的值, 類似於工廠類中建立類;


3> 抽象依賴



抽象依賴 : 客戶與提供者之間的關係, 依賴於在不同層次上的事物;
-- 跟蹤依賴 : 關鍵字<<trace>>, 宣告不同模型中的元素存在一些連線, 通常這些模型是開發過程中不同階段的模型;
---- 作用 : 追溯跨模型系統要求, 跟蹤模型中會影響其它模型的模型所引起的變化;
-- 精化依賴 : 關鍵字<<refine>>, 具有兩個不同語義層次上的元素之間的對映,不完善到完善之間的對映, 不會再最後模型中共存;
-- 派生依賴 : 關鍵字<<derive>>, 宣告例項A可以從例項B匯出;


4> 授權依賴



授權依賴 : 事物A訪問事物B的能力是授權依賴; 提供者(被依賴者,獨立)可以規定客戶(依賴者,不獨立)對齊訪問許可權, 可以控制客戶對其內容訪問的方法;
-- 訪問依賴 : 關鍵字<<access>>, 允許包A問包B;
-- 匯入依賴 : 關鍵字<<import>>, 允許包A訪問包B, 併為包B的組成部分增加別名;
-- 友元依賴 : 關鍵字<<friend>>, 允許包A訪問包B, 不管包B的元素是否具有可見性;


5> 繫結依賴



繫結依賴 : 關鍵字<<bind>>, 為模板引數指定值, 以生成一個新的模板元素; 將數值分配給模板引數, 可以通過取代模板備份中的引數實現;




(2) 泛化關係



泛化關係 : 泛化關係就是繼承關係, 子類和父類之間的關係就是泛化關係;
泛化關係表示 : 泛化關係用空心三角箭頭表示,箭頭指向父類, 多個泛化關係可以用箭頭線組成的樹來表示;









(3) 關聯關係







1> 關聯關係的一些定義



關聯關係定義 : 描述一組具有共同特徵, 行為特徵, 關係和語義的連結;
結構關係 : 關聯關係是一種結構關係, 指明事物A物件與事物B物件間的關係;
連結是關聯例項 : 兩個物件存在連結, 那麼物件對應的類之間存在關聯關係, 連結是關聯的例項;
關聯關係表示 : 關聯關係可以使用一條連結兩個類的實現表示;






二元關係 : 關聯的例項是連結, 每個連結由一組物件構成, 每個物件來自不同的類, 物件A與物件B一對一關係就是二元關係;


2> 關聯關係的修飾

a. 名稱


名稱定義 : 關聯的名稱, 用來描述關聯的性質;
名稱命名規範 : 使用動詞或動詞短語命名關聯, 表明源物件在目標物件上執行的動作;
方向指示符 : 在名稱後面新增一個方向指示符(實心的三角形), 用來消除可能存在的歧義; (不知道怎麼畫)






b. 角色


角色定義 : 當類A處於關聯的某一端時, 該類就在關聯關係中扮演一個角色, 即類A對類B所表現的職責;
角色命名規範 : 角色名稱使用名詞或者名詞短語命名;
修改角色名稱 :  雙擊關聯關係那條線, 在Role A/B General 中修改角色名稱;






c. 多重性


多重性是約束 : 約束是UML三大擴充套件機制之一, 多重性是一種使用的最廣泛的一種約束;
多重性表示 : 格式 "min .. max", min和max是int型別, 表示該端點有多少個物件可以與另一個端點的物件關聯;










d. 聚合(Aggregation)


聚合關係定義 : 聚合表示整體與部分之間的關聯;
聚合關係表示 : 聚合關係使用帶空心零星箭頭實線表示, 箭頭方向指向整體;




該聚合關係解析 : 一所大學中有1個活多個學院, 一個學院只屬於一個大學, 菱形箭頭方向指向整體;


e. 組合關係(Composition)


強聚合 : 組合關係是聚合關係中的一種特殊形式, 是更強形式的聚合;
組合關係的特殊性 : 成員物件的生命週期取決於聚合的生命週期, 當主物件消失, 成員物件也隨之消失;
組合關係表示 : 組合關係由實心菱形箭頭表示, 箭頭方向指向主體方向;
f. 導航性(Navigation)


導航性定義 : 物件A通過鏈可以訪問物件B, 對一個關聯關係設定導航型就是本端物件A可以訪問另一端物件B;
單向關聯 : 單向關聯用一個帶箭頭的實現表示;
雙向關聯 : 雙向關聯用一條直線表示;



.

作者 :萬境絕塵 

.




(4) 實現關係



實現關係定義 :規格說明和其實現之間的關係是實現關係;

實現關係組成 : 實現關係意味著要具有介面一樣的說明元素, 也可以用一個具體的實現元素來暗示它的說明必須被支援, 例如實現關係可以用來表示類的一個優化形式和一個簡單低效的形式之間的關係, 沒有支援說明就變得很低效, 必須支援規格說明;

泛化實現區別 : 泛化關係的兩個元素在相同語義層, 相同模型中; 實現關係的兩個元素在不同語義層次, 不同模型中;

實現關係的使用情況 :介面與實現類之間,用例與實現該用例的協作之間;

實現關係表示
-- 正常表示 : 指向介面的空心三角形虛線表示;
-- 省略表示 : 介面是小圓圈, 可以使用一條實線表示;






7. 類圖建模技術

(1) 對協作建模



協作定義 : 類不是單獨存在的, 需要與其它類協作, 協作是動態互動在靜態圖上的對映, 協作的靜態結構通過類圖來描述;


協作建模策略
-- 識別建模機制 : 機制描述了正在建模的部分系統 的功能和行為, 這些功能和行為由 類, 介面 和 一些元素互動產生;
-- 識別機制組成 : 對每種機制, 識別參與協作的類,介面和其它協作, 並識別這些事物之間的關係;
-- 通過協作檢錯 : 用協作的指令碼檢測事物, 通過這種方法發現模型中被遺漏的部分 和有明顯語義錯誤的部分;
-- 屬性方法轉換 : 將元素 和 它們的內 容聚合在一起, 即平衡類的職責,將職責轉換成具體的 屬性 和 方法;


(2) 對邏輯資料庫模式建模



儲存永久物件 : 許多系統中都存在永久物件, 使用關係資料庫, 面向物件資料庫 或混合關係/物件資料庫 儲存永久物件. 
ER圖與UML建模區別 : 
-- 建模資料庫侷限性 : ER圖只能針對邏輯資料庫建模, UML可以對邏輯資料庫 物理資料庫進行建模,物理資料庫中, 類圖將邏輯操作轉為觸發器或儲存過程;
-- 建模方式區別 : ER圖只能針對資料建模, UML在資料基礎上可以針對行為進行建模; 


資料庫模式建模策略
-- 類的生命週期 : 在模型中識別的類, 該類狀態必須超過其應用系統的生命週期;
-- 類圖特定標記 : 包含永久類的類圖, 必須標記為永久的(persistent), 對特定的 資料庫細節 可以定義自己的 標記值集合;
-- 注重詳細細節 : 展開這些類的結構性細節, 詳細描述屬性細節,注重於關聯和構造類的基數;
-- 簡化邏輯結構 : 觀察系統中的公共模式(關聯方式), 它們經常造成物理資料庫設計的複雜變化, 必要時可以建立簡化邏輯結構的中間抽象; 
-- 業務邏輯封裝 : 考慮這些類的行為, 擴充套件 對資料儲存 和 資料完整性來說 重要的操作, 與物件集的操作相關的業務規則 應該被封裝在 永久類的上一層;
-- 邏輯物理轉換 : 儘量用工具將邏輯設計轉換成物理設計;


(3) 正向工程



建模目的 : 建模時為了及時交付滿足使用者需求 及業務發展目標 的軟體, 因此要保證建立的模型 與 交付產品 相匹配, 並使模型與產品 保持同步 的代價降到最低;
UML對映語言 : UML可以把類圖清楚的對映到各種面嚮物件語言上;
對映資訊損失 : 正向對映是 把 模型轉為程式碼的過程,UML 中模型描述 比當前任何面嚮物件語言都要豐富, 對映的過程中會有一定資訊損失, 因此UML模型不可或缺;


正向對映策略
-- 識別對映語言 : 識別對映到所選擇的的實現語言的規則;
-- UML資訊有損失 : 選擇的語言的語義, 可能會限定一些UML特性的使用, 即UML資訊不能用語言完全表達出來, 會有一定的損失;
-- 精確控制層次 : 用標記值詳細描述目標語言, 若需要精確控制, 該操作可以在單個類的層次 上進行, 也可以用在 較高層次(協作,包) 上執行;
-- 正向工程工具 : 使用工具對模型進行正向工程;


(4) 逆向工程



逆向工程定義 : 逆向工程是通過特定實現語言的對映, 將程式碼轉換為模型的過程;
冗餘資訊 : 程式碼轉為模型會有大量的細節層次, 對於模型來說這些細節太詳細, 屬於冗餘資訊;
資訊缺失 : UML中的資訊要比語言豐富, 因此逆向工程生成的模型是不完整的, 因為正向工程損失了一些程式語言不能表達的UML資訊;


逆向工程策略
-- 識別對映規則 : 識別從視線語言到所選擇的語言進行對映的規則;
-- 逆向工程工具 : 使用工具指向要進行逆向工程的程式碼, 用工具生成新的模型或修改以前進行正向工程使已有的模型;
-- 查詢模型建立 : 使用工具, 通過查詢模型建立類圖;




三. 物件圖

(1) 物件圖引入



靜態和動態圖 :類圖描述的是系統的靜態結構和關係,互動圖描述的是系統的動態特性.
類圖和互動圖缺陷 : 跟蹤系統的互動過程時, 經常涉及到互動過程中某一瞬間互動物件的狀態, 但是系統的類圖和互動圖都沒有對此進行描述.
物件圖引入 : 物件圖用來描述參與一個互動的各個物件的某一時刻的狀態;


物件圖作用 : 在複雜系統中, 出錯時涉及的物件處於一個有眾多類的關係網中, 系統測試人員需要為出錯時刻系統各個物件的狀態建立物件圖, 這樣能方便分析錯誤;


(2) 物件圖概念和內容



物件圖定義 : 物件圖表示在某一時刻一組物件以及它們之間的關係, 可以被看做是類圖在系統某一時刻之間的關係圖;
物件圖的表示 : 物件圖由節點和連線節點的連線組成, 節點可以是物件, 也可以是類, 連線表示物件間的關係, 類名下面帶下劃線;
物件圖內容 : 物件圖除了物件節點 以及連線之外, 還可以包含標註 和約束; 如果有必要可以將 類 畫到物件圖中, 如果系統比較複雜還可以包含模型包 和 子系統; 


物件圖側重點 : 物件圖可以對對 系統靜態設計 或 靜態程序檢視建模, 但物件圖更注重 現實 或 原型例項, 這種檢視主要支援系統的功能需求(即提供給使用者的服務);


(3) 物件圖建模



物件圖的兩個來源 : 物件圖主要用來描述類的例項在特定時刻的狀態, 它可以是類的例項, 也可以是互動圖的靜態部分;
物件圖與元件圖和配置圖的共同點 : 元件圖和配置圖可以包含 部件 或 節點 的例項, 如果它們只包含例項, 不包含任何資訊, 可以將元件圖和配置圖看做是特殊的物件圖;


物件圖建模過程
-- 確定物件 : 參考類圖和互動圖, 確定參與互動的物件;
-- 確定關係 : 確定類之間的關係, 例如 依賴, 泛化, 實現, 關聯;
-- 互動建模 : 針對互動在某個特定時刻各個物件的狀態, 使用物件圖為這些物件建模;

-- 狀態關係 : 系統分析師根據建模的目標, 繪製物件的 關鍵狀態 和 關鍵物件 之間的連線關係;

四. 包圖

1. 包的概述

包圖的構成和作用 : 包圖由包之間的關係構成, 它是維護和控制系統總體結構的重要建模工具;

模型分組控制 : 語義相近的 類, 介面, 元件, 節點和圖組織起來放在一個包裡, 可以方便理解和處理整個模型;

可見性控制 : 一些元素在包外可見, 一些隱藏在包內, 嚴密控制對包內元素的訪問, 可以使包高內聚,低耦合;

2. 包的名字

簡單名(simple name) : 一個簡單的名稱;

路徑名(path name) : 包位於外圍包的名字作為字首的包名;


3. 包的元素

包可以擁有的元素 :,介面,元件,節點,協作,用例, 還可以包含其它包;

包內元素命名規則 : 類和包都的路徑名是上一級包名, 因此包為其擁有的模型元素構成一個名稱空間,一個模型包內不能有名稱相同的元素;

包和內部元素的關係 : 包擁有內部的元素, 這是一個組合關係, 如果包被刪除, 其中的元素也隨之刪除;

4. 包的可見性

包不是孤立的 : 包在軟體模型中不是孤立存在的, 包裡面的模型元素外部的類存在著某些關係;

內聚耦合 : 為了使各個包能坐到高內聚,低耦合, 對包內的元素加以控制, 一些元素可以被外界訪問到, 一些不能被外界訪問;

包的可見性分類 :

-- 公有 (public) : 字首符號 " + ", 該元素可以被任何引入該包的包中元素訪問, 引入包就是 包A 引入包B, 包A的元素可以訪問包B中的 +元素;

-- 受保護 (protected) : 字首符號 " # ", 該元素可以被繼承該包的包中元素訪問, 包A 繼承 包B, 包A可以訪問包B中的 #元素;

-- 私有 (private) : 字首符號 " - ", 該元素只能被同一個包中的元素訪問, 包A中的私有元素只能被包A中的元素訪問到;

舉例 : 包A 中有四個公有元素, 包B引入包A, 包B中的元素都能看到包A中的四個公有元素;

巢狀可見性 : 元素A 對於 包B 是可見的, 包B 中還巢狀 包C, 那麼包C也能看到 元素A; 被巢狀的包C可以看到包含該包(C) 的包(A)所能看到的所有的事物;  

5. 引入與輸出

引入 : 允許一個包中的元素單向訪問另一個包中的元素; 

引入關係建模 : 使用構造性引入修飾依賴為引入關係建模; 通過把抽象包裝成有含義的組塊, 然後用引入關係控制對它們的訪問, 就能控制大量抽象的複雜性;

輸出 : 包的公共部分成為輸出;

包之間的引入表示方法 : 使用虛線箭頭表示引入,箭頭方向表示被引入的包, 即輸出元素的包;


引入分析 : 包1 引入 包2, 包2 引入 包3; 

輸出分析

-- 包2輸出 : 包2 輸出 B1 元素, 因為 B2 元素是私有的;  

-- 包3輸出 : 包3 輸出 C1 元素, 因為 C2 元素是受保護的;

可見分析 : 可見只能在引用的雙方進行,不包括隔代引用, 例如 包3 的C2 不能對於 包1 內容可見; 

包1可見 : 包2 的 B1 對包1的內容是可見的;

包2可見 : 包3 的 C1 對包2的內容是可見的;

6. 包中的泛化關係

包中的兩種關係 : 依賴(引入) 和 泛化;

-- 引入(訪問依賴) : 在 包A 中引入 包B 的元素;

-- 泛化 : 說明包的家族;

泛化關係 : 包之間的泛化關係類似於類之間的泛化關係, 該關係也像類那樣遵循替代原則, 包可以替換一般的元素, 並可以增加新的元素

7. 標準元素

包的擴充套件機制 : UML的擴充套件機制同樣適用於包, 可以使用標記值增加包的新特性, 用來描述包的新種類, 這種標記值有五種 :虛包(facade),框架(framework),樁(stub),子系統(subsystem),系統(system);
-- 虛包 : 描述只引用其他包內元素的包, 自己本身沒有元素;

-- 框架 : 描述由模式組成的包;

-- : 描述一個作為另一個包的公共內容代理的包, 與虛包對應;

-- 子系統 : 描述正在建模中整個系統的獨立部分的包;

-- 系統 : 描述建模中整個系統的包;

8. 包圖建模

包的作用 : 將建模元素按語義分組, 使得複雜的系統模型能夠被構造,表達,理解管理;

包和類的區別 : 類是對問題領域 或 解決方案的抽象, 包是將事物組織成模型的一種機制; 包可以沒有標誌, 因為包沒有例項, 在系統中不可見, 類必須有標誌,因為其有例項;

包圖建模策略

-- 分組 : 分析系統模型元素, 將概念上或語義上相近的模型元素放入一個包;

-- 可視性 : 將包中的每個元素都標出可見性 (公共, 受保護, 私有);

-- 依賴 : 確定包之間的依賴關係, 特別是輸入依賴;

-- 泛化 : 確定包之間的泛化關係, 特別是多重性 與 過載;

-- 繪製 ,精化包圖;

包圖建模例項

-- 系統包 : 包含讀者, 管理員, 借書相關業務的用例, 類等資訊;

--

相關推薦

UML 建模UML建模語言入門 -- 靜態 物件 靜態建模實戰

發現個好東西思維導圖, 最近開始用MindManager整理部落格.作者 :萬境絕塵 .一. 靜態圖概述1. 靜態圖引入(1) 圖的分類圖的分類 : 圖分為結構行為圖 和動態行為圖,結構行為圖包括 用例

文字檢測SSD+Tensorflow 300&512 配置

SSD_300_vgg和SSD_512_vgg weights下載連結【需要科學上網~】: Model Training data Testing data mAP FPS SSD-300 VGG-base

內部排序八:歸併排序(Merge Sort)與程式碼

歸併排序是多次將兩個或兩個以上的有序表合併成一個新的有序表。最簡單的歸併是直接將兩個有序的子表合併成一個有序的表。   2-路歸併排序 在內部排序中,通常採用的是2-路歸併排序。即:將含有n個元素的序

第三期全屏banner圖片切換特效

十一長假plus已經結束  ,上班的第一週,大家都是什麼心情呢,是不是還沒有從放假的狀態轉換過來呢,需要調整一段時間 記得放假的時候,不知不覺就過去4天,當時感嘆,哇靠,一下子就過去一半了啊,只能安慰自己的,沒事,還有一半呢 等剩下三天的時候安慰自己,沒事,就當放個3天小長

計算機網路讀書筆記之《TCP/IP卷1》《圖解TCP/IP》《計算機網路》三合一

最近把之前看過的三本關於網路的書一起做了一下總結。 第一本是謝希仁的《計算機網路》,這本算是為數不多的國內的好教材,裡面雖然有些內容過時,稍顯臃腫,但是有些章節講的非常不錯。 第二本是《圖解TCP/IP》,日本人寫的書,非常認真細緻,文字結合大量圖片通俗易懂,入門不錯,但是

專案管理Mybatis-Generator之最完美配置

 小夥伴們注意了,全哥花了一些時間,重新整理了一個最完美的Mybatis Generator(簡稱MBG)配置檔案詳細說明,老闆再也不用擔心我的學習!!! 不用多說,直接上程式碼: <?xml

Linux開發Linux下jpeglib庫的安裝

echo "please add following lines in you /etc/profile"   echo "("   echo " tip:"   echo " you can add these lines in a file named /etc/profile.jpeg,"   echo

內部排序七:堆排序(Heap Sort)與程式碼(超詳細註釋版)

堆排序是選擇排序的一種,每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放在有序的子表中,直到全部記錄排序完畢。 我這裡做個總結: 二叉堆: 二叉堆其實是一棵有著特殊性質的完全二叉樹,父節點的值總

網路程式設計深入理解TCP的工作機制

TCP的特點及其目的 為了通過IP資料報實現可靠性傳輸,需要考慮很多事情,例如資料的破壞、丟包、重複以及分片順序混亂等,TCP通過校驗和、序列號、確認應答、重發控制、連線管理以及視窗控制等機制等實現可靠性傳輸。 通過序列號與確認應答提高可靠性 在TCP中,當傳送端的

Flume原始碼分析flumeng的事務控制的原理記憶體通道memory channel

一開始我也是以為flume ng的事務控制是在sink端的,因為只看到那裡有事務的使用,但是今天看了一下fluem的整個事務控制,我才後知後覺,特此寫了這篇文章,望各位不吝指教。 先來一張圖吧!!! 從圖中可以看出,flume的事務控制在source端和sink端都有,具

UML(八)狀態機(狀態和活動

一、概念狀態圖和活動圖是狀態機的兩種表現形式。利用狀態機可以精確地描述物件的行為。從物件的初始狀態起,開始響應事件並執行某些動作,這些事件引起狀態的轉換;物件在新狀態下又開始響應事件和執行動作,如此連續進行直到終結狀態。二、狀態圖狀態圖(State Diagram) =狀態(State) + 遷移(Trans

福利送Scala語言入門視訊學習資料

沒有套路真的是送!! 想要學好大資料,scala語言是必不可少的,spark和kafka等大資料重要元件都是用scala寫的,想要徹底搞懂這些元件是如何運作的必須得看原始碼,而學習scala是看原始碼的必經之路。學習scala的途徑基本都是自學,畢竟據我所知目前大學是沒有這一門學

軟體設計師UML

關係 依賴:兩個事物之間的語義關係,其中一個事物發生變化會影響另一個事物的語義 關聯:描述一組物件之間連線的結構關係 多重度:一個類的例項能夠與另一個類的多少個例項相關聯 泛化:一般化和特殊

UMLUML Tools UML和模式應用

讀書筆記: 《UML和模式應用》 Craig Larman著  機械工作出版社 系統設計的關鍵問題: 如何為物件分配職責? 物件之間應該如何協作? 什麼樣的類應該做什麼樣的事情?  分析和設計: 分析:強調的是對問題和需求的調查研究,而不是解決方案。  (應該回答如下問

幹貨Html與CSS入門學習筆記12-14

進度條 tom step char number 視頻容器 復選框 其中 私有 十二、HTML5標記 現代HTML html5新增的元素:header nav footer aside section article time 這些新增元素使頁面結構更清晰,取代<di

tensorflow:Google三、tensorflow入門

als 管理 神經網絡 等價 問題 sign ria init 節點 【一】計算圖模型 節點是計算,邊是數據流, a = tf.constant( [1., 2.] )定義的是節點,節點有屬性 a.graph 取得默認計算圖  g1 = tf.get_default_gr

C語言文件操作

pri void rfi 識別 archive format 隨機 stat 文本文 轉自:http://www.cnblogs.com/likebeta/archive/2012/06/16/2551780.html C語言中沒有輸入輸出語句,所有的輸入輸出功能都用

Python之路第一篇:Python簡介和入門

源碼 world 網絡服務 換行 編程風格 大小寫 utf8 編譯安裝 比較 python簡介: 一、什麽是python Python(英國發音:/ pa θ n/ 美國發音:/ pa θɑ n/),是一種面向對象、直譯式的計算機程序語言。 每一門語言都有自己的哲學: py

python全棧開發第一篇Python簡介以及入門

request lambda sci linu ogl red 控制 ttl 排行 一、python介紹   python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,Guido開始寫Python語言的編譯器。Python這個名字,來

go 語言環境安裝goland語言環境安裝配置

1、下載go 下載地址: https://golang.google.cn/dl/ 開啟網址,由於我的電腦是win64,所以下載第一個。 2、安裝go 2.1、UNIX/Linux/Mac OS X, 和 FreeBSD 安裝 以下介紹了在UNIX/Linux/Mac OS