軟考高項必考點:依賴VS泛化VS關聯VS聚合VS組合VS實現

2020-12-05 薛博士說軟考

UML圖中類之間的關係:依賴,泛化,關聯,聚合,組合,實現

類與類圖

1) 類(Class)封裝了數據和行為,是面向對象的重要組成部分,它是具有相同屬性、操作、關係的對象集合的總稱。

2) 在系統中,每個類具有一定的職責,職責指的是類所擔任的任務,即類要完成什麼樣的功能,要承擔什麼樣的義務。一個類可以有多種職責,設計得好的類一般只有一種職責,在定義類的時候,將類的職責分解成為類的屬性和操作(即方法)。

3) 類的屬性即類的數據職責,類的操作即類的行為職責

一、依賴關係(Dependence)

依賴關係(Dependence):假設A類的變化引起了B類的變化,則說名B類依賴於A類。

依賴關係(Dependency) 是一種使用關係,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關係。大多數情況下,依 賴關係體現在某個類的方法使用另一個類的對象作為參數。

在UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。

public class Driver

{

public void drive(Car car)

{

car.move();

}

……

}

public class Car

{

public void move()

{

……

}

……

}

依賴關係有如下三種情況:

1、A類是B類中的(某中方法的)局部變量;

2、A類是B類方法當中的一個參數;

3、A類向B類發送消息,從而影響B類發生變化;

二、泛化關係(Generalization)

泛化關係(Generalization):A是B和C的父類,B,C具有公共類(父類)A,說明A是B,C的一般化(概括,也稱泛化)

泛化關係(Generalization)也就是繼承關係,也稱為「is-a-kind-of」關係,泛化關係用於描述父類與子類之間的關係,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛 化關係用帶空心三角形的直線來表示。

在代碼實現時,使用面向對象的繼承機制來實現泛化關係,如在Java語言中使用extends關鍵字、在C++/C#中使用冒號「:」來實現。

public class Person

{

protected String name;

protected int age;

public void move()

{

……

}

public void say()

{

……

}

}

public class Student extends Person

{

private String studentNo;

public void study()

{

……

}

}

在UML當中,對泛化關係有三個要求:

1、子類與父類應該完全一致,父類所具有的屬性、操作,子類應該都有;

2、子類中除了與父類一致的信息以外,還包括額外的信息;

3、可以使用父類的實例的地方,也可以使用子類的實例;

三、關聯關係(Association)

關聯關係(Association):類之間的聯繫,如客戶和訂單,每個訂單對應特定的客戶,每個客戶對應一些特定的訂單,再如籃球隊員與球隊之間的關聯(下圖所示)。

其中,關聯兩邊的"employee"和「employer」標示了兩者之間的關係,而數字表示兩者的關係的限制,是關聯兩者之間的多重性。通常有「*」(表示所有,不限),「1」(表示有且僅有一個),「0...」(表示0個或者多個),「0,1」(表示0個或者一個),「n...m」(表示n到m個都可以),「m...*」(表示至少m個)。

關聯關係(Association) 是類與類之間最常用的一種關係,它是一種結構化關係,用於表示一類對象與另一類對象之間有聯繫。

在UML類圖中,用實線連接有關聯的對象所對應的類,在使用Java、C#和C++等程式語言實現關聯關係時,通常將一個類的對象作為另一個類的屬性。

在使用類圖表示關聯關係時可以在關聯線上標註角色名。

1) 雙向關聯: 默認情況下,關聯是雙向的。

public class Customer

{

private Product[] products;

……

}

public class Product

{

private Customer customer;

……

}

2 ) 單向關聯:類的關聯關係也可以是單向的,單向關聯用帶箭頭的實線表示.

public class Customer

{

private Address address;

……

}

public class Address

{

……

}

3) 自關聯: 在系統中可能會存在一些類的屬性對象類型為該類本身,這種特殊的關聯關係稱為自關聯。

public class Node

{

private Node subNode;

……

}

4) 重數性關聯: 重數性關聯關係又稱為多重性關聯關係(Multiplicity),表示一個類的對象與另一個類的對象連接的個數。在UML中多重性關係可以直接在關聯直線上增加一個數字表示與之對應的另一個類的對象的個數。

表示方式

多重性說明

1..1

表示另一個類的一個對象只與一個該類對象有關係

0..*

表示另一個類的一個對象與零個或多個該類對象有關係

1..*

表示另一個類的一個對象與一個或多個該類對象有關係

0..1

表示另一個類的一個對象沒有或只與一個該類對象有關係

m..n

表示另一個類的一個對象與最少m、最多n個該類對象有關係 (m<=n)

public class Form

{

private Button buttons[];

……

}

public class Button

{

}

四、聚合關係(Aggregation)

聚合關係(Aggregation):表示的是整體和部分的關係,整體與部分 可以分開.

聚合關係(Aggregation) 表示一個整體與部分的關係。通常在定義一個整體類後,再去分析這個整體類的組成結構,從而找出一些成員類,該整體類和成員類之間就形成了聚合 關係。

在聚合關係中,成員類是整體類的一部分,即成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨立存在。在UML中,聚合關係用帶空心菱形的直線表示。

public class Car

{

private Engine engine;

public Car(Engine engine)

{

this.engine = engine;

}

public void setEngine(Engine engine)

{

this.engine = engine;

}

……

}

public class Engine

{

……

}

如:電話機包括一個話筒

電腦包括鍵盤、顯示器,一臺電腦可以和多個鍵盤、多個顯示器搭配,確定鍵盤和顯示器是可以和主機分開的,主機可以選擇其他的鍵盤、顯示器組成電腦;

五、組合關係(Composition)

組合關係(Composition):也是整體與部分的關係,但是整體與部分不可以分開.

組合關係(Composition)也表示類之間整體和部分的關係,但是組合關係中部分和整體具有統一的生存期。一旦整體對象不存在,部分對象也將不存在,部分對象與整體對象之 間具有同生共死的關係。

在組合關係中,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期,即成員類的存在依賴於整體類。在UML中,組合關係用帶實心菱形的直線表示。

public class Head

{

private Mouth mouth;

public Head()

{

mouth = new Mouth();

}

……

}

public class Mouth

{

……

}

如:公司和部門,部門是部分,公司是整體,公司A的財務部不可能和公司B的財務部對換,就是說,公司A不能和自己的財務部分開; 人與人的心臟.

六、實現關係(Implementation)

實現關係(Implementation):是用來規定接口和實線接口的類或者構建結構的關係,接口是操作的集合,而這些操作就用於規定類或者構建的一種服務。

接口之間也可以有與類之間關係類似的繼承關係和依賴關係,但是接口和類之間還存在一種實現關係(Realization),在這種關係中,類實現了接口,類中的操作實現了接口中所 聲明的操作。在UML中,類與接口之間的實現關係用帶空心三角形的虛線來表示。

public interface Vehicle

{

public void move();

}

public class Ship implements Vehicle

{

public void move()

{

……

}

}

public class Car implements Vehicle

{

public void move()

{

……

}

}

相關焦點

  • 「軟體設計」UML中關聯,聚合和組合區別
    尾巴是狗和貓的一部分(聚集/組成) 貓是一種寵物(遺傳/概括) 下圖顯示了三種類型的關聯連接器:關聯、聚合和組合。 關聯vs聚合vs組合 「關聯、聚合和組合之間的區別是什麼」這個問題最近經常被問到。 聚合和組合是關聯的子集,意味著它們是特定的關聯案例。在聚合和組合中,一個類的對象「擁有」另一個類的對象。但有一個微妙的區別: 聚合意味著子組件可以獨立於父組件而存在。
  • 不倫瑞克vs杜塞道夫 升班馬vs降班馬又是一場碾壓局?
    不倫瑞克vs杜塞道夫 升班馬vs降班馬又是一場碾壓局? 原標題:【料到體育】德乙:不倫瑞克vs杜塞道夫 升班馬vs降班馬又是一場碾壓局?德乙:不倫瑞克vs杜塞道夫不倫瑞克:
  • UFC 245:奧爾多vs莫賴斯,菲波vs彼得·嚴
    比賽名稱:UFC 245:Usman vs.傑曼·德·蘭達米(Germaine De Randamie)(#1) 【雛量級比賽】 何塞·奧爾多(Jose Aldo)(#3) vs. 馬龍·莫賴斯(Marlon Moraes)(#1) 【雛量級比賽】 彼得·嚴(Petr Yan)(#4) vs.
  • 北愛爾蘭vs羅馬尼亞,愛爾蘭vs保加利亞,科索沃vs摩爾多瓦
    愛爾蘭vs保加利亞愛爾蘭:球隊半場防守佳,連續6場在上半場保持不失球的表現;防守能力穩健,過去只有1場比賽被對手取得2個入球;交鋒佔據優勢,5次交鋒裡取得1勝4平的不敗成績。球隊下半場失球率高,最近有6場比賽於下半場失球,韌性不足;進攻能力下降,最近連續4場賽事沒有取得入球;球隊穩定性很差,能贏也能輸,逼平威爾斯但面對芬蘭卻被雙打敗。保加利亞:球隊近期大部分賽事都打出小球,球隊風格以守為主,踢法十分謹慎;角球有優勢,過去有4場角球數大於對手。
  • UFC194預測:奧爾多VS康納 韋德曼VS盧克超級戰
    (#為選手目前在該量級的官方排名)  主賽:  羽量級冠軍戰:何塞-奧爾多(Jose Aldo)(C) vs 康納-麥格雷戈(Conor McGregor)(IC)  何塞-奧爾多目前戰績為25勝1負,其中14次KO,2次降服獲勝。
  • 英超直播:維拉vs紐卡斯爾,伯恩利vs埃弗頓,曼城vs富勒姆
    維拉vs紐卡斯爾維拉近5場比賽輸掉4場,球隊打法逐漸被英超各隊所熟悉,而且陣容深度不高,尤其是一些球員還要參加國家隊比賽周,在疲勞加傷病等困擾後,成績下滑就是這些中遊隊伍必然的結果。比如中場大將巴克利在布萊頓的比賽中受傷就對球隊的戰力造成極大的影響。
  • 意甲直播:尤文圖斯vs都靈,國米vs博洛尼亞,羅馬vs薩索洛
    尤文圖斯亞vs都靈這場比賽是都靈德比,雙方肯定刺刀見紅。上輪尤文1-1被貝內文託逼平,原因之一是C羅輪休,這會是比較奇怪的決定,因為歐冠已經出線,寧願選擇意甲輪休,也要去打歐冠。是太放心隊友,還是歐冠進球更重要?不過本輪叢駿哥是支持C羅輪休的,因為下周中對巴薩,可能是C羅對梅西最後一場了。
  • 漫威英雄單挑DC英雄,黑豹vs蝙蝠俠,死侍vs喪鐘,誰能贏?
    漫威的黑豹 vs DC的蝙蝠俠。黑豹的主要能力是遠超常人的各項體能,野獸般靈敏的各項感官。蝙蝠俠的主要能力是精通世界各地所有流派的格鬥術,製造各種高科技裝備、有錢。漫威的亥伯龍 vs DC的超人。漫威的納摩 vs DC的海王。納摩的主要能力是遠超常人的力量和各項體能、飛行、水下自由活動和呼吸。海王的主要能力是遠超人類各項體能、堅硬的皮膚、飛一樣跳躍力、水陸兩棲呼吸、水中超級速度、控制海洋生物。漫威的幻視 vs DC的火星獵人。幻視的主要能力是頭部寶石發射雷射、飛行、密度控制,穿透物質。
  • 邁巴赫VS680七座商務 邁巴赫VS680大全
    奔馳商務車改裝邁巴赫元素的奔馳邁巴赫VS900相比邁巴赫vs680,它到底有何改變,咱們來好好看看。全新打造的奔馳邁巴赫VS900前臉方面就和vs680有很大的不同,雖都是大面甲造型;但是邁巴赫VS900的前臉要比VS680更加大氣。
  • UFC 258:佩德羅·蒙霍茲vs傑米·裡維拉
    比賽對陣表: UFC中量級冠軍爭霸賽: 卡馬魯·烏斯曼(Kamaru Usman)(#c) vs.吉爾伯特·伯恩斯(Gilbert Burns)(#1) 中量級比賽: 烏利亞·霍爾(Uriah Hall)(#9) vs.
  • UFC 257:肖恩·布爾戈斯vs哈基姆·達沃杜
    比賽對陣表:輕量級比賽:達斯汀·波裡爾(Dustin Poirier)(#2) vs. 康納·麥格雷戈(Conor McGregor)(#4)女子蠅量級比賽:傑西卡·艾(Jessica Eye)(#6) vs.
  • 周日央視中超直播:上港vs華夏,重慶vs泰達
    德洋貼士系列《周日央視中超直播:上港vs華夏,重慶vs泰達》2020年8月2 日(周日):中央電視總臺體育頻道(體育頻道/CCTV5,體育賽事頻道/CCTV5+)今天帶來八月第一個雙休日,周日的最新節目單。!
  • 深度學習 vs. 概率圖模型 vs. 邏輯學
    【編者按】在上個月發表博客文章《深度學習 vs. 機器學習 vs. 模式識別》之後,CMU博士、MIT博士後及vision.ai聯合創始人Tomasz Malisiewicz這一次帶領我們回顧50年來人工智慧領域三大範式(邏輯學、概率方法和深度學習)的演變歷程。通過本文我們能夠更深入地理解人工智慧和深度學習的現狀與未來。
  • 【足球推薦】0804 瑞士超 年輕人 vs 聖加倫
    足球推薦 :年輕人 vs 聖加倫 開賽時間: 08/04 02:30 瑞士超 年輕人 vs 聖加倫 足球推薦 《 年輕人 》主隊近況: 年輕人雖已經提前奪冠,但他門最後一個主場出賽不會輕鬆面對,企圖心值得相信。
  • 歐冠:馬賽vs曼城+米堡vs考文垂+博洛尼亞vs雷吉納 3場足球推薦
    005 米堡 vs 考文垂 比賽時間:10-28 03:45 勝平負推薦:勝平(1.86,3.10)
  • UFC 233:何塞·奧爾多vs卡布·斯旺森二番戰
    比賽名稱:UFC 233:Dillashaw vs. Cejudo比賽時間:1月27日(北京時間)比賽地點:美國 阿納海姆比賽對陣:【UFC雛量級冠軍爭霸賽】TJ·迪拉肖(T.J. Dillashaw)(#c) vs.
  • 西甲/意甲直播:塞維亞vs皇馬,斯佩齊亞vs拉齊奧
    塞維亞vs皇馬塞維亞和皇馬目前排名西甲4、5位,主隊少賽一場,只落後1分。周中歐冠0-4大敗於切爾西,但因為球隊早已小組出線,塞維亞在這場對陣皇馬的前後兩場歐冠比賽都可以派替補上陣,所以本場比賽可以盡遣精銳,完全不用留力。
  • History3那一天今晚上線,校霸vs學霸,忠犬vs冷美人,坐等真香
    網上很多妞都在吐槽主CP的顏值有點低於以往水平線,腐妞也有同感,希望播出後會被啪啪啪打臉了,哈哈哈~主CP:於希顧(左)vs項豪庭(右)主cp的故事是這樣的,依舊是略顯俗套的校園風,人仁高中的校園霸王項豪廷(宋緯恩飾)因為一個女孩遇上高冷學霸於希顧(黃雋智飾),共譜不打不相識到相愛的浪漫戀曲。
  • 《抵死冤家》Ballistic: Ecks Vs.Sever
    首映:2002年9月20日 官方網站:www.ecksvssever.com 預告片:->>> 起初,華納曾經相中李連杰和「刀鋒戰士」威斯利·斯奈普斯,打算讓兩位頂級功夫明星在片子裡大打出手;這之後,又先後看中過老牌動作巨星史泰龍和新近倍受看好的動作片接班人範·迪索(Vin Diesel),可惜也因為兩人的檔期問題而作罷。
  • EEG vs MRI vs fMRI vs fNIRS簡介
    顧名思義,磁鐵是磁共振成像的核心,但強度要高的多-比普通冰箱磁鐵強約1000至3,000倍。MRI產生的磁場與氫原子中的質子相互作用(而我們身體大約有70%的水,這是非常有用的 - 磁體會影響到很多氫原子)。 通常,這些質子的面向是隨機的,但加入磁場後,在磁場的作用下,它們中的很大一部分在同一方向上排列。