(转,改)UML中的几种关系
?
?
UML中定義的關系主要有6種: 依賴、關聯、聚合、組合/合成、泛化、實現;
1、依賴關系:
?? 含義:是類與類之間的連接,表示一個類依賴于另外一個類的定義;依賴關系僅僅描述了類與類之間的一種使用與被使用的關系;
?? 體現:在Java和C++中體現為局部變量、方法/函數的參數或者是對靜態方法的調用;
?? 方向:單向;
?? 圖示:虛線 + 箭頭;
?? 舉例:人依賴于水和空氣;汽車依賴汽油
?
2、關聯關系:
?? 含義:類與類之間的連結,關聯關系使一個類知道另外一個類的屬性和方法;通常含有“知道”,“了解”的含義
?? 體現:在Java和C++中,關聯關系是通過成員變量來實現的;
?? 方向:雙向或單向;
?? 圖示:實線 + 箭頭;箭頭指向被關聯的類;
?? 舉例:“漁民”需要知道“天氣”情況才能夠出海
?
3、聚合關系:
?? 含義:是關聯關系的一種,是一種強關聯關系;聚合關系是整體和個體/部分之間的關系;關聯關系的兩個類處于同一個層次上,而聚合關系的兩個類處于不同的層次上,一個是整體,一個是個體/部分;在聚合關系中,代表個體/部分的對象有可能會被多個代表整體的對象所共享;
?? 體現:C++中,聚合關系通過將被聚合者的(數組)指針作為內部成員來實現的;
?? 方向:單向;
?? 圖示:空心菱形 + 實線 + 箭頭;箭頭指向被聚合的類,也就是說,箭頭指向個體/部分;
?? 舉例:鴨群與鴨子具有聚合關系;汽車由引擎、輪胎以及其它零件組成,因為汽車壞掉了,沒有壞掉的引擎,輪胎和其他零件還可以繼續使用。
?
class?CYazi{
???...
}
class?CYaQun
{
???public:
???????CYaQun(CYaZi?*?p){m_pYazi?=?p;?}
???private:
???????CYaZi?*?m_pYazi;
}
CYazi?*?pYazi?=?new?CYazi?[10];
CYaQun?yaqun(pYazi);
?
?
?
4、合成/組合關系:
?? 含義:它也是關聯關系的一種,但它是比聚合關系更強的關系.合成/組合關系要求聚合關系中代表整體的對象要負責代表個體/部分的對象的整個生命周期;合成/組合關系不能共享;在合成/組合關系中,如果代表整體的對象被銷毀或破壞,那么代表個體/部分的對象也一定會被銷毀或破壞,而聚在合關系中,代表個體/部分的對象則有可能被多個代表整體的對象所共享,而不一定會隨著某個代表整體的對象被銷毀或破壞而被銷毀或破壞;
?? 體現:在Java和C++中,合成/組合關系是通過成員變量來實現的;
?? 方向:單向;
?? 圖示:實心菱形 + 實線 + 箭頭;箭頭指向代表個體/部分的對象,也就是被合成/組合的類的對象;
?? 舉例:一個人由頭、四肢、等各種器官組成,因為人與這些器官具有相同的生命周期,人死了,這些器官也掛了;
?
?
class?CHead{
???...
}
class?CPerson
{
???public:
???????CPerson(){m_head.MethodA();?}
???private:
???????CHead?m_head;
}
CPerson?person;
?
??
5、泛化關系:
?? 含義:它表示一個更泛化的元素和一個更具體的元素之間的關系;也就是通常所說的類的繼承關系;
?? 體現:在Java和C++中,泛化關系通過類的繼承來實現的;
?? 方向:單向;子類繼承父類;
?? 圖示:空心箭頭 + 實線;箭頭指向父類;
?? 舉例:動物下面可以分為哺乳動物,脊椎動物,爬行動物等
?
6、實現關系:
?? 含義:它指定了兩個實體之間的一份合同;即:一個實體定義一份合同,另外一個實體則保證履行該合同;
?? 體現:在Java和C++中,實現關系通過類實現接口來實現的,即:一個類實現某個接口;
?? 方向:單向;子類實現接口;
?? 圖示:空心箭頭 + 虛線;箭頭指接口向接口;
?? 舉例:唐老鴨(對象)會說話(接口),因為一般鴨子不會說話,所以不會將說話這個方法給一般的鴨子帶上;超人(對象)會飛(接口)
?
注意:泛化關系和實現關系又統稱為一般關系;
總之,一般關系表現為繼承或實現(is a),關聯關系、聚合關系、合成/組合關系表現為成員變量(has a),依賴關系表現為函數中的參數(use a);
轉載于:https://www.cnblogs.com/aicro/archive/2010/08/23/1806584.html
總結
以上是生活随笔為你收集整理的(转,改)UML中的几种关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用正则表达式总结(js与C#对照) 。
- 下一篇: EF学习杂记39:如何重置Relatio