java中類與類之間的幾種關系

通常我們都會使用UML圖來表示類與類之間的關系。在這里介紹基本的UML畫法,并用UML圖類表示類之間的關系。

UML類圖的表示方式:

一、類的屬性的表示方式

在UML類圖中,類使用包含類名、屬性(field) 和方法(method) 且?guī)в蟹指罹€的矩形來表示,比如下圖表示一個Employee類,它包含name,age和email這3個屬性,以及modifyInfo()方法。

Employee類的UML圖

那么屬性/方法名稱前加的加號和減號是什么意思呢?它們表示了這個屬性或方法的可見性,UML類圖中表示可見性的符號有三種:

+ :表示public
- :表示private
#:表示protected(friendly也歸入這類)

因此,上圖中的Employee類具有3個私有屬性和一個公有方法。
實際上,屬性的完整表示方式是這樣的:
可見性 名稱 :類型 [ = 缺省值]
中括號中的內(nèi)容表示是可選的

二、類的方法的表示方式
上圖中我們已經(jīng)看到了方法的表示形式。實際上,方法的完整表示方式如下:
可見性 名稱(參數(shù)列表) [ : 返回類型]
同樣,中括號中的內(nèi)容是可選的。
比如在下圖的Demo類中,定義了3個方法:

Demo類

  • public方法method1接收一個類型為Object的參數(shù),返回值類型為void
  • protected方法method2無參數(shù),返回值類型為String
  • private方法method3接收類型分別為int、int[]的參數(shù),返回值類型為int

類之間大體分為5種關系:

在設計模式中類與類之間的關系主要有5種:依賴、關聯(lián)、聚合、組合、繼承,它們之間的耦合度依次增加。

1,依賴關系(Dependency)

單向,表示一個類依賴于另一個類的定義,其中一個類的變化將影響另外一個類,是一種“use a”關系!如果A依賴于B,則B表現(xiàn)為A的局部變量,方法參數(shù),靜態(tài)方法調(diào)用等

在UML類圖中,依賴關系用一條帶有箭頭的虛線表示

public class Driver {  
    public void driver(){  
        Car car = new Car ();//局部變量  
        ....  
    } 

    public void driver1(Car car){}   //方法參數(shù)

    public void driver2(){  
            Car.move(); //靜態(tài)方法調(diào)用  
            ...  
    }  
}  

正常情況下,如果先設計類圖, 再進行編碼,那么在類圖的設計過程中是不會涉及到具體的實現(xiàn)細節(jié)的,所以畫類圖的依賴關系時,只要關注接口層面就可以了(依賴僅畫接口參數(shù),忽略局部變量,靜態(tài)方法調(diào)用)

2,關聯(lián)關系(Association)

單向或雙向(通常我們需要避免使用雙向關聯(lián)關系),是一種"has a"關系,如果A單向關聯(lián)B,則可以說A has a B,通常表現(xiàn)為全局變量

在UML類圖中單向關聯(lián)用一個帶箭頭的直線表示

public class Customer {  
    public Address address;  
      
    public void setAddress (Address address){        
        this.address= address;  
    }  
      
    public Address getAddress (){          
        return address;  
    }  
}  

雙向關聯(lián)

在UML類圖中,雙向關聯(lián)用一個不帶箭頭的直線表示

自關聯(lián)

3,聚合關系(Aggregation)

單向,關聯(lián)關系的一種,與關聯(lián)關系之間的區(qū)別是語義上的,關聯(lián)的兩個對象通常是平等的,聚合則一般不平等,有一種整體和局部的感覺,實現(xiàn)上區(qū)別不大!

UML中聚合關系用帶空心菱形和箭頭的直線表示

public class Team {  
    public Person person;  
      
    public Team(Person person){  
        this.person = person;  
    }  
}  

Team 由 Person 組成,其生命周期不同,整體不存在了,部分依然存在,當前Team解散了,人還在,還可以加入別的組。

4,組合關系(Composition)

單向,是一種強依賴的特殊聚合關系

在UML類圖中,組合關系用一個帶實心菱形和箭頭的直線表示

public class Person {  
    public Head head;  
    public Body body;  
      
    public Person(){  
        head = new Head();  
        body = new Body();  
    }  
}  

Head,Body,Arm和Leg等組合成People,其生命周期相同,如果整體不存在了,部分也將消亡。

5,繼承關系(Inheritance)

類繼承抽象類,類繼承父類,對應的是extend關鍵字

在UML類圖中用帶空心三角形的直線表示

類實現(xiàn)接口,對應implement關鍵字

在UML類圖中用帶空心三角形的虛線表示

可以分得更細:
實現(xiàn)(Realization):類實現(xiàn)接口屬于這種關系
泛化(Generalization):即"is a"關系,類繼承抽象類,類繼承父類都屬于這種關系

轉:UML類圖(Class Diagram)中類與類之間的關系及表示方式

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 在UML 2.0的13種圖形中,類圖是使用頻率最高的UML圖之一。Martin Fowler在其著作《UML Di...
    雷雷_zll閱讀 13,511評論 0 14
  • UML概述 UML簡介 UML (Unified Modeling Language)為面向對象軟件設計提供統(tǒng)一的...
    aron1992閱讀 610評論 0 0
  • 面向對象程序設計概述 面向對象程序設計(簡稱OOP)是當今主流的程序設計范型,它已經(jīng)取代了傳統(tǒng)的“結構化”過程化程...
    Steven1997閱讀 990評論 0 0
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評論 18 399
  • 新學期的第一天 準確的說是前一晚 我開始搞不清楚我的上一學期是什么狀態(tài) 所以,我應該開始簡單的日記了。 -----...
    勾勒紀念閱讀 214評論 0 0

友情鏈接更多精彩內(nèi)容