java的類之間的關係:泛化、依賴、關聯、實現、聚合、組合
泛化:
- 泛化關係(Generalization)也就是繼承關係,也稱為“is-a-kind-of”關係,泛化關係用於描述父類與子類之間的關係,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛 化關係用帶空心三角形的直線來表示。
- 在程式碼實現時,使用物件導向的繼承機制來實現泛化關係,如在Java語言中使用extends關鍵字、在C++/C#中使用冒號“:”來實現。 這裡寫圖片描述 泛化對應Java中繼承關係,即子類繼承父類中出private修飾外的所有東西(變數、方法等)。示例程式碼:
public class Animal {
}
public class Tiger extends Animal {
}
在UML當中,對泛化關係有三個要求:
1、子類與父類應該完全一致,父類所具有的屬性、操作,子類應該都有;
2、子類中除了與父類一致的資訊以外,還包括額外的資訊;
3、可以使用父類的例項的地方,也可以使用子類的例項;
依賴:
- 依賴關係(Dependency) 是一種使用關係,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關係。大多數情況下,依 賴關係體現在某個類的方法使用另一個類的物件作為引數。
- 在UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。 這裡寫圖片描述
public class Screwdriver { //螺絲刀,作為人類的工具,是用來被人類使用的
}
public class Person{
public void screw(Screwdriver src){ //擰螺絲,需使用螺絲刀
}
}
依賴關係有如下三種情況:
1、A類是B類中的(某中方法的)區域性變數;
2、A類是B類方法當中的一個引數;
3、A類向B類傳送訊息,從而影響B類發生變化;
關聯(Association):
- 是一種結構關係,說明一個事物的物件與另一個事物的物件相聯絡。給定有關聯的兩個類,可以從一個類的物件得到另一個類的物件。關聯有兩元關係和多元關係。兩元關係是指一種一對一的關係,多元關係是一對多或多對一的關係。兩個類之間的簡單關聯表示了兩個同等地位類之間的結構關係。當你想要表示結構化關係時使用關聯。
- 關聯關係(Association) 是類與類之間最常用的一種關係,它是一種結構化關係,用於表示一類物件與另一類物件之間有聯絡。
- 在UML類圖中,用實線連線有關聯的物件所對應的類,在使用Java、C#和C++等程式語言實現關聯關係時,通常將一個類的物件作為另一個類的屬性。
- 在使用類圖表示關聯關係時可以在關聯線上標註角色名。
分為幾種情況:
雙向關聯
public class Customer { private Product[] products; …… } public class Product { private Customer customer; …… }
單向關聯
public class Customer { private Address address; …… }
public class Address { …… }
自關聯
public class Node { private Node subNode; …… }
聚合關係(Aggregation)
- 聚合關係(Aggregation) 表示一個整體與部分的關係。通常在定義一個整體類後,再去分析這個整體類的組成結構,從而找出一些成員類,該整體類和成員類之間就形成了聚合 關係。
在聚合關係中,成員類是整體類的一部分,即成員物件是整體物件的一部分,但是成員物件可以脫離整體物件獨立存在。在UML中,聚合關係用帶空心菱形的直線表示。
public class Student{ } public class School{ private List students ; //學校與學生是聚合關係 }
組合關係(Composition)
- 組合關係(Composition)也表示類之間整體和部分的關係,但是組合關係中部分和整體具有統一的生存期。一旦整體物件不存在,部分物件也將不存在,部分物件與整體物件之 間具有同生共死的關係。
在組合關係中,成員類是整體類的一部分,而且整體類可以控制成員類的生命週期,即成員類的存在依賴於整體類。在UML中,組合關係用帶實心菱形的直線表示。
public class Menu{ } public class Window{ private List menus = new ArrayList<Menu>(); }
選單的存在前提是視窗的存在,兩者之間存在很強的擁有關係。且視窗對選單的生命週期負責,只有在視窗建立之後,選單才能夠建立,選單必須在視窗銷燬之前銷燬。因此Window與Menu之間是組合關係。
實現關係(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() { …… } }
總結:
關於關聯,聚合,組合在實現上並沒有顯著區別,相區別他們只有通過判斷關係雙方之間的實際關係,如關係強弱、建立與銷燬之間有無必要關聯等。 它們的強弱關係是沒有異議的:依賴 < 關聯 < 聚合 < 組合<泛化(繼承)
實現方式區別:
- 依賴關係:關係物件出現在區域性變數或者方法的引數裡,或者關係類的靜態方法被呼叫
- 聚合關係:關係物件出現在例項變數中
- 合成關係:關係物件出現在例項變數中
- Generalization: extends
- 實現: implements
相關文章
- (轉載)依賴、關聯、聚合、組合
- 物件導向程式設計程式碼詳解(依賴關係,關聯關係,組合關係)物件程式設計
- 【java】類之間的關係Java
- [轉載]繼承(Generalization),組合(Composition),聚合(Aggregation),關聯(Association),依賴(Dependency),實現(Realization繼承
- Spring框架模組依賴關係Spring框架
- Java設計模式-類之間的關係Java設計模式
- Maven 依賴關係Maven
- 使用IDEA模組之間依賴找不到依賴類Idea
- UML類圖--類之間的關係
- 類與類之間的基本關係
- build task依賴關係UI
- 介面、抽象類、普通類之間的關係抽象
- Maven中如何管理多模組專案的依賴關係Maven
- c++類與類的聚合(Aggregation)關係C++
- 【物件導向依賴關係概念總結】物件導向程式設計的五種依賴關係物件程式設計
- 關於Golang中的依賴注入實現Golang依賴注入
- 如何正確地實現Java模組與inter-module Maven構建測試依賴關係JavaMaven
- 類之間的6種關係詳解
- 如何在 SAP BTP 上建立 Module 之間具有依賴關係的 SAP MTA 應用
- python 類關聯關係Python
- 【python】【安裝包依賴關係】Python
- 在Java中,以下有關類的關聯關係描述錯誤的是()Java
- Elasticsearch依賴與Spring對應關係ElasticsearchSpring
- Java基礎:如何在IDEA中檢視依賴關係JavaIdea
- 關於Java中的物件、類、抽象類、介面、繼承之間的聯絡Java物件抽象繼承
- spring cloud alibaba 元件版本關係 以及 畢業版本依賴關係SpringCloud元件
- Java類關係之代理(代理模式)Java模式
- SAP Spartacus 的 TMS 和 Event Service 實現的關聯關係
- SAP WM 通過2-Step Picking建立的TO之間的關聯關係
- SpringBoot中的slf4j日誌依賴關係Spring Boot
- 如何管理前端專案中的複雜依賴關係前端
- 表的關聯關係
- 通過遞迴實現,單表父子關係資料 或者上下級關係資料的組合遞迴
- 位(bit)、位元組(Byte)、KB、MB、GB ... 之間的關係
- Window、WindowManager、View 之間的關係View
- git、github、gitlab之間的關係GithubGitlab
- 使用Gradle檢視Android專案中庫的依賴關係GradleAndroid
- 什麼是專案管理中的任務依賴關係專案管理
- gcc 標頭檔案依賴關係 分析工具GC